Portage et modification du solveur de doublets de python2 vers python3.

Portage de Doublet-Solver de python2 vers python3 sur le hub Git. Sert également d'introduction.

Un doublet est un puzzle qui remplace les mots un par un et les relie. Les deux mots donnés sont appelés , les mots du milieu sont appelés et les mots de doublet en doublet sont appelés . Tant que vous avez un mot, l'étape la plus courte pour remplacer une lettre par un mot qui est n différent est n fois.

Il semble que le premier mot, le dernier mot et le << nombre de liens requis >> soient spécifiés. Luis Carroll a été publié dans un magazine hebdomadaire pour femmes à Londres. Il est publié dans le livre "Logic in Wonderland".

La greffe fonctionne des trois manières suivantes. (1) Supprimez import urllib2 car il n'est pas nécessaire. ② Remplacez xrange () par range (). ③ Ajoutez () pour imprimer.

Dans le code ici ① Pour pouvoir prendre des arguments depuis la ligne de commande (2) Pour gérer même les arguments non définis dans le dictionnaire ③ Selon la méthode historique, sortie par au lieu du nombre d'étapes de conversion. ④ Traitez en minuscules Et quatre corrections ont été ajoutées.

Doublet-Solver peut être écrit si simplement en python, n'est-ce pas? surpris.

Il prend également en charge le japonais. Le dictionnaire anglais'dic.txt 'et le dictionnaire japonais'jd.txt' peuvent être trouvés à ici . Pour modifier le dictionnaire, modifiez le nom de fichier ouvert de #dictionary dans le 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))

Exemple d'exécution

$ 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.collation py sanji
(2, 'Collation Sanji Onji Oyaji')
$ dbltj.py pomme mikan
(3, 'Pomme pomme pomme mikaku mikaku mikan')
$ dbltj.py Hiruma Yakan
(3, 'Hiruma Hidama Hidan Hikan Yakan')
$ dbltj.py salutation bonjour
(6, 'Salutations Heisei Heiso Heiso Heiso Heyo Bonjour Bonjour')
$

Recommended Posts

Portage et modification du solveur de doublets de python2 vers python3.
De Python à l'utilisation de MeCab (et CaboCha)
Changements de Python 3.0 à Python 3.5
Changements de Python 2 à Python 3.0
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
Publier de Python vers Slack
Flirter de PHP à Python
Portage d'Argparse à Hydra
Conseils et précautions lors du portage des programmes MATLAB vers Python
Passer de python2.7 à python3.6 (centos7)
Connectez-vous à sqlite depuis python
Apprenez les bases et les astuces des expressions canoniques Python à partir de zéro
Comment se connecter à diverses bases de données à partir de Python (PEP 249) et SQL Alchemy
Aller au langage pour voir et se souvenir de la partie 8 Appeler le langage GO à partir de Python
[Introduction à Python3 Jour 1] Programmation et Python
Python, rendement, retour et parfois rendement de
[Lambda] [Python] Publier sur Twitter depuis Lambda!
Lire et utiliser des fichiers Python à partir de Python
À propos de Python, à partir et à l'importation, comme
Connectez-vous à la base de données utf8mb4 à partir de python
Python (de la première fois à l'exécution)
Publier une image de Python sur Tumblr
Journalisation Python et vidage vers json
Comment accéder à wikipedia depuis python
Python pour passer d'une autre langue
Sélénium et python pour ouvrir Google
N'a pas changé de Python 2 à 3
Mettre à jour Mac Python de 2 à 3
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
[Python] Essayez de reconnaître les caractères des images avec OpenCV et pyocr
[Python] Simulation de fluide: de linéaire à non linéaire
Comment empaqueter et distribuer des scripts Python
Lier des méthodes aux classes et instances Python
Comment mettre à jour Google Sheets à partir de Python
Fractal pour faire et jouer avec Python
Je veux utiliser jar de python
Connexion de python à MySQL sur CentOS 6.4
Comment accéder à RDS depuis Lambda (python)
Lire Python csv et exporter vers txt
python: Comment utiliser les locals () et globals ()
Python> Numéros de sortie de 1 à 100, 501 à 600> Pour csv
[Python] Comment calculer MAE et RMSE
Comment utiliser le zip Python et énumérer
Compressez les données python et écrivez sur sqlite
Convertir de Markdown en HTML en Python
[Amazon Linux] Passage de la série Python 2 à la série Python 3
Explication API pour toucher mastodonte de python
Comment utiliser is et == en Python
Connectez-vous à l'API Websocket de Coincheck depuis Python
Langage C pour voir et se souvenir de la partie 2 Appeler le langage C à partir de la chaîne Python (argument)
Migration de Python2 vers Python3 (Python2 est reconstruit comme un environnement virtuel et coexiste)
Langage C pour voir et se souvenir de la partie 1 Appeler le langage C depuis Python (bonjour le monde)
Connectez-vous à postgreSQL depuis Python et utilisez des procédures stockées dans une boucle.
Essayez d'écrire du code python pour générer du code go - Essayez de porter JSON-to-Go et ainsi de suite
Langage C pour voir et se souvenir de la partie 4 Appelez le langage C depuis Python (argument) double
[python] Envoyez l'image capturée de la caméra Web au serveur et enregistrez-la
Langage C pour voir et se souvenir de la partie 5 Appel du langage C à partir du tableau Python (argument)
Envoyer un message de Slack à un serveur Python
Essayez de porter le programme «Programmation informatique numérique FORTRAN77» vers C et Python (partie 1)