Best shuffle: Difference between revisions
Content added Content deleted
Line 420: | Line 420: | ||
=={{header|Icon}} and {{header|Unicon}}== |
=={{header|Icon}} and {{header|Unicon}}== |
||
<lang icon>procedure main(args) |
<lang icon>procedure main(args) |
||
while |
while scram := bestShuffle(line := read()) do |
||
write(line," -> ",scram," (",unchanged(line,scram),")") |
|||
end |
end |
||
procedure |
procedure bestShuffle(s) |
||
t := s |
t := s |
||
# every !t :=: ?t # Uncomment |
# every !t :=: ?t # Uncomment to get a random best shuffling |
||
every i := 1 to *t do |
every i := 1 to *t do |
||
every j := (1 to i-1) | (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 break t[i] :=: t[j] |
if (t[i] ~== s[j]) & (s[i] ~== t[j]) then break t[i] :=: t[j] |
||
return t |
return t |
||
end |
end |
||
procedure unchanged(s1,s2) # Number of unchanged elements |
procedure unchanged(s1,s2) # Number of unchanged elements |
||
count := 0 |
every (count := 0) +:= (s1[i := 1 to *s1] == s2[i], 1) |
||
every s1[i := 1 to *s1] == s2[i] do count +:= 1 |
|||
return count |
return count |
||
end |
end</lang> |
||
</lang> |
|||
The code works in both Icon and Unicon. |
The code works in both Icon and Unicon. |
||
Line 443: | Line 442: | ||
Sample output: |
Sample output: |
||
<pre> |
<pre> |
||
->scramble |
->scramble <scramble.data |
||
⚫ | |||
tree |
|||
seesaw -> wasese (0) |
|||
eetr (0) |
|||
elk -> lke (0) |
|||
abracadabra |
|||
⚫ | |||
⚫ | |||
⚫ | |||
seesaw |
|||
a -> a (1) |
|||
aardvarks are ant eaters -> sdaaaraaasv rer nt keter (0) |
|||
up |
|||
⚫ | |||
grrrrrr |
|||
⚫ | |||
a |
|||
a (1) |
|||
-> |
-> |
||
</pre> |
</pre> |