Best shuffle: Difference between revisions

Added zkl
(Added zkl)
Line 2,989:
up, pu, (0)
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>
 
Anonymous user