Tú y tu amigo quieren enviarse mensajes secretos. Sin embargo, porque son teóricos de la conspiración y piensan que el gobierno tiene una computadora cuántica que puede descifrar cualquier cifrado estándar. Por lo tanto, estás inventando uno propio. El primer paso de esto es el siguiente: tomando una cadena de entrada, verifica si todas las letras pueden ser representadas por los símbolos de los elementos de la tabla periódica (sin distinción entre mayúsculas y minúsculas). Si pueden serlo, reemplaza cada sección con el nombre del elemento que representa el símbolo. Si no se pueden reemplazar todas las letras de esta manera, simplemente use la cadena original.
Tu tarea:
Debe escribir un programa o función que codifique un mensaje, como se describió anteriormente. Recuerde que si su programa obtiene datos de una fuente externa, el tamaño de la fuente externa debe agregarse al recuento de bytes ( este vacío ). Los elementos y símbolos utilizados están aquí:
H Hydrogen
He Helium
Li Lithium
Be Beryllium
B Boron
C Carbon
N Nitrogen
O Oxygen
F Fluorine
Ne Neon
Na Sodium
Mg Magnesium
Al Aluminum
Si Silicon
P Phosphorus
S Sulfur
Cl Chlorine
Ar Argon
K Potassium
Ca Calcium
Sc Scandium
Ti Titanium
V Vanadium
Cr Chromium
Mn Manganese
Fe Iron
Co Cobalt
Ni Nickel
Cu Copper
Zn Zinc
Ga Gallium
Ge Germanium
As Arsenic
Se Selenium
Br Bromine
Kr Krypton
Rb Rubidium
Sr Strontium
Y Yttrium
Zr Zirconium
Nb Niobium
Mo Molybdenum
Tc Technetium
Ru Ruthenium
Rh Rhodium
Pd Palladium
Ag Silver
Cd Cadmium
In Indium
Sn Tin
Sb Antimony
Te Tellurium
I Iodine
Xe Xenon
Cs Cesium
Ba Barium
La Lanthanum
Ce Cerium
Pr Praseodymium
Nd Neodymium
Pm Promethium
Sm Samarium
Eu Europium
Gd Gadolinium
Tb Terbium
Dy Dysprosium
Ho Holmium
Er Erbium
Tm Thulium
Yb Ytterbium
Lu Lutetium
Hf Hafnium
Ta Tantalum
W Tungsten
Re Rhenium
Os Osmium
Ir Iridium
Pt Platinum
Au Gold
Hg Mercury
Tl Thallium
Pb Lead
Bi Bismuth
Po Polonium
At Astatine
Rn Radon
Fr Francium
Ra Radium
Ac Actinium
Th Thorium
Pa Protactinium
U Uranium
Np Neptunium
Pu Plutonium
Am Americium
Cm Curium
Bk Berkelium
Cf Californium
Es Einsteinium
Fm Fermium
Md Mendelevium
No Nobelium
Lr Lawrencium
Rf Rutherfordium
Db Dubnium
Sg Seaborgium
Bh Bohrium
Hs Hassium
Mt Meitnerium
Ds Darmstadtium
Rg Roentgenium
Cn Copernicium
Nh Nihonium
Fl Flerovium
Mc Moscovium
Lv Livermorium
Ts Tennessine
Og Oganesson
Entrada:
Una cadena a codificar. Puede tomar esto en mayúsculas o minúsculas si lo desea, siempre que especifique ese requisito en su respuesta.
Salida:
La cadena, codificada como se describe anteriormente, si es posible.
Ejemplos:
Hi! --> HydrogenIodine!
This is an example --> This is an example
Neon --> NeonOxygenNitrogen
Snip --> SulfurNitrogenIodinePhosphorus OR TinIodinePhosphorus
Nag --> NitrogenSilver
Puntuación:
Este es el código de golf , ¡el código más corto en bytes gana!
Respuestas:
Mathematica, 404 (239) bytes
Usando la base de datos incorporada de Mathematica para buscar nombres de elementos y sus abreviaturas. La entrada se puede mezclar en mayúsculas y minúsculas y se almacena en la variable
S
. El resultado es el resultado de la expresión, no se imprime explícitamente.En este momento, el código totalmente operativo ocupa 404 bytes, ya que la base de datos química incorporada de Mathematica está un poco atrás.
ElementData[118, "Name"]
devuelve enununoctium
lugar deoganesson
(los elementos súper pesados donde recientemente se nombraron correctamente, ununoctium era un nombre de marcador de posición para el elemento 118).Para actualizar
ElementData
, lo desprotejo y fijo los valores para los elementos Nihonium (113), Moscovium (115), Tennessine (118) y Oganesson (118).Si la base de datos de Mathematica estuviera actualizada, solo requeriría 239 bytes.
fuente
JavaScript (ES6),
881871bytesToma la cadena de entrada en mayúsculas.
Casos de prueba extendidos
Debido a que este desafío también es una variante del problema exacto del conjunto de portadas, he agregado los siguientes casos de prueba:
Mostrar fragmento de código
¿Cómo?
Optimización preliminar
Ignoramos por completo los siguientes 26 elementos, porque se pueden reemplazar de forma segura con dos símbolos de un carácter entre
BCFHIKNOPSUVWY
:Codificación y decodificación de los elementos.
Utilizamos una lista entrelazada de símbolos de elementos en mayúsculas y nombres de elementos en minúsculas. Los símbolos siempre se almacenan tal cual, mientras que los nombres se acortan de acuerdo con las siguientes reglas:
Ejemplos:
Los 58 elementos que activan ambas reglas se almacenan al principio de la lista, seguidos de los 27 elementos que activan solo la regla # 1, seguidos de los 7 elementos que no activan ninguna regla.
Decodificamos esta lista para llenar la tabla de búsqueda o , donde las claves son los símbolos y los valores son los nombres de los elementos decodificados:
Cubriendo la cadena de entrada
Intentamos reemplazar todas las letras mayúsculas en la cadena de entrada con símbolos de elementos, utilizando la función recursiva g () que eventualmente devuelve una cadena de reemplazo o indefinida si no se encuentra una cubierta exacta:
fuente
Javascript,
148713511246117012431245 bytesahorró 234 bytes gracias a @ musicman523
ahorró 174 bytes gracias a @ovs
ahorró 7 bytes gracias a @Shaggy
se agregaron 75 bytes para que funcione para elementos de 2 letras
(Un poco más) versión legible:
fuente
on
. Además, si desea que sea más legible para los humanos, use más delineadores legibles que0
y1
. Por ejemplo, cualquiera de,;.!/-_:~ *|=+'"
.