Informacje o przedstawicielstwach Zeckendorf / Base Fibonacci Numbers
Jest to system liczbowy, który wykorzystuje liczby Fibonacciego jako podstawę. Liczby składają się z 0 i 1, a każda 1 oznacza, że liczba zawiera odpowiednią liczbę Fibonacciego, a 0 oznacza, że nie.
Na przykład przekonwertujmy wszystkie liczby naturalne <= 10 na podstawową liczbę Fibonacciego.
1 stanie się 1, ponieważ jest to suma 1, która jest liczbą Fibonacciego,
2 stanie się 10, ponieważ jest to suma 2, która jest liczbą Fibonacciego, i nie potrzebuje 1, ponieważ już osiągnęliśmy pożądaną sumę.
3 stanie się 100, ponieważ jest to suma 3, która jest liczbą Fibonacciego i nie potrzebuje 2 lub 1, ponieważ już osiągnęliśmy pożądaną sumę.
- 4 stanie się 101, ponieważ jest to suma [3,1], z których oba są liczbami Fibonacciego.
- 5 stanie się 1000, ponieważ jest to suma 5, która jest liczbą Fibonacciego, i nie potrzebujemy żadnej z pozostałych liczb.
- 6 stanie się 1001, ponieważ jest to suma liczb Fibonacciego 5 i 1.
- 7 stanie się 1010, ponieważ jest to suma liczb Fibonacciego 5 i 2.
- 8 stanie się 10000, ponieważ jest to liczba Fibonacciego.
- 9 stanie się 10001, ponieważ jest to suma liczb Fibonacciego 8 i 1.
- 10 stanie się 10010, ponieważ jest to suma liczb Fibonacciego 8 i 2.
Przekształćmy losową podstawową liczbę Fibonacciego, 10101001010 na dziesiętną: Najpierw piszemy odpowiednie liczby Fibonacciego. Następnie obliczamy sumę liczb poniżej 1.
1 0 1 0 1 0 0 1 0 1 0
144 89 55 34 21 13 8 5 3 2 1 -> 144+55+21+5+2 = 227.
Przeczytaj więcej o liczbach Fibonacciego podstawowego: link , ma również narzędzie, które konwertuje zwykłe liczby całkowite na bazowe Fibonacciego. Możesz z tym eksperymentować.
Teraz pytanie:
Twoim zadaniem jest pobranie liczby w reprezentacji Zeckendorfa i wyprowadzenie jej wartości dziesiętnej.
Dane wejściowe to ciąg znaków, który zawiera tylko 0 i 1 (chociaż dane wejściowe można przyjmować w dowolny sposób).
Wypisuje jedną liczbę dziesiętną.
Przypadki testowe: (w formacie wejście-> wyjście)
1001 -> 6
100101000 -> 73
1000000000 -> 89
1001000000100100010 -> 8432
1010000010001000100001010000 -> 723452
To jest golf golfowy, więc wygrywa najkrótsza odpowiedź w bajtach.
Uwaga: Dane wejściowe nie będą zawierać żadnych początkowych zer lub kolejnych zer.
Odpowiedzi:
Taxi ,
19871927 bajtów-60 bajtów ze względu na fakt, że łamanie wierszy jest opcjonalne.
Wypróbuj online!
Ponieważ na koniec nie wracam do garażu taksówek, mój szef mnie zwalnia, więc wychodzi z błędem.
źródło
Joyless Park
wydaje się miłym miejscem do odwiedzeniaSunny Skies Park
.Perl 6 ,
2823 bajtówWypróbuj online!
Anonymous blok kodu, który pobiera listę
1
s i0
s w LSB zamawiania i zwraca liczbę.Wyjaśnienie:
źródło
Galaretka , 5 bajtów
Monadyczny link akceptujący listę w formie Little-endian (tj. Z LSB po lewej stronie do MSB po prawej).
Wypróbuj online!
źródło
J‘ÆḞḋṚ
.Wolfram Language (Mathematica) ,
35322928 bajtówWypróbuj online!
źródło
Haskell , 38 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako listę 1 i 0.
Wyjaśnienie
Tworzy listę liczb Fibonacciego bez pierwszego, w zmiennej
f
.Bierze listę wejściową
reverse
, mnoży każdy wpis przez odpowiedni wpis wf
, a następniesum
s wyniki.Haskell , 30 bajtów
Wypróbuj online!
Jeśli najpierw weźmiemy wejście z najmniej znaczącym bitem, nie potrzebujemy,
reverse
więc możemy zapisać 8 bajtów.źródło
Python 2 , 43 bajty
Wypróbuj online!
Pobiera dane wejściowe jako listę. Aktualizacja jest krótszą wersją
a,b=b+x,a+b+x
, któraa,b=b,a+b
jeśli zignorujesz, przypomina aktualizację Fibonacciegox
.Python 2 , 45 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako liczby dziesiętne.
źródło
Pyth, 13 bajtów
Większość z tych (8 bajtów) po prostu generuje liczby Fibonacciego.
Wypróbuj to z tym pakietem testowym!
Wyjaśnienie:
źródło
Brain-Flak ,
110,102,96,94,78, 74 bajtówWypróbuj online!
źródło
J ,
2414 bajtówWypróbuj online!
Gra w golfa w wersji 24-bajtowej, która wykorzystuje mieszaną bazę dla Fibonacciego.
Jak to działa
J , 21 bajtów
Wypróbuj online!
Udoskonalona wersja 25-bajtowego rozwiązania Galena Iwanowa .
Używa diagonalnej sumy trójkąta Pascala, która jest równoważna sumie współczynników dwumianowych:
Jak to działa
J , 24 bajty
Wypróbuj online!
Czasownik jednoznaczny jednoznaczny. Generuje mieszaną zasadę, która reprezentuje zasadę Fibonacciego, a następnie zasila konwersję zasady
#.
.Jak to działa
Alternatywy
J , 27 bajtów
Wypróbuj online!
Pomysł:
J , 30 bajtów
Wypróbuj online!
Ten zbudował najwięcej wysiłku. Używa wyrażenia w formie zamkniętej z trikiem zaokrąglania. W wyrażeniu 0 i 1 to odpowiednio 0 i 1, więc rzeczywista moc cyfr musi zaczynać się od 2.
Chociaż błąd (
((1-sqrt(5))/2)^n
warunki) może narastać, nigdy nie przekracza 0,5, więc sztuczka zaokrąglania działa do nieskończoności. Matematycznie:źródło
MathGolf ,
86 bajtówWypróbuj online!
Wyjaśnienie
Zapisano 1 bajt dzięki JoKing i kolejny bajt dzięki zamówieniu LSB.
źródło
05AB1E ,
1198 bajtówWypróbuj online!
Wyjaśnienie:
źródło
Θ
.1
jest prawdą już w 05AB1E. :) Również2+
możnaÌ
.Python 3 , 63 bajty
Wypróbuj online!
Pobiera dane wejściowe przez STDIN jako ciąg.
źródło
Czerwony ,
142, 126106 bajtówWypróbuj online!
źródło
Rubin , 39 bajtów
Wypróbuj online!
źródło
Stax , 6 bajtów
Uruchom i debuguj
Całkiem prosto. Zamawianie LSB.
źródło
Brain-Flak , 40 bajtów
Wypróbuj online!
źródło
C (gcc) , 63 bajty
Pobiera dane wejściowe jako tablicę
1
„i0
” wraz z długością tablicy. To rozwiązanie jest raczej prostą pętlą wsteczną.Wypróbuj online!
źródło
Prolog (SWI) , 74 bajty
Wypróbuj online!
Pobiera dane wejściowe jako listę liczb całkowitych 1 i 0 z najbardziej znaczącym bitem na początku.
źródło
Retina 0.8.2 , 23 bajty
Wypróbuj online! Link zawiera szybsze przypadki testowe. Wyjaśnienie:
Wstaw wszędzie separatory i usuń zera. Na przykład
1001
staje się;1;;;1;
.Każdorazowo zamień
1
je na „a”1
w każdym z dwóch następnych miejsc, ponieważ suma ich wartości jest równa wartości oryginału1
.1
s migrują i kumulują się, dopóki nie dotrą do dwóch ostatnich miejsc, które (ze względu na nowo dodany separator) mają teraz wartość1
.Policz
1
s.źródło
Japt
-x
, 9 bajtówSpróbuj
źródło
JavaScript (Node.js) , 41 bajtów
Port odpowiedzi xnora . Pobiera dane wejściowe jako literał BigInt.
Wypróbuj online!
JavaScript (ES6), 44 bajty
Pobiera dane wejściowe jako tablicę znaków w pierwszej kolejności LSB.
Wypróbuj online!
źródło
Właściwie 8 bajtów
Wypróbuj online!
Dane wejściowe są traktowane jako lista bitów w pierwszej kolejności LSB.
Wyjaśnienie:
źródło
PowerShell, 68 bajtów
Skrypt testowy:
Wynik:
źródło
Java (OpenJDK 8) , 65 bajtów
Dość mała jak na odpowiedź Javy. Jestem z tego zadowolony. Pobiera dane wejściowe jako najpierw uporządkowaną tablicę ints LSB.
Wypróbuj online!
Nie golfił
źródło
Z80Golf , 34 bajty
Przykład z wejściem 1001 - Wypróbuj online!
Przykład z wejściem 100101000-Wypróbuj online!
Montaż:
źródło