Best shuffle: Difference between revisions

no edit summary
No edit summary
Line 417:
<lang haskell>bestShuffle :: Eq a => [a] -> [a]
bestShuffle s = minimumBy (compare `on` score s) $ permutations s</lang>
 
=={{header|Icon}}==
<lang icon>procedure main(args)
while write(scramble(read()))
end
 
procedure scramble(s)
t := s
every i := 1 to *t do {
every j := (1 to i-1) | (i+1 to *t) do {
if (t[i] ~== s[j]) & (s[i] ~== t[j]) then {
t[i] :=: t[j]
break
}
}
}
return t || " ("||unchanged(s,t)||")"
end
 
procedure unchanged(s1,s2) # Number of unchanged elements
count := 0
every s1[i := 1 to *s1] == s2[i] do count +:= 1
return count
end
</lang>
 
The code also works in Unicon.
 
Sample output:
<pre>
->scramble
tree
eetr (0)
abracadabra
raacaradabb (0)
seesaw
wsseea (0)
up
pu (0)
grrrrrr
rrrrrrg (5)
a
a (1)
->
</pre>
 
=={{header|J}}==