Best shuffle: Difference between revisions
Content added Content deleted
(Added zkl) |
|||
Line 2,989: | Line 2,989: | ||
up, pu, (0) |
up, pu, (0) |
||
a, a, (1) |
a, a, (1) |
||
</pre> |
|||
=={{header|zkl}}== |
|||
{{trans|D}} |
|||
{{trans|Common Lisp}} |
|||
<lang zkl>fcn bestShuffle(str){ |
|||
s:=str.split("").shuffle(); // -->List |
|||
if(not s) return(str,str.len()); // can't shuffle "" or "a" |
|||
n:=str.len(); |
|||
foreach i in (n){ |
|||
foreach j in (n){ |
|||
if (i!=j and s[i]!=str[j] and s[j]!=str[i]){ |
|||
s.swap(i,j); |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
return(s.concat(), s.zipWith('==,str).sum(0)); |
|||
}</lang> |
|||
<lang zkl>ss:=T("abracadabra","immediately","grrrrrr","seesaw","pop","up","a",""); |
|||
foreach s in (ss){ |
|||
ns,cnt:=bestShuffle(s); |
|||
println("%s --> %s (%d)".fmt(s,ns,cnt)); |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
abracadabra --> raabaracadb (0) |
|||
immediately --> mietlmedyia (0) |
|||
grrrrrr --> rgrrrrr (5) |
|||
seesaw --> asswee (0) |
|||
pop --> opp (1) |
|||
up --> pu (0) |
|||
a --> a (1) |
|||
--> (0) |
|||
</pre> |
</pre> |
||