A IUPAC, em sua insuportável sabedoria, criou um nome de elemento sistemático para qualquer elemento recém-criado. Este é o nome temporário de um elemento até que eles finalmente se decidam sobre um nome real. Funciona assim: a cada dígito de um número de elemento é atribuído um prefixo com base em seu valor. Os prefixos são concatenados com 'ium' no final. Quando isso for feito e se você obtiver o dobro de i (ii) ou o triplo de n (nnn), substitua-os por um único i e um duplo n. O símbolo para o elemento é a primeira letra de cada prefixo usado concatenado e o resultado em maiúscula. Os prefixos usados estão abaixo.
0 nil 5 pent
1 un 6 hex
2 bi 7 sept
3 tri 8 oct
4 quad 9 enn
Portanto, para esse golfe, seu código precisa gerar o nome do elemento e seu símbolo para um número inteiro positivo. Portanto, se seu código recebeu 137, ele deve ser impresso em stdout ou retornado ambos untriseptium
e Uts
. Deve ser válido de pelo menos 118 a 558 . Qualquer valor mais alto é válido se não aumentar o comprimento do seu código.
Exemplo de Python mostrando o método:
def elename(n):
'''Return name and symbol of new element for given element number.'''
prefixes=['nil','un','bi','tri','quad','pent','hex','sept','oct','enn']
nmeFixes, symFixes = [], []
while n: # each digit of element number is assigned a prefix
n, i = divmod(n, 10)
pf = prefixes[i]
symFixes.append(pf[0]) # symbol uses only first letter of prefix
nmeFixes.append(pf)
# loop assembled prefixes in reverse order
nmeFixes.reverse()
symFixes.reverse()
nmeFixes.append('ium') # suffix
name = ''.join(nmeFixes)
symb = ''.join(symFixes).capitalize()
# apply rule about too many n's or i's
name = name.replace('nnn','nn') # can happen with -90-
name = name.replace('ii','i') # -2ium or -3ium
return name, symb
Eric Towers vence com bytes de cádmio!
Respostas:
Mathematica 10.1,
índio (49)cádmio (48)Esta solução usa uma biblioteca interna de propriedades do elemento, incluindo nomes e abreviações IUPAC. (Eu não vi isso como uma técnica a ser evitada no Golf. Parece ser incentivado. Mas isso pode estar (talvez acima) no limite do aceitável - o Mathematica implementa essa biblioteca (e muitas outras) baixando dados de Servidores da Wolfram na primeira vez em que você o usa (e presumo que verifique atualizações ocasionalmente).
Como isso se compara ao uso de elements.py ou periodictable.py no Python?
Edit: Meses depois: Notei que havia digitado a saída de abreviação para 122. Repeti o código e verifiquei que cometi esse erro, não o Mathematica.
fonte
f
-se uma função pura:f=ElementData@@@{{#,"Abbreviation"},{#,"Name"}}&
.Bytes Python 3, Unhexseptium (167)
Estes são os resultados quando o programa é executado em todos os números de 1 a 999 (inclusive)
fonte
Pip , Radônio
Actinium deTório(86)(Não inspire esta entrada, isso causará câncer de pulmão.)
Pega o número do elemento como um argumento da linha de comando e gera o nome e a abreviação em linhas separadas.
Explicação (um pouco não-destruída):
O manipulador
ii
andnnn
usa uma substituição de regex com uma função de retorno de chamada (adicionada na versão mais recente do Pip): para cada correspondência deii|nnn
, pegue apenas o primeiro caractere e use-o como um substituto.fonte
GNU sed, 171 (unseptúnio)
Suponho que não importa em que ordem o nome e o símbolo são retornados. Aqui, o símbolo vem primeiro:
fonte
g
; os únicos casos seriabiium
/triium
eennnil
, tudo o que só pode acontecer uma vez em números em 1000.Mathematica, unhexunium
163161 bytesagora capitaliza o símbolo
Este é o Mathematica sem o built-in
ElementData
.Teste em 10 números aleatórios:
fonte
JavaScript (ES6) 164 (unhexquadium)
171A capitalização é a parte complicada. (Teste no FireFox)
Editar 3 bytes salvos thx user2786485
fonte
*enium
em vez de*ennium
para qualquer coisa que seja*9
[...n]
falhará para um parâmetro int. O desafio é sobrea given positive integer
replace(/i(i)|n(nn)/g,'$1$2')
Ruby -
163156147143134 (Untriquadium) bytesEu estou esperando jogar golfe assim
Edit: Obrigado por @steveverrill por cortar 9 bytes!
Edit2: Obrigado por @steveverrill novamente por mais 4 bytes! (Solução realmente inteligente!)
fonte
each_char
você pode usarchars
. De acordo com a documentação oficial do Ruby, isso é "obsoleto" (mas não no codegolf!). Você provavelmente faria melhor comeach_byte
oubytes
sec.to_i
torna, por exemploi%48
. 2. Também por acaso\n
tem o código ASCII 10, então talvez você pode se livrar dochop
e incluemium
em sua matriz (funciona muito bem para o nome do elemento, mas adiciona uma espúriai
ao símbolo do elemento.)tr_s
assim:o=u='';gets.bytes{|c|k=%w[Nil un bI trI quad pent hex sept oct enN Ium][c%48];o+=k;u+=k[0]};puts o.tr_s('IN','in'),u[0..-2].downcase.capitalize
u.chop
é mais curto queu[0..-2]
. Talvez eu devesse ter postado minha própria resposta, mas minha ideia inicial era fazer exatamente como você fez. Tem sido divertido ajudá-lo a golfe isso embora. Perdi completamente que você não precisadowncase
antescapitalize
.Pitão, 67 bytes (Holmium)
Experimente online no Pyth Compiler / Executor .
Como funciona
fonte
JavaScript (ES6),
210202 bytes (BiunniliumBinilbium)Menos octium (8) bytes, graças a @ edc65!
130 159 147 Bytes (Untrinilium Unpentennium Unquadseptium)Entrada como
f(324)
. Ugh, eu me senti tão golf-y.fonte
CJam,
7472717069 bytes (Túlio)Observe que o código contém caracteres não imprimíveis.
Agradeço ao @ Sp3000 por apontar um erro na minha revisão inicial e sugerir a
)/
abordagem.Experimente em linha no intérprete CJam: .
Como funciona
fonte
Matlab, 170 (Unseptnilium)
Funciona em todas as entradas que você pode
nilium
usar , de até, até onde você quiser. Eu chegueiennennennennennennennennennennennennennennennennennennennennennennium
antes de desistir de pressionar a tecla 9.E uma explicação:
fonte
TI-BASIC,
223218 bytesO número de elemento N só pode ter um "n" triplo se terminar em 90 e "i" duplo se o último dígito for 2 ou 3. Usamos matemática para verificar esses casos.
O número mágico
1.5154
, que armazena o comprimento de cada prefixo, foi encontrado usando um script Python para pesquisar todos os decimais de comprimento ≤7 utilizando as funçõescosh(
,cos(
ee^(
.Ainda não terminou o golfe, mas as letras minúsculas de dois bytes do TI-BASIC e a falta de comandos de manipulação de cordas, como sempre, afetarão a pontuação deste programa.
fonte
Python 3, unpentquadium (
156155154) bytesEm vez de substituir
ii
pori
, removemos qualqueri
s antes de atacar oium
, pois essa é a única fonte possível dei
s duplo . Da mesma forma, removemosn
s verificando umenn/nil
caso.fonte
Retina,
206196186179 (Unseptennium) bytes ( Experimente on-line )Agradeço a @ MartinBüttner ( https://codegolf.stackexchange.com/users/8478/martin-b%C3%BCttner ) por me ensinar esse idioma.
Obrigado a @FryAmTheEggman por cortar 7 bytes.
Versão ueh-byte: aqui
Versão Bnh-byte: aqui
fonte
CJam, 95 bytes
Experimente online
Ele concorre na categoria "idiomas sem regex e usando apenas caracteres imprimíveis". ;) Realmente não esperava que fosse tão curto quanto algumas das soluções já postadas, mas fiquei curioso por quanto tempo isso acabaria. E como eu o comprei agora, é melhor postá-lo.
Explicação:
fonte
Go, 322 bytes (tribibium)
Lê três caracteres de STDIN, mais são ignorados, menos resultam em uma falha. Por isso, funciona para todos os números entre
unnilnilium
eennennennium
.fonte
PowerShell,
170168165 (Unhexpentium)Bastante direto e sem surpresas aqui. Exceto, talvez, que eu tenha resolvido a questão da capitalização, aplicando letras minúsculas a tudo, exceto a primeira parte, e tendo as partes individuais já em maiúsculas. Agrressivamente, agora, para evitar a perda de caracteres para atribuições de variáveis simples.
Bônus após a última alteração: agora também funciona para números de elemento mais longos:
fonte
C em x86, 192 (Unennbium)
Lê dígitos
stdin
e imprime os resultados parastdout
. Dependesizeof(char*) == sizeof(int)
.Versão não destruída:
fonte
Haskell, bipentbium (
305271269265261259253252 bytes)Retirou 34 bytes graças a nimi.
fonte
nnn
eii
casos emr
, ou seja,r('i':'i':a)='i':r a;r('n':'n':'n':a)="nn"++r a;r(x:a)=x:r a;r x=x
e chamá-lo sem argumentos:t=r.m.p
.concatMap
is>>=
, iep n=(n>>=(words"..."!!))++"ium "
GNU sed, unhexunium (161 bytes)
Eu giro o símbolo primeiro, depois o escondo no espaço reservado e crio o nome. Um loop é mais eficiente do que o uso
/g
para quatro ou mais substituições (podemos ter apenas umii
e / ou umnnn
, para que eles não precisem estar dentro do loop, mas não dói). Por fim, recupere e acrescente o símbolo em espera.(NB eu não tinha visto a resposta sed existente quando escrevi isso)
Casos de teste
Eles exercem as regras especiais
ii
ennn
:E uma ridícula, mostrando quanto mais esse código oferece, comparado ao mundo físico:
fonte
T-SQL 329 bytes
Formatado:
fonte
PHP, 152
153163bytes, unpentbiumBem, pelo menos o PHP está em torno da média dessa vez.
Executa a linha de comando do formulário como:
Resultado:
Ungolfed
Editar
array()
inicializador por[]
'ium '
usando uma concatenação extra.' '.
fonte
Perl, 109 bytes (Unnilennium)
Código 108 + 1 chave
Recebe a entrada do STDIN como um número por linha.
fonte
Java 8 216Bytes
fonte
ii
ennn
, como explicado na pergunta. 3. O objetivo do código golf é tornar o código o mais curto possível. A resposta deve conter sua pontuação no título. Você pode reduzir sua pontuação eliminando espaços em branco e encurtando o nome da variável.C #
229 (Bibiennium)198 bytes de unennoctiumO truque "n-'0 '" é uma maneira de converter de ascii para int. Char 9 = ASCII 57. Char 0 = ASCII 48, então 57-48 = 9.
string privada estática ToText (int v) {return (string.Join ("", v.ToString (). Select ((char n) => "nulo))") -'0 '])) + "ium"). Substitua ("nnn", "nn"). Substitua ("ii", "i") + "" + string.Join ("", v.ToString () .Selecione ((char n) => "nubtqphsoe" [n-'0 '])); }Essa abordagem pega int, converte em uma sequência e executa uma seleção de caracteres LINQ que dispara uma lambda.
O lambda gera uma matriz em tempo real (menos caracteres do que a defini-la) dividindo a sequência de prefixos. Em seguida, ele puxa o índice do prefixo para uso, observando o valor int do caractere atual (o truque n-'0 'mencionado acima).
Tudo isso é envolvido em uma string.Join que concatena todos os resultados do LINQ juntos. Adquira o "ium" e, em seguida, algumas instruções. Substitua no final para limpar os nnn 'e ii's.
Adicionada a saída do símbolo ausente. Eu acho que existe uma maneira mais eficiente de mesclar os dois LINQs, mas é muito tarde para continuar cutucando.
fonte
n-'0'
, por que nãon-30
?C,
210204unennennium (199) bytesIsso requer ASCII como o conjunto de caracteres de tempo de execução.
Eu tentei uma solução recursiva (o que evita a necessidade de
p
eo
), mas que acabou por mais tempo.Estou particularmente orgulhoso / envergonhado do matcher para o regexp
90|[23]$
, que depende9
e0
é o dígito mais distante (e, portanto, o único par que difere por 9 -39
o código é uma conseqüência dej
ser um valor inteiro e*n
ainda um ASCII caractere) e that2
e3
diferem apenas no último bit, então dividir por 2 os confunde.Código expandido:
Equipamento de teste:
fonte
R, 278 bytes
Não é o melhor ... mas ainda estou aprendendo R, então pensei em publicar minha tentativa. Alguma sugestão para melhorar? Agora que penso nisso, provavelmente é possível fazer um subconjunto na enésima-linha 1, em vez de desperdiçar espaço criando nomes de linhas.
Exemplo de uso
Ungolfed
k
0-9
para facilitar a identificaçãox
, converta para caractere, divida-a (por exemplo, 137 para "1" "3" "7")k
base na entrada do número de divisão e retorna as entradas-ium
k
usando substring para puxar a primeira letra das correspondências. Isso é concatenado para a saída da etapa 5 com um espaço em branco entre elessub()
para substituir os padrõesnnn
eii
fonte
Javascript - 169 bytes
Estranhamente, minhas tentativas de usar o mapa foram mais longas que o loop for.
EDIT: Opa, esqueci de verificar a data.
fonte
PHP, 131 + 1 bytes (untriunium)
ainda muito longo:
Execute como pipe
-nR
ou experimente online .fonte
Python, 154 bytes
fonte