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 untriseptium
y 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
f
en 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
ii
ynnn
el 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
/triium
yennnil
, 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
*enium
lugar de*ennium
cualquier cosa que sea*9
[...n]
fallará para un parámetro int. El desafío se trataa given positive integer
replace(/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_char
usted puede usarchars
. De acuerdo con la documentación oficial de Ruby, esto está "en desuso" (¡pero no en codegolf!) Probablemente le irá mejoreach_byte
obytes
luego sec.to_i
convertirá, por ejemploi%48
. 2. También, por casualidad,\n
tiene el código ascii 10, por lo que tal vez pueda deshacerse de élchop
e incluirloium
en su matriz (funciona muy bien para el nombre del elemento, pero agrega uni
símbolo espurio al elemento).tr_s
esta 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.capitalize
u.chop
es 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 necesitesdowncase
antescapitalize
.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
nilium
hasta, hasta donde quiera llegar. Lleguéennennennennennennennennennennennennennennennennennennennennennennium
antes 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
ii
coni
rstrip cualquieri
s antes de agregar elium
, ya que esa es la única fuente posible de doblei
s. Del mismo modo, despojamosn
s al buscar unenn/nil
caso.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
unnilnilium
yennennennium
.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
stdin
e 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
nnn
yii
casos 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=x
y lo llaman sin argumentos:t=r.m.p
.concatMap
es>>=
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
/g
para cuatro o más reemplazos (solo podemos tener unoii
y / 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
ii
ynnn
: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
ii
ynnn
, 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
p
yo
) pero resultó más tiempo.Estoy particularmente orgulloso / avergonzado de la coincidencia para la expresión regular
90|[23]$
, que se basa9
y0
es el dígito separado más alejado (y, por lo tanto, el único par que difiere en 9;39
el código es una consecuencia dej
ser un valor entero y*n
aún un ASCII carácter) y eso2
y3
difieren 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
k
0-9
para una fácil identificaciónx
, conviértala en carácter, divídala (p. Ej. 137 a "1" "3" "7")k
basado en la entrada del número dividido y devuelve las entradas-ium
k
usando 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 patronesnnn
yii
fuente
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
-nR
o probarlo en línea .fuente
Python, 154 bytes
fuente