Ceci est un puzzle de mots.
Votre programme doit accepter deux mots sur l'entrée standard.
Le premier mot est le mot de départ. Le mot deux est le mot de fin.
Depuis le mot de départ, vous devez atteindre le mot de fin en changeant / ajoutant / supprimant une lettre à la fois. Après chaque modification, il doit former un nouveau mot valide. Les lettres ajoutées sont ajoutées au début ou à la fin. Vous pouvez supprimer des lettres de n'importe quel endroit (mais le mot ne doit pas tomber en dessous de trois lettres). Remarque: vous ne pouvez pas réorganiser les lettres pour former un mot.
La sortie du programme est la séquence de mots à passer du mot de début au mot de fin.
Exemple:
Input:
Post Shot
Output:
Post
cost
coat
goat
got
hot
shot
Gagnant:
- Le programme doit s'exécuter dans un délai raisonnable (moins de 10 secondes).
- Le programme qui peut générer la séquence de sortie la plus courte pour les mots de prix.
- Zink -> Silicium
- Si plusieurs programmes obtiennent la séquence la plus courte, alors le programme le plus court en caractères (en ignorant les espaces blancs).
- Si nous avons encore plus d'une date / heure de soumission du programme, celle-ci sera utilisée.
Remarques:
- La capitalisation n'est pas pertinente.
- Le code pour construire un dictionnaire ne compte pas dans le coût du code.
- Les mots et la séquence des prix seront générés à partir de:
http://dl.packetstormsecurity.net/Crackers/wordlists/dictionaries/websters-dictionary.gz
- Les mots et la séquence des prix seront générés à partir de:
code-golf
word-puzzle
Martin York
la source
la source
Réponses:
Python, 288 caractères
(sans compter la ligne de lecture du dictionnaire)
pour le défi
zink
desilicon
:Il y a des mots étranges dans ce dictionnaire ...
la source
guester overturn
(prend un peu de temps) ouregatta gyrally
(ne revient pas) ;-)traceroute - 10 caractères
détail
Les routeurs sont préconfigurés avec OSPF activé et organisés de cette façon.
Et oui, j'ai besoin de 233614 routeurs pour supporter pleinement tous les mots. :-)
la source
zink->pink->pank->pani->panic->pinic->sinic->sinico->silico->silicon
que j'essaie vraiment avec l'algorithme Dijkstra (qui est utilisé dans OSPF) et son peut trouver ce chemin autour de 1s, je le ferai le poster dans un post séparé plus tard, une fois que j'ai joué au golf.PHP -
886689644612Chargement du dictionnaire:
Code réel (juste concaténer les deux):
usage:
Résultat:
Cela devrait s'exécuter en moins de 0,5 seconde pour «Zink Silicon» et en moins de 1 seconde pour la plupart des cas (parfois plus longtemps lorsqu'aucune solution n'existe, mais elle revient).
Celui-ci utilise l' algorithme A * avec une distance de levenshtein pour estimer une borne inférieure des distances.
Quelques tests intéressants:
vas arm
->vas bas bar barm arm
(avec un mot plus long que début et fin)oxy pom
->oxy poxy poy pom
regatta gyrally
-> (aucun, mais le script se termine correctement)aal presolution
-> +8 caractèreslenticulated aal
-> -9 caractèresacarology lowness
-> 46 houblonscaniniform lowness
-> 51 sautscauliform lowness
-> 52 houblonsoverfoul lowness
-> 54 houblonsdance facia
-> certains mots du chemin ont 4 caractères de plus que les deux début / finla source
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes)
php -dmemory_limit=256M
.had->hand
n'est pas un mouvement valide, vous ne pouvez ajouter qu'une lettre au début ou à la fin. Pareil pourvest->verst
:-)Python
Comme je ne pouvais pas jouer au golf à des codes dijkstra pour les compresser en quelques centaines d'octets, voici ma version non golfée.
Les tests
Ajout des tests de user300
Un peu plus
la source
3 <= len(x) <= max(map(len, [nodea, nodeb]))
est-il garanti que le chemin ne traversera jamais un mot plus longtemps que les mots de début et de fin?oxy pom
; le chemin le plus court estoxy->poxy->poy->pom
. Il semble également que vous autorisiez les permutations et les insertions à n'importe quel endroit, ce qui n'est pas autorisé :-)