Code bij Prettig Permuteren
De code is ook als één geheel te downloaden als Jupyter Notebook of platte Python code.
bepijl
def bepijl(rij): return [(w, -1) for w in rij]
ontpijl
def ontpijl(toestand): return [w for w, _ in toestand]
is_mobiel
def is_mobiel(toestand, i): n = len(toestand) a, p = toestand[i] b = 0 <= i+p < n # heeft buur return b and toestand[i+p][0] < a
mobiel
def mobiel(toestand): return [i for i, _ in enumerate(toestand) if is_mobiel(toestand, i) ]
verwissel
def verwissel(toestand, i): a, p = toestand[i] # letter, pijl b = toestand[i+p] # buur met pijl toestand[i] = b toestand[i+p] = a, p
draai
def draai(toestand, a): for i, (b, p) in enumerate(toestand): if b > a: toestand[i] = b, -p
permuteer
def permuteer(rij): t = bepijl(rij) # toestand while True: print(''.join(ontpijl(t))) m = mobiel(t) if not m: # geen mobiele letters return im = max(m, key=lambda i: t[i][0]) # im = index hoogste mobiele letter a = t[im][0] verwissel(t, im) draai(t, a)