Leonardo z Pizy (ok. 1175 - ok. 1245) jest lepiej znany jako Fibonacci . Ale tak naprawdę jest to skrót od łacińskiego „filius Bonacci” (syn Bonacciego), który powstał w XVIII wieku (według Wikipedii ).
W tym wyzwaniem, musisz być nadany numer porządkowy (w sensie dosłownym) między 1 st i 20 th i trzeba wrócić odpowiedni okres w ciągu Fibonacciego .
Skręt polega na tym, że liczba porządkowa zostanie podana w języku łacińskim.
Przykład : „duodecimus” → .
Pełny stół we / wy
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
Zasady
- Gwarantowanym wejściem jest dokładnie jeden z ciągów opisanych powyżej.
- Jeśli to pomoże, możesz zamiast tego wziąć to dużymi literami. Ale musi być spójny dla wszystkich wpisów. Mieszane przypadki są niedozwolone.
- W zależności od algorytmu i języka kodowanie na stałe lub przetwarzanie warunków sekwencji może wygrać lub utracić bajty. Oba podejścia są wyraźnie dozwolone.
- To jest golf golfowy !
Odpowiedzi:
R ,
9186 bajtówSprawdź indeks sumy bajtów w tabeli wyszukiwania UTF8 z brutalną siłą i użyj magicznej funkcji generowania Fibonacciego, aby udzielić odpowiedzi.
Wypróbuj online!
Edycja: -2 bajty dzięki ulepszonemu zaokrągleniu numerycznemu
Edycja: -3 bajty ze zmianą wyszukiwania (dzięki za podpowiedź, @Giuseppe!)
źródło
chartr
UTF8 sumy z UTF8 wartości Fibonacciego, a następnieintToUtf8
wynikchartr
."sextus decimus"
Giuseppe.Rubin,
10493 bajtyWypróbuj online!
Po prostu pobiera sumę bajtów, modulo 192 modulo 76 modulo 23 i indeksuje do tabeli przeglądowej. (Liczby magiczne znalezione przez brutalną siłę.)
źródło
Czysty , 87 bajtów
Wszystkie sekwencje specjalne oprócz
\n
traktowane są jako jeden bajt, ponieważ kompilator jest w porządku z rzeczywistymi wartościami raw. (TIO i SE mają jednak problemy z tym, że nie jest prawidłowy UTF-8, więc tutaj uciekł)FryAmTheEggman wykonał niezłą demonstrację / obejście: tutaj
Wypróbuj online!
Definiuje funkcję
$ :: [Char] -> Int
, która wykorzystuje unikalność w sumowaniu wartości wielkich liter do określenia, który termin w sekwencji (wygenerowany przez funkcję pomocnikak
) ma zostać zwrócony.źródło
Kod maszynowy 6502 (C64), 82 bajty
Wykorzystuje to haszowanie (oczywiście), ale jest zoptymalizowane do krótkiej implementacji w 6502, wykorzystując zestaw flagi przenoszenia przez przesunięcie i używany dodatkowo. Liczby magiczne dla haszowania zostały znalezione przez brutalne wymuszanie za pomocą małego programu C; te
FF
bajty są niefortunne otwory w stole mieszania;)Liczba bajtów: adres ładowania 2 bajty, kod 38 bajtów, 42 bajty hashtable dla wartości.
Demo online
Zastosowanie:
SYS49152"[ordinal]"
na przykładSYS49152"DUODECIMUS"
. (zwróć uwagę, że litery są wyświetlane dużymi literami w domyślnej konfiguracji C64).Ważne : przed pierwszym uruchomieniem wydaj
NEW
polecenie. Jest to konieczne, ponieważLOAD
komenda C64 BASIC błąka się z niektórymi wektorami BASIC, nawet podczas ładowania programu maszynowego na jakiś adres bezwzględny (jak tutaj$C000
/49152
).Skomentowany demontaż :
Zestaw testowy C64 BASIC V2
(zawierający program maszyny w
DATA
wierszach)Demo online
źródło
Perl 6 , 62 bajtów
Wypróbuj online!
Używa tabeli odnośników w łańcuchu, a także generatora krótkich sekwencji Fibonacciego.
źródło
C (gcc) ,
135129 bajtów6 bajtów w dół dzięki sugestii programu pułapkowego cat i Logern
Wypróbuj online!
Wyjaśnienie:
źródło
return i;
za=i;
Pyth , 54 bajty
Zestaw testowy
Ogłoszenie: ponieważ kod wykorzystuje niektóre niedrukowalne znaki, może nie być poprawnie wyświetlany na Stack Exchange. Podany link prowadzi do działającego i możliwego do skopiowania źródła.
Krótko mówiąc,
Q[0]+Q[618%len(Q)]
daje unikalne wyniki dla wszystkich zaakceptowanych danych wejściowychQ
.źródło
Python 2 , 292 bajty
Wypróbuj online!
Generator Fibonacciego bezwstydnie skradziony z tej odpowiedzi .
Dzieli każde słowo na znaczące części składowe i odrzuca resztę (na przykład w „duodevicesimus” dbamy tylko o „duo ev es” -> „2-20” -> abs („2-20”) -> 18).
Przekazuje obliczoną wartość (minus 1 do 0-offset) do funkcji generatora Fibonacciego.
Niegolfowane Objaśnienie:
źródło
Python 2 ,
9779 bajtówWypróbuj online!
Po pierwsze, chcemy przekonwertować z łaciny na liczbę
n
; osiąga się to poprzezreplikację ciągu wejściowego wystarczająco wiele razy, aby zapewnić, że w sumie jest co najmniej 11 znaków; a następnieprzyjmując mod skrótu 69 i przekształcając go w znak do druku.3
rd i10
znaki th (indeksowane od zera) tworzą unikalną parę,Teraz mamy
n
. Aby znaleźćn
liczbę Fibonacciego, możemy użyć metody zaokrąglania , używając tylko tyle cyfr precyzji, ile potrzebujemy, aż do Fib (20).źródło
JavaScript (Node.js) ,
10097959291 bajtówWypróbuj online!
Ostrzeżenie: DZIAŁA PONIEWAŻ NIEDOKŁADNOŚCI PUNKTOWEJ
JavaScript nie ma ani wbudowanej funkcji skrótu, ani wystarczająco krótkiej funkcji znakowej do ASCII (
String.charCodeAt
jest już najkrótsza), więc sam muszę zdefiniować prostą funkcję skrótu.Zastosowano tę samą metodę zaokrąglania, co Chas Brown po obliczeniu wartości skrótu.
Po całym dniu brutalnego forsowania można znaleźć coś lepszego:
b32_to_dec(x.length + x) % 12789 % 24
(* niedokładność zmiennoprzecinkowa)b32_to_dec(x.length + x) % 353 % 27
(* niedokładność zmiennoprzecinkowa)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)
wynikWersja bez wykorzystania niedokładności zmiennoprzecinkowej: 95 bajtów
Wypróbuj online!
b36_to_dec(x.length + x[2]) % 158 % 29 - 4
Tabela mieszania
źródło