Você e seu amigo querem enviar mensagens secretas um ao outro. No entanto, porque vocês são teóricos da conspiração e pensam que o governo possui um computador quântico que pode quebrar qualquer criptografia padrão. Portanto, você está inventando um dos seus. A primeira etapa é a seguinte: usando uma sequência de entrada, você verifica se todas as letras podem ser representadas pelos símbolos dos elementos da tabela periódica (sem distinção entre maiúsculas e minúsculas). Se possível, substitua cada seção pelo nome do elemento que o símbolo representa. Se todas as letras não puderem ser substituídas dessa maneira, basta usar a sequência original.
Sua tarefa:
Você deve escrever um programa ou função que codifique uma mensagem, conforme descrito anteriormente. Lembre-se de que se o seu programa buscar dados de uma fonte externa, o tamanho da fonte externa deverá ser adicionado à contagem de bytes ( essa brecha ). Os elementos e símbolos usados estão aqui:
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:
Uma sequência a ser codificada. Você pode usar isso em maiúsculas ou minúsculas, se desejar, desde que você especifique esse requisito em sua resposta.
Resultado:
A sequência, codificada conforme descrito anteriormente, se possível.
Exemplos:
Hi! --> HydrogenIodine!
This is an example --> This is an example
Neon --> NeonOxygenNitrogen
Snip --> SulfurNitrogenIodinePhosphorus OR TinIodinePhosphorus
Nag --> NitrogenSilver
Pontuação:
Este é o código-golfe , o código mais curto em bytes vence!
Respostas:
Mathematica, 404 (239) bytes
Usando o banco de dados interno do Mathematica para buscar nomes de elementos e suas abreviações. A entrada pode ser misturada em maiúsculas e minúsculas e é armazenada na variável
S
. A saída é o resultado da expressão, não é impressa explicitamente.No momento, o código totalmente funcional ocupa 404 bytes, pois o banco de dados químico interno do Mathematica está um pouco atrasado.
ElementData[118, "Name"]
retorna emununoctium
vez deoganesson
(os elementos super pesados onde apenas recentemente nomeados corretamente, ununoctium era um nome de espaço reservado para o elemento 118).Para atualizá-lo
ElementData
, desprotego-o e fixo os valores dos elementos Nihonium (113), Moscovium (115), Tennessine (118) e Oganesson (118).Se o banco de dados do Mathematica estivesse atualizado, eu exigiria apenas 239 bytes.
fonte
JavaScript (ES6),
881871 bytesLeva a string de entrada em maiúsculas.
Casos de teste estendidos
Como esse desafio também é uma variante do problema exato do conjunto de capas, adicionamos os seguintes casos de teste:
Mostrar snippet de código
Quão?
Otimização preliminar
Ignoramos completamente os 26 elementos a seguir, porque eles podem ser substituídos com segurança por dois símbolos de um caractere entre
BCFHIKNOPSUVWY
:Codificando e decodificando os elementos
Usamos uma lista entrelaçada de símbolos de elementos em maiúsculas e nomes de elementos em minúsculas. Os símbolos são sempre armazenados como estão, enquanto os nomes são reduzidos de acordo com as seguintes regras:
Exemplos:
Os 58 elementos que acionam as duas regras são armazenados no início da lista, seguidos pelos 27 elementos que acionam apenas a regra nº 1, seguidos pelos 7 elementos que não acionam nenhuma regra.
Decodificamos esta lista para preencher a tabela de pesquisa o , onde as chaves são os símbolos e os valores são os nomes dos elementos decodificados:
Cobrindo a sequência de entrada
Tentamos substituir todas as letras maiúsculas na string de entrada por símbolos de elementos, usando a função recursiva g () que eventualmente retorna uma string de substituição ou indefinida se nenhuma capa exata for encontrada:
fonte
Javascript,
148713511246117012431245 byteseconomizou 234 bytes graças a @ musicman523
salvou 174 bytes graças a @ovs
economizou 7 bytes graças a @Shaggy
adicionado 75 bytes para fazê-lo funcionar com 2 elementos de letra
(Um pouco mais) versão legível:
fonte
on
. Além disso, se você quiser torná-lo mais legível por humanos, use delineadores mais legíveis que0
e1
. Por exemplo, qualquer um,;.!/-_:~ *|=+'"
.