Juega scrabble con la tabla periódica

13

Tienes un conjunto de fichas con los símbolos de la tabla periódica. Cada símbolo aparece una vez. Estás pensando en palabras, pero quieres saber si es posible o no.

El reto

Escriba un programa en su idioma favorito que incorpore una cadena como parámetro de entrada. Puede suponer que la entrada no es nula, no tiene espacios y consta de caracteres ASCII.

Su programa debe tomar esa cadena y generar un valor verdadero si esa palabra puede estar compuesta de símbolos de la tabla periódica de elementos, y un valor falso si la palabra no puede.

Para hacer este desafío más difícil, no puede usar un símbolo dos veces. Entonces, si usa Nitrógeno, Nno puede Nvolver a usarlo en la misma palabra.

Reglas

Las lagunas estándar no están permitidas. Puede usar símbolos de los elementos 1-118 (Hidrógeno a Ununoctium). Puede encontrar una lista de todos los elementos aquí . Si lo desea, puede leer la lista de símbolos de un archivo o argumentos de entrada.

Casos de prueba:

Laos - true (LaOs)
Amputation - true (AmPuTaTiON)
Heinous - true (HeINoUS)
Hypothalamus - true (HYPoThAlAmUS)
Singapore - true (SiNGaPoRe)
Brainfuck - true (BRaInFUCK)
Candycane - false

Este es un desafío de código de golf, el código más corto gana.

ANTES DE CERRAR COMO DUPLICADO: Si bien esto puede parecer similar a este desafío , creo que es diferente porque no es 'Generar una lista de todas las palabras que son posibles de la tabla periódica', es 'Tomar información arbitraria y determinar si se puede hacer de la tabla periódica '

JamesENL
fuente
2
Existe esto que está más estrechamente relacionado, pero se cerró como un duplicado del desafío que vinculaste. Sin embargo, creo que el hecho de que solo se puede usar un símbolo una vez es la mayor diferencia entre los desafíos. En términos de golf, dudo que haya una mejor manera que la fuerza bruta forzando todas las palabras posibles y verificando si la entrada está entre ellas.
Martin Ender
1
"Puede leer la lista de símbolos de un archivo si lo desea". - ¿Cómo lo contamos? ¿Se agrega el tamaño del archivo a la longitud del código? ¿O podemos usarlo gratis?
Qwertiy
2
¿Podemos tomar la lista de elementos como argumento para el programa?
Emigna
1
@Qwertiy, el tamaño del archivo es libre, pero los bytes para leerlo no lo son.
JamesENL
99
Boro, Radio, Yodo, Nitrógeno, Flúor, Uranio, Carbono, Potasio.
Neil

Respuestas:

3

05AB1E, 16 bytes

œvyŒ€J})˜Ùvy²Q}O

Explicado

œv                # for each permutation of the list of elements
  yΠ             # get all sublist of elements
    €J            # join as strings to form the words possible to spell
      })˜Ù        # convert to list of unique spellable strings
          vy²Q}   # compare each word with input word
               O  # sum giving 1 if the word is found, else 0

Advertencia: extremadamente lento. Recomiendo probar en un subconjunto de elementos mucho más pequeño en el intérprete en línea.

Toma la lista de elementos como primer argumento.
Toma la palabra para probar como segundo argumento.
Devuelve 1 para verdadero y 0 para falso.

Pruébelo en línea en un pequeño subconjunto de elementos

Emigna
fuente
3

Brachylog , 7 bytes

spc~@l.

Llame con la lista de símbolos (todo en minúsculas) como Entrada y la palabra como Salida, por ejemplo run_from_atom('spc~@l.', ["he":"n":"o":"li"], "Nohe")..

Advertencia: esto es extremadamente ineficaz cuando todos los símbolos están en la lista.

Explicación

spc        Create a string from a permutation of a subset of the Input
   ~@l.    This string can unify with the lowercase version of the Output
Fatalizar
fuente
44
@Downvoter cuidado de explicar?
Fatalize
1

JavaScript (Firefox 48 o anterior), 103 bytes

f=(w,e=`
H
He
... (list of elements not included in the byte count) ...
Uus
Uuo
`)=>!w||e.match(/\w+/g).some(s=>!w.search(s,`i`)&&f(w.slice(s.length),e.replace(`
${s}
`,`
`)))
Neil
fuente
1

Pyth - 13 bytes

Simplemente verifica si alguna partición de entrada en minúscula tiene todas las partes en la tabla periódica.

sm.A}RQd./rzZ

En dispositivos móviles, no pude configurar un conjunto de pruebas real, pero intente esto .

Maltysen
fuente
1
¿Escribiste esto en un teléfono?
JamesENL
Esto no garantiza que un elemento no se use varias veces. Ejemplo.
PurkkaKoodari
1

Pyth, 11 bytes

s}RySQSM./z

Pruébalo en línea. Banco de pruebas.

Escrito en mi teléfono, pero debería funcionar. Muy lento para una gran cantidad de elementos o una cadena larga.

Explicación

  • Toma todas las particiones (./ ) de la entrada ( z).
  • Ordenar (S ) cada partición ( M).
  • Para cada partición ( R), vea si está en ( }) la lista de todos los subconjuntos ( y) de los ordenados (S tabla periódica ) dada como entrada ( Q).
  • Suma ( s) la lista resultante de booleanos.
PurkkaKoodari
fuente