20 lines
593 B
Text
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;
|