Portierung von Doublet-Solver von Python2 auf Python3 auf dem Git-Hub. Dient auch als Einführung.
Ein Dublett ist ein Puzzle, das Wörter einzeln ersetzt und verbindet. Die beiden angegebenen Wörter heißen
Es scheint, dass das erste Wort, das letzte Wort und die << erforderliche Anzahl von Links >> angegeben sind. Luis Carroll wurde in einer Wochenzeitschrift für Frauen in London serialisiert. Es ist im Buch "Logic in Wonderland" veröffentlicht.
Die Transplantation funktioniert auf die folgenden drei Arten. (1) Löschen Sie den Import urllib2, da er nicht benötigt wird. ② Ändern Sie xrange () in range (). ③ Zum Drucken () hinzufügen.
Im Code hier
① Um Argumente über die Befehlszeile übernehmen zu können
(2) Um auch undefinierte Argumente im Wörterbuch zu verarbeiten
③ Nach der historischen Methode wird die Ausgabe nach
Doublet-Solver kann so einfach in Python geschrieben werden, nicht wahr? überrascht.
Es unterstützt auch Japanisch. Das englische dictionary'dic.txt 'und das japanische dictionary'jd.txt' finden Sie unter hier . Um das Wörterbuch zu ändern, ändern Sie den geöffneten Dateinamen von #dictionary im Code.
CODE
doublet.py
#!/usr/bin/python3
import sys
from collections import defaultdict
def allwordsoflength(l, all):
return set([x.lower().strip() for x in all if len(x.lower().strip()) == l])
def wildcard(s, idx):
return s[:idx] + '?' + s[idx+1:]
def wildcarded(s):
for idx in range(len(s)):
yield wildcard(s, idx)
def buildindex(all):
index = defaultdict(list)
for w in all:
for wild in wildcarded(w):
index[wild.lower()].append(w)
return index
def oneaway(word, index):
ret = []
for w in wildcarded(word):
ret += index[w]
return ret
def srch(start, end, all, maxdepth = 100):
ftree = [(start, 0, [])]
done = [start]
alloflen = allwordsoflength(len(start), all)
index = buildindex(alloflen)
for e in ftree:
if e[1] > maxdepth:
return 'Reached Max Depth.'
children = oneaway(e[0], index)
children = list(set(children) - set(done))
if children == [] and e == ftree[-1]:
return 'Search Exhausted.'
if end in children:
return (e[1] , ' '.join(e[2] + [e[0], end]))
for n in children:
ftree.append((n, e[1] + 1, e[2] + [e[0]]))
done = list(set(done) | set(children))
words = [ x for x in open("dic.txt") ] # dictionary
args = sys.argv
a = args[1].lower()
b = args[2].lower()
if len(a)!=len(b):
print("Length of strings mismatch!")
exit(1)
words.append(a)
words.append(b)
print (srch(a,b, words))
Ausführungsbeispiel
$ doublet.py alice maria
(6, 'alice aline cline caine maine marne marie maria')
$ doublet.py hate love
(2, 'hate have lave love')
$ doublet.py work rest
(3, 'work wort wert west rest')
$
$ dbltj.Py Sanji Snack
(2, 'Sanji Onji Oyaji Snack')
$ dbltj.py apple mikan
(3, 'Apfel Apfel Apfel Mikaku Mikaku Mikan')
$ dbltj.py Hiruma Yakan
(3, 'Hiruma Hidama Hidan Hikan Yakan')
$ dbltj.py Gruß guten Morgen
(6, 'Grüße Heisei Heiso Heiso Heiso Heyo Guten Morgen Guten Morgen')
$
Recommended Posts