Best shuffle: Difference between revisions
Content added Content deleted
(Added Erlang) |
No edit summary |
||
Line 1,258: | Line 1,258: | ||
xxxxx, xxxxx, (5)</pre> |
xxxxx, xxxxx, (5)</pre> |
||
=={{header|Elena}}== |
|||
<lang Elena>#define system. |
|||
#symbol shuffle = &&:aLiteral |
|||
[ |
|||
#var aLength := aLiteral Length. |
|||
#var aShuffled := stringControl toArray:aLiteral. |
|||
control from:0 &till:aLength &do: &&:i |
|||
[ |
|||
#var aChar := aLiteral@i. |
|||
(aChar == (aShuffled@i)) ? |
|||
[ |
|||
control from:0 &till:aLength &do: &&:j |
|||
[ |
|||
#var anAltChar := aShuffled@j. |
|||
(anAltChar != aChar)and:[ anAltChar != (aLiteral@i) ]and:[aChar != (aLiteral@j)] ? |
|||
[ |
|||
arrayControl exchange:i &with:j &in:aShuffled. |
|||
#break nil. |
|||
]. |
|||
]. |
|||
]. |
|||
]. |
|||
^ Summing new:(String new) foreach:aShuffled Literal. |
|||
]. |
|||
#symbol scoreShuffle = &&:anOriginal:aShuffled |
|||
[ |
|||
#var aScore := Integer new. |
|||
control from:0 &till:(anOriginal Length) &do: &&:i |
|||
[ (anOriginal @ i) == (aShuffled @ i) ? [ aScore += 1. ]. ]. |
|||
^ aScore Number. |
|||
]. |
|||
#symbol program = |
|||
[ |
|||
control foreach:("abracadabra", "seesaw", "grrrrrr", "pop", "up", "a") &do: &&:aWord |
|||
[ |
|||
#var aShuffled := shuffle:aWord. |
|||
console write:"The best shuffle of " write:aWord write:" is " write:aShuffled write:"(" |
|||
write:(scoreShuffle:aWord:aShuffled) writeLine:")". |
|||
]. |
|||
console readChar. |
|||
].</lang> |
|||
=={{header|Erlang}}== |
=={{header|Erlang}}== |
||
Deterministic version. |
Deterministic version. |