alfabe = 'abcdefghijklmnopqrstuvwxyz'
def edits1_meta(word):
split = [(word[:i], word[i:]) for i in range(len(word) + 1)]
deletes = [(a + b[1:], ('delete', a[-1] if len(a)>0 else '@', b[0]))
for a, b in split if b]
transposes = [(a + b[1] + b[0] + b[2:], ('transpose', b[0], b[1]))
for a, b in split if len(b) > 1]
yeridegisenler = [(a + c + b[1:], ('replace', b[0], c))
for a, b in split for c in alfabe if b]
inserts = [ (a + c + b, ('insert', a[-1] if len(a)>0 else '@', c))
for a, b in split for c in alfabe]
return set(deletes + transposes + yeridegisenler + inserts)
def edits2_meta(word):
raise NotImplementedError#tum olasi keleiemelri icericek mesafe 2
def permut(q):
if len(q)<=1:
yield q
else:
for perm in permut(q[1:]):
for y in range(len(perm)+1):
yield perm[:y] + q[0:1] + perm[y:]
list(permut(["beraber", "kazandi", "hep"]))
"""[['beraber', 'kazandi', 'hep'],
['kazandi', 'beraber', 'hep'],
['kazandi', 'hep', 'beraber'],
['beraber', 'hep', 'kazandi'],
['hep', 'beraber', 'kazandi'],
['hep', 'kazandi', 'beraber']]
"""
def edits1(word):
split = [(word[:i], word[i:]) for i in range(len(word) + 1)]
deletes = [a + b[1:] for a, b in split if b]
transposes = [a + b[1] + b[0] + b[2:] for a, b in split if len(b) > 1]
yeridegisenler = [a + c + b[1:] for a, b in split for c in alfabe]
inserts = [a + c + b for a, b in split for c in alfabe]
return set(deletes + transposes + yeridegisenler + inserts)
def edits2(word):
return set(e2 for e1 in edits1(word) for e2 in edits1(e1))
def edits_meta(n, word):
if n < 1:
raise AttributeError('n >= 1')
if n == 1:
return edits1_meta(word)
else:
return set(e2 for e1 in edits_meta(n-1, word) for e2 in edits_meta(n-1, e1[0]))
def edits(n, word):
if n < 1:
raise AttributeError('n >= 1')
if n == 1:
return edits1(word)
else:
return set(e2 for e1 in edits(n-1, word) for e2 in edits(n-1, e1))