Léonard de Pise (vers 1175 - vers 1245) est mieux connu sous le nom de Fibonacci . Mais c'est en fait un court pour le latin "filius Bonacci" (le fils de Bonacci) qui a été inventé au cours du 18ème siècle (selon Wikipedia ).
Dans ce défi, vous recevrez un nombre ordinal (au sens littéral) entre le 1 er et le 20 e et vous devrez retourner le terme correspondant dans la séquence de Fibonacci .
La torsion est que le nombre ordinal sera donné en latin.
Exemple : "duodécimus" → .
Table d'E / S complète
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
Règles
- L'entrée est garantie comme étant exactement l' une des chaînes décrites ci-dessus.
- Si cela vous aide, vous pouvez le prendre en majuscules à la place. Mais il doit être cohérent pour toutes les entrées. Les cas mixtes ne sont pas autorisés.
- Selon votre algorithme et votre langue, le codage en dur ou le calcul des termes de la séquence peut gagner ou perdre des octets. Les deux approches sont explicitement autorisées.
- C'est du code-golf !
Réponses:
R ,
9186 octetsRecherchez l'index de la somme des octets dans une table de recherche UTF8 forcée et utilisez la fonction de génération magique de Fibonacci pour donner la réponse.
Essayez-le en ligne!
Édition: -2 octets par arrondi numérique amélioré
Edit: -3 octets avec une modification de la recherche (merci pour l'indice, @Giuseppe!)
la source
chartr
l'UTF8 de la somme avec l'UTF8 de la valeur fibonacci, puisintToUtf8
la sortie dechartr
."sextus decimus"
, Giuseppe.Rubis,
10493 octetsEssayez-le en ligne!
Prend simplement la somme des octets, modulo 192 modulo 76 modulo 23, et indexe dans une table de recherche. (Nombre magique trouvé par force brute.)
la source
Nettoyer , 87 octets
Tous les échappements sauf
\n
sont traités comme un octet, car le compilateur se contente des valeurs brutes réelles. (TIO et SE ont des problèmes avec le fait qu'il ne soit pas valide UTF-8, et donc c'est échappé ici)FryAmTheEggman a fait une belle démonstration / solution: ici
Essayez-le en ligne!
Définit la fonction
$ :: [Char] -> Int
, qui utilise l'unicité de la somme des valeurs des caractères majuscules pour déterminer le terme de la séquence (généré par la fonction d'assistancek
) à renvoyer.la source
6502 code machine (C64), 82 octets
Cela utilise le hachage (bien sûr), mais optimisé pour une implémentation courte sur le 6502, en profitant du drapeau de transport défini par décalage et utilisé en plus. Les nombres magiques pour le hachage ont été trouvés par le forçage brut avec un petit programme C; le
FF
octets sont des trous malheureux dans la table de hachage;)Nombre d'octets: adresse de chargement de 2 octets, code de 38 octets, table de hachage de 42 octets pour les valeurs.
Démo en ligne
Utilisation:,
SYS49152"[ordinal]"
par exempleSYS49152"DUODECIMUS"
. (notez que les lettres apparaissent en majuscules dans la configuration C64 par défaut).Important : avant le premier démarrage, exécutez une
NEW
commande. Cela est nécessaire car laLOAD
commande C64 BASIC joue avec certains vecteurs BASIC, même lors du chargement d'un programme machine à une adresse absolue (comme ici$C000
/49152
).Démontage commenté :
Suite de tests C64 BASIC V2
(contenant le programme machine en
DATA
lignes)Démo en ligne
la source
Perl 6 , 62 octets
Essayez-le en ligne!
Utilise une table de recherche dans une chaîne, ainsi qu'un court générateur de séquences fibonacci.
la source
C (gcc) ,
135129 octets6 octets en moins par suggestion de plafond et Logern
Essayez-le en ligne!
Explication:
la source
return i;
para=i;
Pyth , 54 octets
Suite de tests
Remarque: comme le code utilise certains caractères non imprimables, il peut ne pas s'afficher correctement sur Stack Exchange. Le lien fourni mène à une source fonctionnelle et collable.
Bref,
Q[0]+Q[618%len(Q)]
donne des résultats uniques pour toutes les entrées acceptéesQ
.la source
Python 2 , 292 octets
Essayez-le en ligne!
Générateur Fibonacci volé sans vergogne à cette réponse .
Décompose chaque mot en ses parties significatives et élimine le reste (dans "duodevicesimus", par exemple, nous ne nous soucions que de "duo ev es" -> "2 - 20" -> abs ("2-20") -> 18).
Transmet la valeur calculée (moins 1 à 0 offset) à la fonction de générateur de Fibonacci.
Explication non golfée:
la source
Python 2 ,
9779 octetsEssayez-le en ligne!
Tout d'abord, nous voulons convertir le latin en nombre
n
; ceci est accompli enrépliquant la chaîne d'entrée suffisamment de fois pour s'assurer qu'il y a au moins 11 caractères au total; puis lesprenant le mod de hachage 69 et le transformant en un caractère imprimable.3
rd et10
e caractères (indexés zéro) forment une paire uniqueMaintenant, nous l'avons
n
. Pour trouver len
nombre de Fibonacci, nous pouvons utiliser la méthode d'arrondi , en utilisant seulement autant de chiffres de précision que nécessaire jusqu'à Fib (20).la source
JavaScript (Node.js) ,
10097959291 octetsEssayez-le en ligne!
Avertissement: FONCTIONNEMENT EN RAISON DE L'EXACTITUDE DU POINT FLOTTANT
JavaScript n'a ni fonction de hachage intégrée, ni fonction de conversion de caractères en ASCII suffisamment courte (elle
String.charCodeAt
est déjà la plus courte), j'ai donc besoin de définir moi-même une simple fonction de hachage.A utilisé la même méthode d'arrondi que Chas Brown a fait après le calcul du hachage.
Après une journée entière de force brute, on trouve mieux:
b32_to_dec(x.length + x) % 12789 % 24
(* inexactitude en virgule flottante)b32_to_dec(x.length + x) % 353 % 27
(* inexactitude en virgule flottante)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)
résultatVersion sans exploitation de l'inexactitude en virgule flottante: 95 octets
Essayez-le en ligne!
b36_to_dec(x.length + x[2]) % 158 % 29 - 4
Table de hachage
la source