Este desafio é inspirado nesta citação de Oliver Sacks:
“Aos 11 anos, eu poderia dizer 'eu sou sódio' (Elemento 11), e agora aos 79, eu sou ouro.” - Oliver Sacks
Quero que você encontre números em uma string e os substitua pelos símbolos dos elementos correspondentes. (1 é H, 2 é Ele, 3 é Li, etc.) Existem algumas regras a seguir:
- Dígitos simples e duplos são substituídos por seus elementos correspondentes normalmente. Ignore 0s no início dos números. Se houver apenas 0s em um número, ignore-o. Por exemplo,
1 01 10 0 00
torna-seH H Ne 0 00
- Mais de 2 dígitos juntos são divididos em grupos de 2. Um número ímpar de dígitos deve ter um dígito extra extra no final. Por exemplo,
0153 5301 153
se tornariaHI IH PLi
Por causa dessa regra, você só precisará conhecer os elementos de 1 a 99 - Os números devem ser tratados da mesma forma, independentemente dos caracteres que os cercam, e vírgulas e pontos decimais não fazem parte dos números.
P90X 42,800 3.14159
se tornariaPThX Mo,Hg0 Li.SiPF
Exemplo de entradas / saídas (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.
A entrada estará no formato mais próximo de uma string do seu idioma.
Uma tabela periódica para referência:
Isso é código-golfe , então seu programa será pontuado em bytes.
Respostas:
Mathematica,
969489 bytesMma tem vários conjuntos de dados ...
fonte
JavaScript (ES6), 202 bytes
A string omitida contém caracteres não imprimíveis, então aqui está um hexdump (provavelmente reversível):
A técnica aqui era colocar todas as abreviações de elementos em uma sequência, separadas por nada - é para isso que
/[A-Z][a-z]?/g
serve o segundo regex ; corresponde a cada letra maiúscula, opcionalmente seguida por uma letra minúscula. O primeiro regex,,/\d\d?/g
corresponde a cada conjunto de 2 (ou 1) dígitos na entrada, portanto, substitui cada conjunto de dígitos N pelo elemento no índice N na sequência descompactada e correspondente.Aqui está a string original, se alguém mais quiser usá-la: (
A
as extremidades são preenchimentos)Perguntas e sugestões são bem-vindas!
fonte
Uus
eUuo
?+y?...:...
como você está substituindo grupos dígito[y]
vez de[+y]
e salvar 1Python 3,
278285 bytesCasos de teste:
fonte
f('P90X 42,800 3.14159')
retorna 'PThX Mo, Hgs Li.SiPF' em vez de 'PThX Mo, Hg0 Li.SiPF' ef('1 01 10 0 00')
retorna 'HH Ne s' em vez de 'HH Ne 0 00' . A propósito, eu apenas usei sua abordagem de fatia estendida na minha solução Python 2. Obrigado!Python 2,
312304 bytesEssa cria uma função f que pega uma sequência de números como argumento e retorna a sequência correspondente com os símbolos dos elementos substituídos.
A função itera sobre cadeias de um a dois dígitos ( '1' , '01' , '10' , '00' mas não '0' ) ou um caractere ( 'a' , '0' mas não '1' ). No caso de dígitos, a sequência é convertida em um número inteiro e procurada em uma sequência concatenada de símbolos de elementos em que cada símbolo é preenchido com dois caracteres. No caso de caracteres, a string é simplesmente usada sem consulta.
Os testes para cada exemplo na pergunta são aprovados:
fonte