RosettaCodeData/Task/Best-shuffle/SETL/best-shuffle.setl
2024-10-16 18:07:41 -07:00

20 lines
593 B
Text

program find_best_shuffle;
tests := ["tree", "abracadabra", "seesaw", "elk", "grrrrrr", "up", "a"];
loop for test in tests do
print(test, '->', sh := best_shuffle(test), same(test, sh));
end loop;
proc best_shuffle(s);
r := s;
loop for i in [1..#s] do
loop for j in [1..#s] | i /= j and s(i) /= r(j) and s(j) /= r(i) do
[r(i), r(j)] := [r(j), r(i)];
end loop;
end loop;
return r;
end proc;
proc same(r, s);
return 0 +/[1 : i in [1..#s] | r(i) = s(i)];
end proc;
end program;