22 lines
544 B
Text
22 lines
544 B
Text
program faro_shuffle;
|
|
loop for test in [8, 24, 52, 100, 1020, 1024, 10000] do
|
|
print(lpad(str test, 5) + " cards: " + lpad(str cycle [1..test], 4));
|
|
end loop;
|
|
|
|
op cycle(l);
|
|
start := l;
|
|
loop until l = start do
|
|
l := shuffle l;
|
|
n +:= 1;
|
|
end loop;
|
|
return n;
|
|
end op;
|
|
|
|
op shuffle(l);
|
|
return [l(mapindex(i,#l)) : i in [1..#l]];
|
|
end op;
|
|
|
|
proc mapindex(i, size);
|
|
return if odd i then i div 2+1 else (i+size) div 2 end;
|
|
end proc;
|
|
end program;
|