Jump to content

Best shuffle: Difference between revisions

→‎Swap if it is locally better algorithm: WIth added output variability!
(→‎Swap if it is locally better algorithm: Do antidisestablishmentarianism)
(→‎Swap if it is locally better algorithm: WIth added output variability!)
Line 1,210:
=={{header|Python}}==
===Swap if it is locally better algorithm===
With added randomization of swaps!
<lang python>from collections import Counter
import random
 
def count(w1,w2):
Line 1,218 ⟶ 1,220:
w2, w2old = list(w), []
n = len(w)
rangewrangelists = (list(range(n)), list(range(n)))
while w2old != w2 and n:
n -= 1
w2old = w2[:]
for ir in rangewrangelists: random.shuffle(r)
rangei, rangej = for j in rangew:rangelists
for i in rangei:
for j in rangej:
if i != j and w2[j] != w2[i] and w[i] != w2[j] and w[j] != w2[i]:
w2[j], w2[i] = w2[i], w2[j]
w2 = ''.join(w2)
return w2, count(w, w2)
 
 
 
if __name__ == '__main__':
test_words = 'tree abracadabra seesaw, elk grrrrrr up a antidisestablishmentarianism'.split()
for w in test_words:
for w in 'tree abracadabra seesaw elk grrrrrr up a antidisestablishmentarianism'.split():
print(w, '->', best_shuffle(w))</lang>
 
;Sample output
Three runs showing variability in shuffled results
<pre>tree -> ('eert', 0)
<pre>>>> ================================ RESTART ================================
abracadabra -> ('baadrbaraac', 0)
>>>
seesaw -> ('eswaes', 0)
<pre>tree -> ('eert', 0)
abracadabra -> ('baadrbaraacraacarbdaab', 0)
seesaw, -> ('eswaese,awess', 0)
elk -> ('kel', 0)
grrrrrr -> ('rrrrrrg', 5)
up -> ('pu', 0)
a -> ('a', 1)
antidisestablishmentarianism -> ('ntrmaliaaeiadettnsishnsiimbs', 0)
>>> ================================ RESTART ================================
>>>
tree -> ('eetr', 0)
abracadabra -> ('raacarabdab', 0)
seesaw, -> (',aweess', 0)
elk -> ('kel', 0)
grrrrrr -> ('rrrrrgr', 5)
up -> ('pu', 0)
a -> ('a', 1)
antidisestablishmentarianism -> ('iibasstrtnidmannshleiatiaems', 0)
>>> ================================ RESTART ================================
>>>
tree -> ('eert', 0)
abracadabra -> ('rcabaradaab', 0)
seesaw, -> ('wssa,ee', 0)
elk -> ('kel', 0)
grrrrrr -> ('rgrrrrrrrrrgrr', 5)
up -> ('pu', 0)
a -> ('a', 1)
antidisestablishmentarianism -> ('imissstiinlirtmeanaathbesandneitstnimaisalbainsmtisdaerh', 0)</pre>
>>> </pre>
 
===Alternative algorithm #1===
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.