À l'époque où j'étais étudiant de première année en chimie, je regardais le tableau périodique des éléments et épelais les mots sales avec le nombre d'éléments (HeCK serait 2619, 2-6-19).
Je pensais à ça l'autre jour quand j'ai vu une chemise incroyable qui expliquait BeEr (4-68)
Donc, mon défi de codegolf est le programme le plus court pour produire une liste de mots que vous pouvez épeler avec le tableau périodique des éléments ET le code numérique qui représenterait ce mot.
/ usr / share / dict / words ou tout autre dictionnaire que vous souhaitez utiliser pour la liste de mots. Si vous utilisez une liste de mots "non standard", faites-le nous savoir!
Réponses:
GolfScript (
339 303 302 301294 caractères)Avec crédit à PhiNotPi dont l'observation sur les éléments inutiles m'a permis d'économiser 33 caractères.
C'est IMO beaucoup plus idiomatique GolfScript que l'approche récursive précédente.
Notez que j'autorise les mots du dictionnaire à être mélangés (
L
est une fonction pour le texte en minuscule en supposant que cela n'a pas d'importance si les caractères non alpha sont cassés), mais je rejette tout avec des apostrophes ou des accents.Comme il s'agit de code golf, j'ai optimisé la longueur du code plutôt que la vitesse. C'est horriblement lent. Il s'attend à ce que la liste de mots soit fournie à stdin et les sorties à stdout au format:
(en minuscule les mots d'entrée en casse mixte pour lesquels il trouve une correspondance).
Si vous êtes plus intéressé par les éléments que par les chiffres en soi, pour le bas prix bas de
261253 caractères, vous pouvez utiliserce qui donne une sortie comme
la source
"
ne me dérange pas du tout. Et bien sûr, Peter Taylor entre et souffle tout le monde avec Golfscript.Ruby -
547393Nouvelle version, merci pour les suggestions:
utilise des expressions rationnelles. lent, et beaucoup de place pour l'amélioration mais je dois y aller maintenant :-)
la source
e='HHeLiBe...LvUusUuo'.scan(/[A-Z][a-z]*/).map &:downcase
. 2) L'expression variable n'est jamais utilisée. 3) Lire les mots de l' entrée standard:$<.each{|w|...
. Avec ces modifications, le code a été réduit à 410 caractères.Python 710 (357 + 261 + 92)
Il y a certainement de la place pour des améliorations quelque part. Il convient également de noter que le deuxième niveau d'indentation utilise le caractère de tabulation.
Il faut un peu plus de 5 secondes (sur mon ordinateur) pour parcourir tout le dictionnaire, produisant une sortie comme celle-ci:
En ajoutant 18 autres caractères, vous pouvez obtenir une sortie avec la bonne majuscule:
Vous pouvez également vérifier les mots individuels:
la source
Python - 1328 (975 + 285 caractères de code + 68 code de dictionnaire)
Pour la partie dictionnaire:
la source
C,
775771 caractèresEntrée : mot par ligne, doit être en minuscules.
usr/share/dict/words
c'est bien.Sortie : mot et chiffres, par exemple:
acceptances,89,58,15,73,7,6,99
Logique :
c(w,o,l)
vérifie le motw
, en commençant par l'élémentl
.La récursion bidirectionnelle est utilisée - si le premier élément correspond à la tête de la liste d'éléments, vérifiez le reste de par
w
rapport à la liste complète des éléments. Si cette correspondance échoue, vérifiez le mot par rapport à la fin de la liste.Le tampon
o
accumule les numéros d'éléments le long du chemin réussi. Après une correspondance, il contiendra la liste des numéros et sera imprimé.Problèmes :
La liste n'est pas encodée efficacement - trop
"
et,
". Mais de cette façon, elle est facile à utiliser. Je suis sûr qu'elle peut être beaucoup améliorée, sans trop de coût en code.la source