Portieren und Ändern des Doublet-Solvers von Python2 auf Python3.

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 , die Wörter in der Mitte heißen und die Wörter von Doublet zu Doublet heißen . Solange Sie ein Wort haben, ist der kürzeste Schritt, einen Buchstaben durch ein Wort zu ersetzen, das n unterschiedlich ist, n-mal.

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 anstelle der Anzahl der Konvertierungsschritte durchgeführt. ④ In Kleinbuchstaben behandeln Und vier Korrekturen wurden hinzugefügt.

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

Portieren und Ändern des Doublet-Solvers von Python2 auf Python3.
Von Python bis zur Verwendung von MeCab (und CaboCha)
Änderungen von Python 3.0 zu Python 3.5
Änderungen von Python 2 zu Python 3.0
[Python] Lesen von Daten aus CIFAR-10 und CIFAR-100
Post von Python nach Slack
Flirte von PHP nach Python
Portierung von Argparse zu Hydra
Tipps und Vorsichtsmaßnahmen beim Portieren von MATLAB-Programmen nach Python
Wechseln Sie von Python2.7 zu Python3.6 (centos7)
Stellen Sie von Python aus eine Verbindung zu SQLite her
Lernen Sie die Grundlagen und Tipps der kanonischen Python-Ausdrücke von Grund auf neu
Herstellen einer Verbindung zu verschiedenen DBs über Python (PEP 249) und SQL Alchemy
Gehen Sie zur Sprache, um Teil 8 zu sehen und sich daran zu erinnern. Rufen Sie die GO-Sprache von Python aus auf
[Einführung in Python3 Tag 1] Programmierung und Python
Python, Ausbeute, Rückkehr und manchmal Ausbeute von
[Lambda] [Python] Von Lambda auf Twitter posten!
Lesen und verwenden Sie Python-Dateien aus Python
Über Python, aus und importieren, als
Stellen Sie von Python aus eine Verbindung zur utf8mb4-Datenbank her
Python (vom ersten Mal bis zur Ausführung)
Poste ein Bild von Python auf Tumblr
Python-Protokollierung und Dump an JSON
So greifen Sie über Python auf Wikipedia zu
Python, um von einer anderen Sprache zu wechseln
Selen und Python zum Öffnen von Google
Hat sich nicht von Python 2 auf 3 geändert
Aktualisieren Sie Mac Python von 2 auf 3
So erhalten Sie mithilfe der Mastodon-API Follower und Follower von Python
[Python] Versuchen Sie, Zeichen aus Bildern mit OpenCV und pyocr zu erkennen
[Python] Fluidsimulation: Von linear zu nichtlinear
So verpacken und verteilen Sie Python-Skripte
Binden Sie Methoden an Python-Klassen und -Instanzen
So aktualisieren Sie Google Sheets von Python
Fraktal zum Erstellen und Spielen mit Python
Ich möchte ein Glas aus Python verwenden
Herstellen einer Verbindung von Python zu MySQL unter CentOS 6.4
Zugriff auf RDS von Lambda (Python)
Lesen Sie Python csv und exportieren Sie es nach txt
Python: Verwendung von Einheimischen () und Globalen ()
Python> Ausgaben von 1 bis 100, 501 bis 600> Für CSV
[Python] Berechnen von MAE und RMSE
Verwendung von Python zip und Aufzählung
Komprimieren Sie Python-Daten und schreiben Sie in SQLite
In Python von Markdown in HTML konvertieren
[Amazon Linux] Wechsel von der Python 2-Serie zur Python 3-Serie
API-Erklärung zum Berühren von Mastodon aus Python
Verwendung ist und == in Python
Stellen Sie von Python aus eine Verbindung zur Websocket-API von coincheck her
C-Sprache zum Anzeigen und Erinnern Teil 2 Rufen Sie die C-Sprache aus der Python-Zeichenfolge (Argument) auf
Migration von Python2 zu Python3 (Python2 wird als virtuelle Umgebung neu erstellt und existiert gleichzeitig)
C-Sprache zum Sehen und Erinnern Teil 1 Rufen Sie die C-Sprache aus Python auf (Hallo Welt)
Stellen Sie von Python aus eine Verbindung zu postgreSQL her und verwenden Sie gespeicherte Prozeduren in einer Schleife.
Versuchen Sie, Python-Code zu schreiben, um Go-Code zu generieren. - Versuchen Sie, JSON-to-Go usw. zu portieren
C-Sprache zum Anzeigen und Erinnern Teil 4 Rufen Sie die C-Sprache von Python (Argument) double auf
[Python] Senden Sie das von der Webkamera aufgenommene Bild an den Server und speichern Sie es
C-Sprache zum Anzeigen und Erinnern Teil 5 Rufen Sie die C-Sprache aus dem Python-Array (Argument) auf
Senden Sie eine Nachricht von Slack an einen Python-Server
Versuchen Sie, das Programm "FORTRAN77 Numerical Computing Programming" auf C und Python zu portieren (Teil 1).