RosettaCodeData/Task/Perfect-shuffle/SETL/perfect-shuffle.setl
2023-12-16 21:33:55 -08:00

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;