Leonardo von Pisa (ca. 1175 - ca. 1245) ist besser bekannt als Fibonacci . Dies ist jedoch eine Abkürzung für den lateinischen "Filius Bonacci" (Sohn von Bonacci), der im 18. Jahrhundert erfunden wurde (laut Wikipedia ).
In dieser Herausforderung werden Sie eine Ordnungszahl (im wörtlichen Sinne) zwischen gegeben 1 st und 20 th und Sie haben den entsprechenden Begriff in der zurück Fibonacci - Folge .
Die Wendung ist, dass die Ordnungszahl in Latein angegeben wird.
Beispiel : "duodecimus" → .
Vollständige E / A-Tabelle
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
Regeln
- Die Eingabe ist garantiert genau eine der oben beschriebenen Zeichenfolgen.
- Wenn das hilft, können Sie es stattdessen in Großbuchstaben schreiben. Sie muss jedoch für alle Einträge konsistent sein. Mischfälle sind nicht zulässig.
- Abhängig von Ihrem Algorithmus und Ihrer Sprache können beim Hardcodieren oder Berechnen der Begriffe der Sequenz Bytes gewonnen oder verloren werden. Beide Ansätze sind ausdrücklich erlaubt.
- Das ist Code-Golf !
Antworten:
R ,
9186 BytesSuchen Sie den Index der Bytesumme in einer Brute-Forced-UTF8-Nachschlagetabelle und geben Sie die Antwort mithilfe der magischen Fibonacci-Generierungsfunktion .
Probieren Sie es online!
Edit: -2 Bytes durch verbesserte numerische Rundung
Edit: -3 Bytes mit einer Änderung an der Suche (danke für den Hinweis, @ Giuseppe!)
quelle
chartr
die UTF8 der Summe mit der UTF8 des Fibonacci-Werts und dannintToUtf8
die Ausgabe vonchartr
."sextus decimus"
, Giuseppe.Ruby,
10493 BytesProbieren Sie es online!
Nimmt einfach die Summe der Bytes, Modulo 192, Modulo 76, Modulo 23, und indiziert in eine Nachschlagetabelle. (Magische Zahlen durch rohe Gewalt gefunden.)
quelle
Sauber , 87 Bytes
Alle Escapezeichen außer
\n
werden als ein Byte behandelt, da der Compiler mit den tatsächlichen Rohwerten zufrieden ist. (TIO und SE haben Probleme damit, dass UTF-8 nicht gültig ist, und daher ist es hier ausgeblendet.)FryAmTheEggman hat eine schöne Demonstration / Umgehung gemacht: hier
Probieren Sie es online!
Definiert die Funktion
$ :: [Char] -> Int
, die die Eindeutigkeit in der Summe der Großbuchstaben verwendet, um zu bestimmen, welcher Term in der Sequenz (von der Hilfsfunktion generiertk
) zurückgegeben werden soll.quelle
6502 Maschinencode (C64), 82 Bytes
Dies verwendet Hashing (natürlich), ist jedoch für eine kurze Implementierung auf dem 6502 optimiert und nutzt das durch Verschieben gesetzte und zusätzlich verwendete Übertragsflag. Magische Zahlen für das Hashing wurden durch brachiales Forcen mit einem kleinen C-Programm gefunden; die
FF
bytes sind unglückliche löcher in der hashtabelle;)Byteanzahl: 2 Bytes Ladeadresse, 38 Bytes Code, 42 Bytes Hashtabelle für Werte.
Online-Demo
Verbrauch:
SYS49152"[ordinal]"
zum BeispielSYS49152"DUODECIMUS"
. (Beachten Sie, dass die Buchstaben in der Standard-C64-Konfiguration in Großbuchstaben angezeigt werden.)Wichtig : Geben Sie vor dem ersten Start einen
NEW
Befehl aus. Dies ist erforderlich, da der C64-BASIC-LOAD
Befehl mit einigen BASIC-Vektoren tüftelt, selbst wenn ein Maschinenprogramm auf eine absolute Adresse geladen wird (wie hier$C000
/49152
).Kommentierte Demontage :
C64 BASIC V2-Testsuite
(enthält das Maschinenprogramm in
DATA
Zeilen)Online-Demo
quelle
Perl 6 , 62 Bytes
Probieren Sie es online!
Verwendet eine Nachschlagetabelle in einem String sowie einen kurzen Fibonacci-Sequenzgenerator.
quelle
C (GCC) ,
135129 Bytes6 Bytes runter auf Vorschlag von Ceilingcat und Logern
Probieren Sie es online!
Erläuterung:
quelle
return i;
mita=i;
Pyth , 54 Bytes
Testsuite
Hinweis: Da der Code einige nicht druckbare Zeichen verwendet, wird er in Stack Exchange möglicherweise nicht richtig angezeigt. Der bereitgestellte Link führt zu einer funktionierenden und kopierfähigen Quelle.
Kurz gesagt,
Q[0]+Q[618%len(Q)]
liefert einzigartige Ergebnisse für alle akzeptierten EingabenQ
.quelle
Python 2 , 292 Bytes
Probieren Sie es online!
Fibonacci-Generator schamlos aus dieser Antwort gestohlen .
Zerlegt jedes Wort in seine sinnvollen Bestandteile und verwirft den Rest (in "duodevicesimus" kümmern wir uns zum Beispiel nur um "duo eves" -> "2 - 20" -> abs ("2-20") -> 18).
Übergibt den berechneten Wert (minus 1 bis 0-Offset) an die Fibonacci-Generatorfunktion.
Ungolfed Erklärung:
quelle
Python 2 ,
9779 BytesProbieren Sie es online!
Zuerst wollen wir von Latein zu einer Zahl konvertieren
n
; Dies wird erreicht, indemdie Eingabezeichenfolge ausreichend oft repliziert wird, um sicherzustellen, dass insgesamt mindestens 11 Zeichen vorhanden sind. und dann bilden das, das den Hash-Mod 69 nimmt und daraus ein druckbares Zeichen macht.3
rd und das10
th Zeichen (null indiziert) ein eindeutiges PaarJetzt haben wir
n
. Um dien
th Fibonacci-Zahl zu finden, können wir die Rundungsmethode verwenden , wobei wir nur so viele Stellen der Genauigkeit verwenden, wie wir bis zu Fib (20) benötigen.quelle
JavaScript (Node.js) ,
10097959291 ByteProbieren Sie es online!
Warnung: ARBEITET, WEIL DER PUNKT UNGENAUIGKEIT SCHWIMMT
JavaScript hat weder eine integrierte Hash-Funktion noch eine ausreichend kurze Zeichen-zu-ASCII-Funktion (
String.charCodeAt
ist bereits die kürzeste). Daher muss ich selbst eine einfache Hash-Funktion definieren.Verwendete die gleiche Rundungsmethode wie Chas Brown nach der Berechnung des Hashs.
Nach einem ganzen Tag roher Gewalt wird ein Besseres gefunden:
b32_to_dec(x.length + x) % 12789 % 24
(* Gleitkomma-Ungenauigkeit)b32_to_dec(x.length + x) % 353 % 27
(* Gleitkomma-Ungenauigkeit)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)
ErgebnisVersion ohne Ausnutzung der Gleitkomma-Ungenauigkeit: 95 Bytes
Probieren Sie es online!
b36_to_dec(x.length + x[2]) % 158 % 29 - 4
Hash-tabelle
quelle