Best shuffle: Difference between revisions

Content added Content deleted
No edit summary
Line 1,236: Line 1,236:
a -> a (1)
a -> a (1)
</pre>
</pre>

=={{header|Groovy}}==
<lang groovy>def shuffle(text) {
def list = (text as List)
Collections.shuffle(list)
[original: text, shuffled: list.join(""), score: score(text, list)]
}

def score(original, shuffled) {
int score = 0
original.eachWithIndex { character, index ->
if (character == shuffled[index]) {
score++
}
}
score
}

def bestShuffle(text) {
def best = shuffle(text)
for (int i = 0; i < 30 && best.score > 0; i++) {
def newTry = shuffle(text)
if (newTry.score < best.score) {
best = newTry
}
}
best
}

["abracadabra", "seesaw", "elk", "grrrrrr", "up", "a"].each { text ->
def result = bestShuffle(text)
println "${result.original}, ${result.shuffled}, (${result.score})"
}
</lang>
Output:
<pre>
abracadabra, bdaarcabaar, (1)
seesaw, awsese, (0)
elk, kel, (0)
grrrrrr, rrrrrrg, (5)
up, pu, (0)
a, a, (1)
</pre>



=={{header|Haskell}}==
=={{header|Haskell}}==