ClearAll[KolakoskiGen] KolakoskiGen[start_List, its_Integer] := Module[{c, s, k, cnext, sk}, s = {}; k = 1; c = start; Do[ cnext = First[c]; c = RotateLeft[c]; AppendTo[s, cnext]; sk = s[[k]]; If[sk > 1, s = Join[s, ConstantArray[cnext, sk - 1]] ]; k += 1; , {its} ]; s ] run = Take[KolakoskiGen[{1, 2}, 20], 20] check = Length /@ Split[%]; check === Take[run, Length[check]] run = Take[KolakoskiGen[{2, 1}, 20], 20] check = Length /@ Split[%]; check === Take[run, Length[check]] run = Take[KolakoskiGen[{1, 3, 1, 2}, 30], 30] check = Length /@ Split[%]; check === Take[run, Length[check]]