Best shuffle: Difference between revisions

m
(Add Nim implementation)
Line 1,360:
 
=={{header|Elena}}==
ELENA 3.4.x :
<lang Elena>import system'routines.;
import extensions.;
import extensions'text.;
 
extension op
{
shuffledget Shuffled()
[{
var anOriginaloriginal := self .toArray.();
var aShuffledshuffled := self .toArray.();
0for to:(anOriginalint lengthi -:= 1)0, do(:i < original.Length, i += 1) {
for (int j := 0, j < original.Length, j += 1) {
[
if (i != j && original[i] != shuffled[j] && original[j] != shuffled[i])
0 to:(anOriginal length - 1) do(:j)
[ {
if ((i != j) && shuffled.exchange(anOriginal[i] != aShuffled[,j]) && $(anOriginal[j] != aShuffled[i]))
[}
aShuffled exchange(i,j)}
].};
].
].
^ aShuffled shuffled.summarize(StringWriter new); toLiteralStringWriter()).toString()
]}
score : anOriginalText(originalText)
[{
var aShuffledshuffled := self .toArray.();
var anOriginaloriginal := anOriginalText originalText.toArray.();
varint aScorescore := Integer new.0;
 
0for to(anOriginalint lengthi -:= 1)0, do(:i < original.Length, i += 1) {
[ if (anOriginaloriginal[i] == aShuffledshuffled[i]) [{ aScorescore += append:1 ] ].}
[};
^ aScore value.score
]}
}
 
public program()
{
[
(new string[]{"abracadabra", "seesaw", "grrrrrr", "pop", "up", "a") }.forEach:(:s)
[{
var shuffled_s := s shuffled.Shuffled;
 
console .printLine("The best shuffle of ",s," is ",shuffled_s,"(",shuffled_s .score:(s),")").
].};
 
console .readChar()
]}</lang>
{{out}}
<pre>
Anonymous user