Best shuffle: Difference between revisions

Content added Content deleted
(→‎{{header|AutoHotkey}}: Marked incorrect and no output given.)
Line 1,656: Line 1,656:
import random
import random


def count(w1,w2):
def count(w1,wnew):
return sum(c1==c2 for c1,c2 in zip(w1, w2))
return sum(c1==c2 for c1,c2 in zip(w1, wnew))


def best_shuffle(w):
def best_shuffle(w):
w2, w2old = list(w), []
wnew = list(w)
n = len(w)
n = len(w)
rangelists = (list(range(n)), list(range(n)))
rangelists = (list(range(n)), list(range(n)))
w2old = w2[:]
for r in rangelists:
for r in rangelists:
random.shuffle(r)
random.shuffle(r)
Line 1,669: Line 1,668:
for i in rangei:
for i in rangei:
for j in rangej:
for j in rangej:
if i != j and w2[j] != w2[i] and w[i] != w2[j] and w[j] != w2[i]:
if i != j and wnew[j] != wnew[i] and w[i] != wnew[j] and w[j] != wnew[i]:
w2[j], w2[i] = w2[i], w2[j]
wnew[j], wnew[i] = wnew[i], wnew[j]
w2 = ''.join(w2)
wnew = ''.join(wnew)
return w2, count(w, w2)
return wnew, count(w, wnew)




Line 1,680: Line 1,679:
test_words += ['aardvarks are ant eaters', 'immediately', 'abba']
test_words += ['aardvarks are ant eaters', 'immediately', 'abba']
for w in test_words:
for w in test_words:
w2, c = best_shuffle(w)
wnew, c = best_shuffle(w)
print("%29s, %-29s ,(%i)" % (w, w2, c))</lang>
print("%29s, %-29s ,(%i)" % (w, wnew, c))</lang>


;Sample output
;Sample output