Best shuffle: Difference between revisions

Content added Content deleted
m (→‎{{header|REXX}}: added/changed whitespace and comments, changed indentations.)
Line 1,264: Line 1,264:
#define extensions.
#define extensions.


#class(extension)op
#symbol shuffle = (:aLiteral)
{
[
#method shuffled
#var aLength := aLiteral length.
#var aShuffled := convertor toArray:aLiteral.

control seek &int:0 &int:(aLength-1) &every: (&index:i)
[
[
#var aChar := aLiteral@i.
#var anOriginal := self toArray.
(aChar == (aShuffled@i)) ?
#var aShuffled := self toArray.
0 to:(anOriginal length - 1) &doEach: (:i)
[
[
control run &int:0 &int:(aLength-1) &forEvery: (&index:j)
0 to:(anOriginal length - 1) &doEach: (:j)
[
[
#var anAltChar := aShuffled@j.
((i != j)and:[anOriginal@i != (aShuffled@j)]and:[anOriginal@j != (aShuffled@i)]) ?
[
((anAltChar != aChar)and:[ anAltChar != (aLiteral@i) ]and:[aChar != (aLiteral@j)]) ?
[
aShuffled exchange:i:j.
aShuffled~indexable exchange:i:j.
].
^ true.
].
].
].
].
].
^ false.
].

^ control run:aShuffled &forEach:(Summing new:(String new)) literal.
].

#symbol scoreShuffle = (:anOriginal:aShuffled)
[
#var aScore := Integer new.
^ aShuffled summarize:(String new) literal.
control run &int:0 &int:(anOriginal length - 1) &forEvery: (&index:i)
]
[ ((anOriginal @ i) == (aShuffled @ i)) ? [ aScore += 1. ]. ].
#method score : anOriginalText
^ aScore value.
[
].
#var aShuffled := self toArray.
#var anOriginal := anOriginalText toArray.
#var aScore := Integer new.

0 to:(anOriginal length - 1) &doEach: (:i)
[ ((anOriginal @ i) == (aShuffled @ i)) ? [ aScore += 1. ]. ].
^ aScore value.
]
}


#symbol program =
#symbol program =
[
[
control run:("abracadabra", "seesaw", "grrrrrr", "pop", "up", "a") &forEach: aWord
("abracadabra", "seesaw", "grrrrrr", "pop", "up", "a") run &each: aWord
[
[
#var aShuffled := shuffle:aWord.
#var aShuffled := aWord shuffled.


consoleEx writeLine:"The best shuffle of ":aWord:" is ":aShuffled:"(":(scoreShuffle:aWord:aShuffled):")".
console writeLine:"The best shuffle of ":aWord:" is ":aShuffled:"(":(aShuffled score:aWord):")".
].
].


console readChar.
console readChar.
].</lang>
].</lang>
{{out}}
<pre>
The best shuffle of abracadabra is caadrbabaar(0)
The best shuffle of seesaw is ewaess(0)
The best shuffle of grrrrrr is rgrrrrr(5)
The best shuffle of pop is opp(1)
The best shuffle of up is pu(0)
The best shuffle of a is a(1)
</pre>


=={{header|Erlang}}==
=={{header|Erlang}}==