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}}== |