Este desafío está inspirado en esta cita de Oliver Sacks:
"A los 11 años, podría decir 'Soy sodio' (Elemento 11), y ahora a los 79, soy oro". - Oliver Sacks
Quiero que encuentres números en una cadena y los reemplaces con los símbolos de sus elementos correspondientes. (1 es H, 2 es He, 3 es Li, etc.) Hay algunas reglas a seguir:
- Los dígitos simples y dobles se reemplazan con sus elementos correspondientes de manera normal. Ignora los 0 al comienzo de los números. Si solo hay 0 en un número, ignórelo. Por ejemplo, se
1 01 10 0 00
convierteH H Ne 0 00
- Más de 2 dígitos juntos se dividen en grupos de 2. Un número impar de dígitos debe tener un solo dígito adicional al final. Por ejemplo
0153 5301 153
,HI IH PLi
debido a esta regla, solo necesitará conocer los elementos del 1 al 99 - Los números se tratarán de la misma manera, sin importar qué caracteres los rodeen, y las comas y los puntos decimales no son partes de los números.
P90X 42,800 3.14159
se convertiríaPThX Mo,Hg0 Li.SiPF
Ejemplo de entradas / salidas (E / S):
I: 32289216
O: GeNiUS
I: J08017 5811
O: JOHN CeNa
I: M18227 0592tt10r
O: MArTiN BUttNer
I: De072816
O: DeNNiS
I: D088r1907085
O: DOOrKNOB
I: 13ex A.
O: Alex A.
La entrada estará en el formato más cercano a una cadena que tenga su idioma.
Una tabla periódica para referencia:
Este es el código de golf , por lo que su programa se puntuará en bytes.
Respuestas:
Mathematica,
969489 bytesMma tiene varios conjuntos de datos ...
fuente
JavaScript (ES6), 202 bytes
La cadena omitida contiene caracteres no imprimibles, así que aquí hay un hexdump (con suerte reversible):
La técnica aquí consistía en poner todas las abreviaturas de elementos en una cadena, separadas por nada, eso es lo que la segunda expresión regular
/[A-Z][a-z]?/g
; coincide con cada letra mayúscula, opcionalmente seguida de una letra minúscula. La primera expresión regular,/\d\d?/g
coincide con cada conjunto de 2 (o 1) dígitos en la entrada, por lo que esto reemplaza cada conjunto de dígitos N con el elemento en el índice N en la cadena descomprimida y coincidente.Aquí está la cadena original, si a alguien más le gustaría usarla: (los
A
's en los extremos son rellenos)Preguntas y sugerencias bienvenidas!
fuente
Uus
yUuo
?+y?...:...
ya que está reemplazando grupos de dígitos[y]
lugar de[+y]
y guardar 1 bytePython 3,
278285 bytesCasos de prueba:
fuente
f('P90X 42,800 3.14159')
devuelve 'PThX Mo, Hgs Li.SiPF' en lugar de 'PThX Mo, Hg0 Li.SiPF' yf('1 01 10 0 00')
devuelve 'HH Ne s s' en lugar de 'HH Ne 0 00' . Por cierto, acabo de usar su enfoque de corte extendido en mi solución Python 2. ¡Gracias!Python 2,
312304bytesEste crea una función f que toma una cadena de números como argumento y devuelve la cadena correspondiente con símbolos de elementos reemplazados.
La función itera sobre cadenas de uno a dos dígitos ( '1' , '01' , '10' , '00' pero no '0' ) o un carácter ( 'a' , '0' pero no '1' ). En el caso de los dígitos, la cadena se convierte en un entero y se busca en una cadena concatenada de símbolos de elementos donde cada símbolo se rellena con dos caracteres. En el caso de los caracteres, la cadena simplemente se usa sin búsqueda.
Todas las pruebas para cada ejemplo en la pregunta pasan:
fuente