Anonymous user
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)
while w2old != w2 and n:
n -= 1
w2old = w2[:]
for
rangei, rangej =
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:
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)▼
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 -> ('
up -> ('pu', 0)
a -> ('a', 1)
antidisestablishmentarianism -> ('
>>> </pre>
===Alternative algorithm #1===
|