Questão
Given the atomic number of an element
no intervalo [1-118], emita o group and period
, desse elemento, conforme indicado na tabela periódica de elementos a seguir.
Para elementos das séries Lanthanide e Actinide (intervalos [57-71] e [89-103]), você deve retornar L
para os Lanthanides e A
os Actinides
Você pode escrever um programa ou uma função e usar qualquer um dos nossos métodos padrão de recebimento de entrada e saída.
Você pode usar qualquer linguagem de programação , mas observe que essas brechas são proibidas por padrão.
Casos de teste
Como existem apenas 118 entradas possíveis, uma lista completa das entradas e saídas esperadas é fornecida abaixo.
Criado à mão, avise-me se houver algum erro!
1,1,1 2,18,1 3,1,2 4,2,2 5,13,2 6,14,2 7,15,2 8,16,2 9,17,2 10,18,2 11,1,3 12,2,3 13,13,3 14,14,3 15,15,3 16,16,3 17,17,3 18,18,3 19,1,4 20,2,4 21,3,4 22,4,4 23,5,4 24,6,4 25,7,4 26,8,4 27,9,4 28,10,4 29,11,4 30,12,4 31,13,4 32,14,4 33,15,4 34,16,4 35,17,4 36,18,4 37,1,5 38,2,5 39,3,5 40,4,5 41,5,5 42,6,5 43,7,5% 44,8,5 45,9,5 46,10,5 47,11,5 48,12,5 49,13,5 50,14,5 51,15,5 52,16,5 53,17,5 54,18,5 55,1,6 56,2,6 57, L, 58, L, 59, L, 60, L, 61, L, 62, L, 63, L, 64, L, 65, L, 66, L, 67, L, 68, L, 69, L, 70, L, 71, L, 72,4,6 73,5,6 74,6,6 75,7,6 76,8,6 77,9,6 78,10,6 79,11,6 80,12,6 81,13,6 82,14,6 83,15,6 84,16,6 85,17,6 86,18,6 87,1,7 88,2,7 89, A, 90, A, 91, A, 92, A, 93, A, 94, A, 95, A, 96, A, 97, A, 98, A, 99, A, 100, A, 101, A, 102, A, 103, A, 104,4,7 105,5,7 106,6,7 107,7,7 108,8,7 109,9,7 110,10,7 111,11,7 112,12,7 113,13,7 114,14,7 115,15,7 116,16,7 117,17,7 118,18,7
Pontuação
Código-golfe simples . Menor número de bytes ganhos
code-golf
kolmogorov-complexity
chemistry
James Webster
fonte
fonte
L
está bem. Isso é realmente o que eu pretendia. Mas desde que o CSV emitidoL,
eu vou aceitar tantoRespostas:
CJam ,
6459585654 bytesAgradecimentos a Dennis por salvar 2 bytes.
Experimente online!
Deixa período e grupo ou um único caractere na pilha.
Explicação
Existem duas idéias principais aqui:
fonte
05AB1E ,
11310299 bytesExplicação:
Experimente online!
fonte
1000000000000000000000000000000001 1100000000000000000000000000111111 1100000000000000000000000000111111 1112222222222222221111111111111111 1113333333333333331111111111111111
pode reduzir o número de unidades, caso contrário, é bom!Mathematica, 77 bytes
Também seria muito fácil de usar
ElementData
para determinar se a entrada é um Lanthanide ou Actinide, mas levaria cerca de 20 bytes a mais.fonte
Python 2 ,
205136 bytes-26 bytes graças a @Dead Possum
Experimente online!
fonte
PHP, 144 bytes
Nota: usa codificação IBM-850
Execute assim:
Explicação
Verifique se a entrada está dentro dos intervalos para
L
ouA
; a "exceção" varia. Em seguida, modifique a entrada para preencher as células ausentes na grade (ou se livrar das células extras). Por fim, imprima a exceção (a menos que isso seja falso0
) ou converta a posição em coordenadas da grade.fonte
18<t7
. Isso é algo que estou fazendo de errado? (rodando em Mac El Capitan)ceil
) com "" por 1 byte extraGeléia , 57 bytes
Programa completo que imprime a saída desejada.
Experimente online! (Um programa ligeiramente modificado que imprime tudo
input : output
pode ser visto aqui ).Quão?
Cria uma lista das 118 saídas possíveis e escolhe a entrada no índice da entrada.
Alguma preparação:
O programa (encurtado substituindo
A
,B
, eC
):fonte
Perl5, 202 bytes
fonte
Ruby, 130 bytes
Primeiro, pegue o 'A' e o 'L' com o truque da máscara de bit e tente encaixar-se em um retângulo 18 * 7 e use um div / mod.
fonte
Python 2 , 137 bytes
Experimente online!
fonte
Python 2 , 115 bytes
Experimente online!
A idéia é modificar a posição da grade para obter o grupo e o período. A posição da grade é a entrada
n
ajustada por um deslocamento para levar em conta as lacunas e a contração L / A. Estes são extraídos de uma lista.O manejo do Lantanídeo e do Actinídeo é feio. A eles são atribuídos grandes deslocamentos 200 e 400 que podem ser detectados
/200
. Gostaria de colocar os caracteresL
eA
aqui, mas depoisn+=...
adicionarei um caractere a um número, dando um erro mesmo quen
não seja usado. Se não fosse a indexação 1,divmod
poderia ser usado para se referirn
apenas uma vez e, em seguida, poderia ser substituído por sua expressão,fonte
JavaScript (ES7),
10098 bytesExplicação: As séries 'L' e 'A' são especiais, usando alguma lógica bit a bit que me salvou 3 bytes em comparação direta. Caso contrário, a função encontrará recursivamente o período que
p
contém o número atômico desejado, o número do último elemento no período anteriorx
e o número do último elemento no períodoy
que é calculado cada vez, observando que as diferenças são 2, 2, 8 , 8, 18, 18 ou seja, números quadrados duplicados repetidos. O grupo é encontrado deslocando-se da esquerda ou da direita da tabela, dependendo se o elemento está na diagonal de berílio-escândio ou não.fonte
JavaScript (ES6), 136 bytes
Teste
Mostrar snippet de código
fonte
Python 2 ,
264227217 bytesExperimente online!
Suportes demais. Parece mais com Brain-Flak.
fonte
while
fora da função? ele iria salvar um byte (espaço)while
circuito completamente :)Excel, 192 bytes
Longe de ser bonita. Empresta as respostas existentes em Python
Lutando para lidar com o caso em
MOD(x,18)=0
que o valor do Grupo é gracioso.fonte
IF(A1<80
?Ruby, 116 bytes
Comentado no programa de teste
fonte
PHP, 120 bytes
recebe entrada de STDIN, execute com
-nR
.alguma mágica bit a bit para os lantanídeos e actinídeos,
o
$n-=
parte adiciona e subtrai deslocamentos para as lacunas e lantanídeos / actinídeos,o resto é simples mod / div.
Uma porta iterativa da resposta de Neil leva 108 bytes :
fonte
Perl, 169 bytes
Usando:
fonte
Geléia ,
4943424139 bytesExperimente online!
fundo
Com exceção dos lantanídeos e actinídeos, a saída consistirá em um número inteiro expresso na base bijetiva 18. Por exemplo, o hidrogênio corresponde a 19 10 = 11 b18 , o hélio a 36 10 = 1I b18 e o eka-radon / ununoctium / oganesson a 114 10 = 7I b18 .
Começamos mapeando todos os números atômicos que podemos para os números inteiros correspondentes, enquanto mapeamos lantanídeos e actinídeos para aqueles que correspondem ao lantânio ( 111 10 = 63 b18 ) e actínio ( 129 10 = 73 b18 ).
Para fazer isso, registramos as diferenças diretas dos números inteiros que representam os átomos. Por exemplo, o primeiro é 1I b18 - 11 b18 = H b18 = 17 10 , o segundo é 1 (como todas as diferenças entre elementos consecutivos da tabela periódica não expandida), o quarto ( B a Ser ) é 2D b18 - 22 b18 = B b18 = 11 10 e assim por diante. Para mapear todos os lantanídeos e todos os actinídeos, consideraremos todas as diferenças entre dois lantanídeos ou actinídeos (por exemplo, La a Ce ) como 0 .
Para obter o número inteiro desejado para um número atômico n , basta anexar 19 (hidrogênio) às diferenças e calcular a soma dos primeiros n elementos do vetor resultante. A saída é então simplesmente exibida na base bijetiva 18, a menos que isso exiba 6 3 (lantanídeos) ou 7 3 (actinídeos). Neste último caso, simplesmente substituímos o resultado calculado por L ou A .
Embrulhado para sanidade horizontal, o vetor que precisamos codificar tem a seguinte aparência.
Após a codificação de execução, obtemos o seguinte.
Para reduzir ainda mais o espaço necessário para codificar o vetor, removemos 1 ' à direita (comprimentos) e adicionamos 1 às execuções.
Agora podemos converter reversivelmente essas matrizes de dígitos da base 45 para números inteiros.
Todos esses são menores que 250 , para que possamos representá-los com caracteres da página de código de Jelly . Cercado por
“
(literal start) e‘
(interpretar como array inteiro), obtemos o literal Jellyque aparece literalmente no código.
Como funciona
fonte