Cuando era un estudiante de primer año en la escuela secundaria que tomaba química, miraba la tabla periódica de elementos y deletreaba palabras sucias con el número de elementos (HeCK sería 2619, 2-6-19).
Estaba pensando en esto el otro día cuando vi una camiseta increíble que explicaba BeEr (4-68)
Entonces, mi desafío codegolf es el programa más corto para generar una lista de palabras que puede deletrear con la tabla periódica de elementos Y el código numérico que representaría esa palabra.
/ usr / share / dict / words o cualquier diccionario que quieras usar para la lista de palabras. Si está utilizando una lista de palabras "no estándar", ¡háganos saber qué es!
Respuestas:
GolfScript (
339 303 302 301294 caracteres)Con crédito a PhiNotPi, cuya observación sobre elementos innecesarios me permitió guardar 33 caracteres.
Esto es IMO GolfScript mucho más idiomático que el enfoque recursivo anterior.
Tenga en cuenta que permito que las palabras en el diccionario sean mayúsculas y minúsculas (
L
es una función para texto en minúsculas suponiendo que no importa si los caracteres no alfabéticos se rompen), pero rechazo cualquiera con apóstrofes o acentos.Como se trata de código de golf, he optimizado la longitud del código en lugar de la velocidad. Esto es terriblemente lento. Espera que la lista de palabras se suministre en stdin y las salidas a stdout en el formato:
(en minúsculas las palabras de entrada de mayúsculas y minúsculas para las que encuentra una coincidencia).
Si está más interesado en los elementos que en los números en sí, por el bajo precio de
261253 caracteres puede usarque da salida como
fuente
"
no me molesta en absoluto. Y, por supuesto, entra Peter Taylor y sorprende a todos con golfscript.Ruby -
547393Nueva versión, gracias por las sugerencias:
usa expresiones regulares. lento, y mucho margen de mejora, pero debo ir ahora :-)
fuente
e='HHeLiBe...LvUusUuo'.scan(/[A-Z][a-z]*/).map &:downcase
. 2) La expresión regular variable nunca se usa. 3) Leer las palabras de entrada estándar:$<.each{|w|...
. Con esta modificación, el código se redujo a 410 caracteres.Python 710 (357 + 261 + 92)
Seguramente habrá margen de mejora en algún lugar. También vale la pena señalar que el segundo nivel de sangría utiliza el carácter de tabulación.
Toma un poco más de 5 segundos (en mi computadora) revisar todo el diccionario, produciendo resultados como este:
Al agregar otros 18 caracteres, puede obtener resultados con la capitalización correcta:
También puede verificar palabras individuales:
fuente
Python - 1328 (975 + 285 caracteres de código + 68 código de diccionario)
Para la parte del diccionario:
fuente
C,
775771 caracteresEntrada : Palabra por línea, debe estar en minúscula.
usr/share/dict/words
está bien.Salida : palabra y números, por ejemplo:
acceptances,89,58,15,73,7,6,99
Lógica :
c(w,o,l)
verifica la palabraw
, comenzando con el elementol
.Se utiliza la recursión bidireccional: si el primer elemento coincide con el encabezado de la lista de elementos, compruebe el resto de
w
la lista de elementos completa. Si esta coincidencia falla, verifique la palabra en la cola de la lista.El búfer
o
acumula los números de elementos a lo largo de la ruta exitosa. Después de una coincidencia, contendrá la lista de números y se imprimirá.Problemas :
La lista no está codificada de manera eficiente, demasiado
"
y,
". Pero de esta manera es fácil de usar. Estoy seguro de que se puede mejorar mucho, sin demasiado costo en el código.fuente