Considere la siguiente cadena:
Tin Snips
Esta cadena contiene varios símbolos atómicos en la tabla periódica . Podríamos reescribir esta cadena para identificar varios de ellos:
[Ti][N] [Sn][I][P][S]
Por supuesto, también podríamos escribirlo de esta manera:
T[In] [S][Ni][P][S]
Las reglas para reescribir la entrada son las siguientes:
- El caso de la entrada no importa en términos de símbolos atómicos coincidentes.
- Si se utiliza un elemento en un símbolo atómico, su caso debe cambiar para que el símbolo sea correcto. Ej:
h
se convertiría[H]
. - Todos los símbolos de elementos están encerrados entre corchetes ASCII,
[
y]
. - Se conserva el espacio en blanco:
Big ego
no se puede combinar la "g" y la "e" en[Ge]
. - No todos los caracteres de entrada deben combinarse en un símbolo atómico: si un carácter de entrada no se coloca en un símbolo, se pasa como está (el caso no importa).
- Si se puede hacer un símbolo, se debe hacer. En otras palabras, no se permite la salida
Tin
en el ejemplo anterior porque es posible crear al menos un símbolo en esa palabra. La única vez que un personaje puede pasar sin usar es cuando no se puede usar para construir un símbolo atómico. - Para los propósitos de este desafío, todos los elementos desde Hidrógeno (1) hasta Oganesson (118) son válidos. No hay elementos superiores válidos.
- Algunos de los elementos superiores tienen nombres y símbolos ambiguos: a los fines de este desafío, se utilizará la versión de Wikipedia . Por conveniencia, los símbolos atómicos permitidos están aquí: H, He, Li, Be, B, C, N, O, F, Ne, Na, Mg, Al, Si, P, S, Cl, Ar, K, Ca, Sc, Ti, V, Cr, Mn, Fe, Co, Ni, Cu, Zn, Ga, Ge, As, Se, Br, Kr, Rb, Sr, Y, Zr, Nb, Mo, Tc, Ru, Rh, Pd, Ag, Cd, In, Sn, Sb, Te, I, Xe, Cs, Ba, La, Ce, Pr, Nd, Pm, Sm, Eu, Gd, Tb, Dy, Ho, Er, Tm, Yb, Lu, Hf, Ta, W, Re, Os, Ir, Pt, Au, Hg, Tl, Pb, Bi, Po, At, Rn, Fr, Ra, Ac, Th, Pa, U, Np, Pu, Am, Cm, Bk, Cf, Es, Fm, Md, No, Lr, Rf, Db, Sg, Bh, Hs, Mt, Ds, Rg, Cn, Nh, Fl, Mc, Lv, Ts, Og.
Escriba un programa o función que genere todas las salidas posibles a partir de una sola entrada proporcionada. Tanto la entrada como la salida pueden estar en cualquier forma que elija. Esto podría ser una cadena, una matriz de caracteres o alguna otra estructura de datos: lo que sea conveniente y represente claramente la entrada y la salida. Tanto la entrada como la salida se pueden pasar dentro / fuera de su código como usted elija: entrada / salida estándar, argumento / retorno de función, o algo más.
- La entrada debe ser una cadena (ver párrafo anterior) de longitud positiva que contenga solo caracteres ASCII de mayúsculas y minúsculas y el espacio (
0x20
). - Su código debe generar todas las cadenas de salida que se pueden crear utilizando las reglas de entrada anteriores.
- El orden de la salida está definido por la implementación. El único requisito es que todas las cadenas de salida estén presentes.
- Si se le presenta una cadena de entrada válida que no contiene ningún símbolo atómico, simplemente envíe la cadena de entrada.
- Si se le presenta una cadena de entrada que no es válida según las reglas anteriores (nulo, cero caracteres, contiene caracteres ilegales, etc.), su programa puede hacer cualquier cosa (bloqueo, salida en blanco, etc.)
- La salida no distingue entre mayúsculas y minúsculas, excepto los símbolos atómicos que necesitan coincidir con la tabla periódica.
- Lagunas estándar no permitidas.
Casos de prueba:
Tin Snips
[Ti][N] [Sn][I][P][S]
[Ti][N] [S][Ni][P][S]
[Ti][N] [S][N][I][P][S]
T[In] [Sn][I][P][S]
T[In] [S][Ni][P][S]
T[In] [S][N][I][P][S]
T[I][N] ...
Quack
Q[U][Ac][K]
Q[U]a[C][K]
hehe
[H]e[H]e
[H]e[He]
[He][H]e
[He][He]
Stack Exchange
[S][Ta][C][K] Ex[C][H]a[N][Ge]
[S]t[Ac][K] Ex[C][H]a[N][Ge]
Este es el código de golf, ¡así que déjame ver tu código más corto!
T[I][N]
no[T][I][N]
porque T no es un elemento. Mi pregunta (y posiblemente la de Rassar) es: ¿solo tenemos que dar 1. Solo salidas donde se realiza el número máximo de suscripciones de elementos? 2. ¿Solo la cantidad mínima de desperdicio? (El HeHe con hidrógenos indica que la respuesta a esta pregunta es no) 3. ¿Todas las salidas donde las coincidencias están completamente agotadas? (en este casoT[I][N]
, así comoT[In]
sería válido). Creo que la interpretación correcta es 3.Q[U][Ac][K]
yQ[U]a[C][K]
. ¿Derecha?Respuestas:
Python 3,
289263 bytesEncontré una biblioteca más completa en Pypi:
mendeleev
Vieja respuesta:
Utiliza una biblioteca
elements.py
de http://www.lfd.uci.edu/~gohlke/code/elements.py.html . Faltan elementos del 110 al 118, pero fue la biblioteca más actualizada que pude encontrar. Cuesta 40 bytes para agregar los elementos que faltan.La parte más complicada fue la lógica de cuándo se puede pasar un personaje sin ser parte de un símbolo de elemento.
fuente
mendeleev
un usuario, no una biblioteca?Jalea ,
192191 bytes-1 mediante el uso de
Ɗ
(un rápido desarrollado desde entonces)Pruébalo en línea! - Demasiado ineficiente para que el caso de prueba "Stack Exchange" se complete dentro del límite de los 60 (ejecutarlo sin conexión da el resultado correcto en 2 minutos).
¿Cómo?
La primera línea de código es un enlace niládico para crear una lista que contiene los 118 símbolos de elementos. Para hacerlo, concatena dos listas, la primera contiene todas las listas de caracteres de longitud 2 (es decir, cadenas) y la segunda una lista de caracteres y títulos de casos la lista resultante. Las dos listas en sí se crean principalmente buscando palabras en el diccionario de Jelly para crear cadenas individuales.
La primera de estas compresiones es:
cuyos rendimientos
Donde todos menos la entrada final (dividida por espacios) son entradas en el diccionario de Jelly. Los espacios se filtran con
ḟ⁶
, y luego el resultado se divide en dos:El segundo,
se forma a partir de la concatenación de las palabras "pinzón", "pub", "cielo" y "voto" (sin espacios), y como tal es una lista de caracteres:
Las dos listas se concatenan con
;
y cada entrada está encerrada en un título usandoŒt
, produciendo:Una lista que contiene todos los símbolos de 118 elementos según sea necesario (hay duplicados, pero está bien).
La segunda línea de código es un enlace monádico (una función auxiliar diseñada para tomar una entrada) que devuelve un 1 si la entrada, con título en mayúscula, existe en la lista creada anteriormente y un 0 en caso contrario.
La tercera línea de código es el enlace principal, una función monádica que toma una cadena y devuelve una lista de listas de caracteres (es decir, cadenas) según sea necesario:
fuente
C ++ 11,
944928bytesAquí hay una pieza de código realmente terrible, pero debería funcionar. Todavía podría hacerse mucho más corto probablemente.
Llamar con:
fuente