IUPAC en su sabiduría insufrible ha creado un nombre de elemento sistemático para cualquier elemento recién creado. Este es el nombre temporal de un elemento hasta que finalmente deciden acerca de un nombre real. Funciona así: a cada dígito de un número de elemento se le asigna un prefijo en función de su valor. Los prefijos se concatenan con 'ium' al final. Cuando se hace esto y si obtiene dobles i's (ii) o triples n's (nnn), reemplácelos con single i's y double n's. El símbolo para el elemento es la primera letra de cada prefijo utilizado concatenado y resultado en mayúscula. Los prefijos utilizados están a continuación.
0 nil 5 pent
1 un 6 hex
2 bi 7 sept
3 tri 8 oct
4 quad 9 enn
Entonces, para este golf, su código necesita generar tanto el nombre del elemento como su símbolo para un entero positivo dado. Entonces, si su código recibió 137, debería imprimirse en stdout o devolver ambos untriseptiumy Uts. Debe ser válido desde al menos 118 a 558 . Cualquier valor superior es válido si no aumenta la longitud de su código.
Ejemplo de Python que muestra el 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 gana con bytes de cadmio!

Respuestas:
Mathematica 10.1,
indio (49)cadmio (48)Esta solución utiliza una biblioteca integrada de propiedades de elementos, incluidos los nombres y abreviaturas de IUPAC. (No he visto esto como una técnica que se debe evitar en el golf. Parece alentarse. Pero esto podría estar (tal vez por encima) de lo aceptable: Mathematica implementa esta biblioteca (y muchas otras) descargando datos de Los servidores de Wolfram la primera vez que lo usas (y supongo que ocasionalmente verifica si hay actualizaciones).
¿Cómo se compara esto con el uso de elements.py o periodictable.py en Python?
Editar: Meses después: Noté que había escrito la salida abreviada de 122. He vuelto a ejecutar el código y verifiqué que cometí este error, no Mathematica.
fuente
fen sí mismo una función pura:f=ElementData@@@{{#,"Abbreviation"},{#,"Name"}}&.Python 3, Unhexseptium (167) bytes
Estos son los resultados cuando el programa se ejecuta en cada número del 1 al 999 (inclusive)
fuente
Pipa ,
radionactiotorio(86)(No inhale esta entrada, le dará cáncer de pulmón).
Toma el número del elemento como un argumento de línea de comando y genera el nombre y la abreviatura en líneas separadas.
Explicación (algo no golfista):
El
iiynnnel manejo utiliza un reemplazo de expresiones regulares con una función de devolución de llamada (añadido en la versión más reciente de la pipa): para cada partido deii|nnn, tomar todo menos el primer carácter y su uso como un reemplazo.fuente
GNU sed, 171 (septunio)
Supongo que no importa en qué orden se devuelven el nombre y el símbolo. Aquí, el símbolo es lo primero:
fuente
g; los únicos casos seríanbiium/triiumyennnil, todo lo cual solo puede suceder una vez en números inferiores a 1000.Mathematica, unhexunium
163161 bytesahora capitaliza el símbolo
Esto es Mathematica sin el incorporado
ElementData.Prueba en 10 números aleatorios:
fuente
JavaScript (ES6) 164 (unhexquadium)
171La capitalización es la parte difícil. (Prueba en FireFox)
Editar 3 bytes guardados thx user2786485
fuente
*eniumlugar de*enniumcualquier cosa que sea*9[...n]fallará para un parámetro int. El desafío se trataa given positive integerreplace(/i(i)|n(nn)/g,'$1$2')Ruby -
163156147143134 (Untriquadium) bytesEspero jugar golf de esta manera
Editar: ¡Gracias por @steveverrill por reducir 9 bytes!
Edit2: ¡Gracias por @steveverrill nuevamente por otros 4 bytes! (¡Una solución realmente inteligente!)
fuente
each_charusted puede usarchars. De acuerdo con la documentación oficial de Ruby, esto está "en desuso" (¡pero no en codegolf!) Probablemente le irá mejoreach_byteobytesluego sec.to_iconvertirá, por ejemploi%48. 2. También, por casualidad,\ntiene el código ascii 10, por lo que tal vez pueda deshacerse de élchope incluirloiumen su matriz (funciona muy bien para el nombre del elemento, pero agrega unisímbolo espurio al elemento).tr_sesta manera: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.capitalizeu.chopes más corto queu[0..-2]. Tal vez debería haber publicado mi propia respuesta, pero mi idea inicial era hacerlo exactamente como tú lo hiciste. Sin embargo, ha sido divertido ayudarlo a jugar golf. Extrañé por completo que no necesitesdowncaseantescapitalize.Pyth, 67 bytes (holmio)
Pruébelo en línea en Pyth Compiler / Executor .
Cómo funciona
fuente
JavaScript (ES6),
210202 Bytes (BiunniliumBinilbium)Menos octium (8) bytes, gracias a @ edc65!
130159147 Bytes (Untrinilium Unpentennium Unquadseptium)Entrada como
f(324). Ugh, me sentí tan golfista.fuente
CJam,
7472717069 bytes (Tulio)Tenga en cuenta que el código contiene caracteres no imprimibles.
Gracias a @ Sp3000 por señalar un error en mi revisión inicial y sugerir el
)/enfoque.Pruébelo en línea en el intérprete Cjam: .
Cómo funciona
fuente
Matlab, 170 (Unseptnilium)
Funciona en todas las entradas que puede lanzar, desde
niliumhasta, hasta donde quiera llegar. Lleguéennennennennennennennennennennennennennennennennennennennennennenniumantes de rendirme presionando la tecla 9.Y una explicación:
fuente
TI-BASIC,
223218 bytesEl número de elemento N solo puede tener una triple "n" si termina en 90, y solo puede tener una doble "i" si el último dígito es 2 o 3. Utilizamos las matemáticas para verificar esos casos.
El número mágico
1.5154, que almacena la longitud de cada prefijo, se encontró con un script Python para buscar todas decimales de longitud ≤7 utilizando las funcionescosh(,cos(ye^(.Todavía no ha terminado de jugar al golf, pero las letras minúsculas de dos bytes de TI-BASIC y la falta de comandos de manipulación de cadenas, como siempre, afectarán la puntuación de este programa.
fuente
Python 3, unpentquadium (
156155154) bytesEn lugar de reemplazar
iiconirstrip cualquieris antes de agregar elium, ya que esa es la única fuente posible de dobleis. Del mismo modo, despojamosns al buscar unenn/nilcaso.fuente
Retina,
206196186179 (Unseptennium) bytes ( Pruébelo en línea )Gracias a @ MartinBüttner ( https://codegolf.stackexchange.com/users/8478/martin-b%C3%BCttner ) por enseñarme este idioma.
Gracias a @FryAmTheEggman por cortar 7 bytes.
Versión de Ueh-byte: aquí
Versión Bnh-byte: aquí
fuente
CJam, 95 bytes
Pruébalo en línea
Esto compite en la categoría "idiomas sin expresiones regulares, y solo con caracteres imprimibles". ;) Realmente no esperaba que fuera tan corto como algunas de las soluciones ya publicadas, pero tenía curiosidad de cuánto tiempo terminaría de todos modos. Y desde que lo obtuve ahora, bien podría publicarlo.
Explicación:
fuente
Go, 322 Bytes (tribibium)
Lee tres caracteres de STDIN, se ignoran más, menos resultan en un bloqueo. Entonces funciona para cada número entre
unnilniliumyennennennium.fuente
PowerShell,
170168165 (Unhexpentium)Bastante sencillo y sin sorpresas aquí. Excepto, tal vez, que resolví el problema de las mayúsculas al poner en minúsculas todo menos la primera parte y tener las partes individuales ya en mayúsculas. Agresivamente en línea para evitar perder caracteres por asignaciones de variables desnudas.
Bonificación después del último cambio: ahora también funciona para números de elementos más largos:
fuente
C en x86, 192 (Unennbio)
Lee dígitos
stdine imprime los resultados enstdout. Se basa ensizeof(char*) == sizeof(int).Versión sin golf:
fuente
Haskell, bipentbio (
305271269265261259253252 bytes)Afeitado 34 bytes de descuento gracias a nimi.
fuente
nnnyiicasos enr, es decir,r('i':'i':a)='i':r a;r('n':'n':'n':a)="nn"++r a;r(x:a)=x:r a;r x=xy lo llaman sin argumentos:t=r.m.p.concatMapes>>=decir, es decirp n=(n>>=(words"..."!!))++"ium "GNU sed, unhexunio (161 bytes)
Primero genero el símbolo, luego lo guardo en el espacio de espera y creo el nombre. Un bucle es más golfístico que usarlo
/gpara cuatro o más reemplazos (solo podemos tener unoiiy / o unonnn, por lo que no es necesario que estén dentro del bucle, pero no duele). Finalmente, recupere y agregue el símbolo retenido.(Nota: no había visto la respuesta sed existente cuando escribí esto)
Casos de prueba
Estos ejercen las reglas especiales
iiynnn:Y uno ridículo, que muestra cuánto más da este código, en comparación con el mundo físico:
fuente
T-SQL 329 bytes
Formateado:
fuente
PHP, 152
153163bytes, unpentbiumBueno, al menos PHP esta vez en algún lugar alrededor del promedio.
Ejecuta la línea de comando del formulario como:
Salida:
Sin golf
Editar
array()-inicializador con[]'ium 'una concatenación adicional.' '.fuente
Perl, 109 (Unnilennium) bytes
108 código + 1 interruptor
Toma la entrada de STDIN como un número por línea.
fuente
Java 8 216 Bytes
fuente
iiynnn, como se explica en la pregunta. 3. El objetivo del código golf es hacer el código lo más corto posible. La respuesta debe contener su puntaje en el título. Puede reducir su puntaje eliminando espacios en blanco y acortando el nombre de la variable.C #
229 (Bibiennium)198 bytes de unennoctiumEl truco "n-'0 '" es una forma de convertir de ascii a int. Char 9 = ASCII 57. Char 0 = ASCII 48, entonces 57-48 = 9.
cadena privada estática ToText (int v) {return (string.Join ("", v.ToString (). Seleccione ((char n) => "nil un bi tri quad pent hex sept oct enn" .Split () [n -'0 '])) + "ium"). Reemplazar ("nnn", "nn"). Reemplazar ("ii", "i") + "" + string.Join ("", v.ToString () .Seleccione ((char n) => "nubtqphsoe" [n-'0 '])); }Este enfoque toma el int, lo convierte en una cadena y luego realiza una selección de caracteres LINQ que dispara una lambda.
La lambda genera una matriz sobre la marcha (menos caracteres que la definición) al dividir la cadena de prefijos. Luego, extrae el índice del prefijo para usar mirando el valor int del carácter actual (el truco n-'0 'mencionado anteriormente).
Todo lo que está envuelto en una cadena. Unir que concatena todos los resultados LINQ juntos. Agregue el "ium", luego un par de declaraciones .Replace al final para limpiar el nnn 'y el ii's.
Se agregó la salida del símbolo que falta. Creo que hay una manera más eficiente al fusionar los dos LINQ, pero es demasiado tarde para seguir hurgando.
fuente
n-'0', ¿por qué non-30?C,
210204unenenio (199) bytesEsto requiere ASCII como el conjunto de caracteres de tiempo de ejecución.
Intenté una solución recursiva (que evita la necesidad de
pyo) pero resultó más tiempo.Estoy particularmente orgulloso / avergonzado de la coincidencia para la expresión regular
90|[23]$, que se basa9y0es el dígito separado más alejado (y, por lo tanto, el único par que difiere en 9;39el código es una consecuencia dejser un valor entero y*naún un ASCII carácter) y eso2y3difieren solo en el último bit, por lo que dividir por 2 los combina.Código ampliado:
Arnés de prueba:
fuente
R, 278 bytes
No es el mejor ... pero todavía estoy aprendiendo R, así que pensé en publicar mi intento. ¿Alguna sugerencia para mejorarlo? Ahora que lo pienso, probablemente sea posible subconjunto en la fila n-1 en lugar de perder espacio creando nombres de fila.
Ejemplo de uso
Sin golf
k0-9para una fácil identificaciónx, conviértala en carácter, divídala (p. Ej. 137 a "1" "3" "7")kbasado en la entrada del número dividido y devuelve las entradas-iumkusando subcadena para extraer la primera letra de las coincidencias. Esto se concatena a la salida del paso 5 con un espacio en blanco entre ellossub()para reemplazar los patronesnnnyiifuente
Javascript - 169 bytes
Curiosamente, mis intentos de usar el mapa fueron más largos que el ciclo for.
EDITAR: Vaya, olvidé comprobar la fecha.
fuente
PHP, 131 + 1 bytes (untriunio)
todavía muy largo:
Ejecutar como tubería
-nRo probarlo en línea .fuente
Python, 154 bytes
fuente