32 lines
640 B
Text
32 lines
640 B
Text
|
|
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]]
|