Leonardo de Pisa (ca. 1175 - ca. 1245) es mejor conocido como Fibonacci . Pero esto es en realidad una abreviatura del latín "filius Bonacci" (el hijo de Bonacci) que se inventó durante el siglo XVIII (según Wikipedia ).
En este desafío, se le dará un número ordinal (en el sentido literal) entre 1 st y 20 º y tiene que devolver el término correspondiente en la secuencia de Fibonacci .
El giro es que el número ordinal se dará en latín.
Ejemplo : "duodecimus" → .
Mesa de E / S completa
input | meaning | output
--------------------+---------+--------
"primus" | 1st | 0
"secundus" | 2nd | 1
"tertius" | 3rd | 1
"quartus" | 4th | 2
"quintus" | 5th | 3
"sextus" | 6th | 5
"septimus" | 7th | 8
"octavus" | 8th | 13
"nonus" | 9th | 21
"decimus" | 10th | 34
"undecimus" | 11th | 55
"duodecimus" | 12th | 89
"tertius decimus" | 13th | 144
"quartus decimus" | 14th | 233
"quintus decimus" | 15th | 377
"sextus decimus" | 16th | 610
"septimus decimus" | 17th | 987
"duodevicesimus" | 18th | 1597
"undevicesimus" | 19th | 2584
"vicesimus" | 20th | 4181
Reglas
- Se garantiza que la entrada sea exactamente una de las cadenas descritas anteriormente.
- Si eso ayuda, puede tomarlo en mayúsculas en su lugar. Pero debe ser consistente para todas las entradas. No se permiten casos mixtos.
- Dependiendo de su algoritmo e idioma, la codificación o el cálculo de los términos de la secuencia pueden ganar o perder bytes. Ambos enfoques están explícitamente permitidos.
- Este es el código de golf !
Respuestas:
R ,
9186 bytesBusque el índice de la suma de bytes en una tabla de búsqueda UTF8 forzada por fuerza bruta y use la función mágica de generación de Fibonacci para dar la respuesta.
Pruébalo en línea!
Editar: -2 bytes por redondeo numérico mejorado
Editar: -3 bytes con un cambio en la búsqueda (¡gracias por la pista, @Giuseppe!)
fuente
chartr
el UTF8 de la suma con el UTF8 del valor de Fibonacci, y luegointToUtf8
la salida dechartr
."sextus decimus"
, Giuseppe.Ruby,
10493 bytesPruébalo en línea!
Simplemente toma la suma de los bytes, módulo 192 módulo 76 módulo 23, e indexa en una tabla de búsqueda. (Números mágicos encontrados por la fuerza bruta).
fuente
Limpio , 87 bytes
Todos los escapes excepto
\n
se tratan como un byte, ya que el compilador está bien con los valores brutos reales. (TIO y SE tienen problemas con que no sea UTF-8 válido, por lo que se ha escapado aquí)FryAmTheEggman hizo una buena demostración / solución alternativa: aquí
Pruébalo en línea!
Define la función
$ :: [Char] -> Int
, que utiliza la unicidad en la suma de los valores de caracteres en mayúscula para determinar qué término de la secuencia (generado por la función auxiliark
) devolver.fuente
Código de máquina 6502 (C64), 82 bytes
Esto utiliza hashing (por supuesto), pero optimizado para una implementación corta en el 6502, aprovechando el conjunto de banderas de transporte mediante el desplazamiento y el uso adicional. Los números mágicos para el hash se encontraron mediante la fuerza bruta con un pequeño programa en C; los
FF
bytes son agujeros desafortunados en la tabla hash;)Recuento de bytes: dirección de carga de 2 bytes, código de 38 bytes, tabla hash de 42 bytes para valores.
Demostración en línea
Uso:
SYS49152"[ordinal]"
por ejemploSYS49152"DUODECIMUS"
. (tenga en cuenta que las letras aparecen en mayúsculas en la configuración predeterminada de C64).Importante : Antes del primer inicio, emita un
NEW
comando. Esto es necesario porque elLOAD
comando C64 BASIC juega con algunos vectores BASIC, incluso cuando se carga un programa de máquina en una dirección absoluta (como aquí$C000
/49152
).Desmontaje comentado :
Conjunto de pruebas C64 BASIC V2
(que contiene el programa de la máquina en
DATA
líneas)Demostración en línea
fuente
Perl 6 , 62 bytes
Pruébalo en línea!
Utiliza una tabla de búsqueda en una cadena, así como un generador de secuencia de Fibonacci corto.
fuente
C (gcc) ,
135129 bytes6 bytes hacia abajo por sugerencia de ceilingcat y Logern
Pruébalo en línea!
Explicación:
fuente
return i;
cona=i;
Pyth , 54 bytes
Banco de pruebas
Aviso: como el código hace uso de algunos caracteres no imprimibles, es posible que no se muestre correctamente en Stack Exchange. El enlace proporcionado conduce a una fuente de trabajo y copiable.
Larga historia corta,
Q[0]+Q[618%len(Q)]
da resultados únicos para todas las entradas aceptadasQ
.fuente
Python 2 , 292 bytes
Pruébalo en línea!
Generador de Fibonacci robado descaradamente de esta respuesta .
Desglosa cada palabra en sus partes componentes significativas y descarta el resto (en "duodevicesimus", por ejemplo, solo nos preocupamos por "duo ev es" -> "2 - 20" -> abs ("2-20") -> 18)
Pasa el valor calculado (menos 1 a 0-offset) a la función de generador de Fibonacci.
Explicación sin golf:
fuente
Python 2 ,
9779 bytesPruébalo en línea!
Primero, queremos convertir del latín a un número
n
; esto se lograreplicando la cadena de entrada suficientes veces para garantizar que haya al menos 11 caracteres en total; y luego los caracterestoma el hash mod 69 y lo convierte en un carácter imprimible.3
rd y10
th (indexados a cero) forman un par únicoAhora tenemos
n
. Para encontrar eln
número de Fibonacci, podemos usar el método de redondeo , usando solo tantos dígitos de precisión como necesitemos hasta Fib (20).fuente
JavaScript (Node.js) ,
10097959291 bytesPruébalo en línea!
Advertencia: FUNCIONA POR INCORRECCIÓN DEL PUNTO FLOTANTE
JavaScript no tiene una función hash incorporada ni una función de carácter ASCII lo suficientemente corta (ya
String.charCodeAt
es la más corta), por lo que necesito definir una función hash simple por mí mismo.Usó el mismo método de redondeo que utilizó Chas Brown después de calcular el hash.
Después de un día entero de fuerza bruta, se encuentra un mejor:
b32_to_dec(x.length + x) % 12789 % 24
(* inexactitud de coma flotante)b32_to_dec(x.length + x) % 353 % 27
(* inexactitud de coma flotante)b36_to_dec(x.length + x[2]) % 158 % 29 - 4
b36_to_dec(x[2] + x.length) % 741 % 30
b36_to_dec(x[0] + x[2] + x.length) % 4190 % 27
parseInt(x.length + x, 32)
resultadoVersión sin explotación de imprecisión de coma flotante: 95 bytes
Pruébalo en línea!
b36_to_dec(x.length + x[2]) % 158 % 29 - 4
Tabla de picadillo
fuente