(To może być dość klasyczny, ale to mój pierwszy post tutaj, więc nie jestem jeszcze gotowy na fantazyjne rzeczy)
Sekwencja Goodstein jest zdefiniowany numer wejścia w następujący sposób:
Wybierz liczbę początkową n , niech b = 2 i powtórz:
- napisz nw heriditarnej notacji b
- zastąpić wszystkich ( b ) s do ( b + 1) jest w n i odejmowanie 1
- wyprowadza nową ocenę dziesiętną n
- przyrost b
Notacja dziedziczna Podstawa to rozkład liczby, w której podstawą jest większa liczba, która się pojawi. Przykłady:
83
w HB3:3^(3+1)+2
226
w HB2:2^(2^(2+1))+2^(2+1)+2
Sekwencje Goodsteina zawsze kończą się na 0 , ale zwykle stają się dość duże dość szybko, więc nie jest wymagane podanie pełnej sekwencji.
Zadanie:
Biorąc pod uwagę liczbę wejściową w dowolnym rozsądnym formacie, Twoim zadaniem jest wyprowadzenie sekwencji Goodsteina dla tej liczby przynajmniej do osiągnięcia 10 ^ 25 lub 0
Przykłady:
Input: 3
Output: 3, 3, 3, 2, 1, 0
Input: 13
Output: 13, 108, 1279, 16092, 280711, 5765998, 134219479, 3486786855, 100000003325, 3138428381103, 106993205384715, 3937376385706415, 155568095557821073, 6568408355712901455, 295147905179352838943, 14063084452067725006646, 708235345355337676376131, 37589973457545958193377292
Input: 38
Output: 38, 22876792454990
Detale:
- Numer wejściowy może być tablicą, łańcuchem, liczbą całkowitą, o ile jest podana w postaci dziesiętnej
- Dane wyjściowe podlegają tej samej zasadzie
- Rozdzielenie terminów w danych wyjściowych może być spacjami, znakami nowej linii lub dowolną rozsądną separacją
- Gdy tylko sekwencja stanie się większa niż 10 ^ 25, twój program może wyjść normalnie, zgłosić błąd / wyjątek lub kontynuować (bez ograniczeń)
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź (w bajtach)
- Oczywiście standardowe luki są zabronione
- Python nie działający przykład działania tutaj
int(q/base.b), q%base.b
należyq//base.b, q%base.b
(lub po prostudivmod(q, base.b)
), aby uniknąć błędów zmiennoprzecinkowych.Odpowiedzi:
Pyth ,
2826 bajtówKońcowy znak nowej linii jest znaczący.
Wypróbuj online!(Ten link zawiera dodatkowe
Q
niepotrzebne w obecnej wersji Pyth.)Jak to działa
Ważne jest, aby na
y
nowo zdefiniować w każdej iteracji pętli, aby zapobiec zapamiętywaniu zmian w zmiennej globalnejJ
.źródło
Haskell , 77 bajtów
(&2)
jest anonimową funkcją pobierającąInteger
i zwracającą (potencjalnie bardzo długą) listęInteger
s, użyj jako(&2) 13
.Wypróbuj online!(ucina o
10^25
.)Jak to działa
(&2)
rozpoczyna sekwencję od zasady2
.n&b
oblicza podsekwencję zaczynając od liczbyn
i podstawyb
.n<0
, co zwykle dzieje się w następnym krokun==0
.n
listę zwracaną rekurencyjnie przez wyrażenie(0?n-1)&(b+1)
.?
jest operatorem funkcji lokalnej.0?n
daje wynik konwersjin
na bazę dziedzicznąb
, a następnie przyrost bazy wszędzie.e
bieżący wykładnik potęgi.e?n
konwertuje liczbęn*b^e
.0
kiedyn==0
.n
przez podstawęb
.(e+1)?div n b
obsługuje rekurencję dla ilorazu i następnego wyższego wykładnika.mod n b*(b+1)^0?e
obsługuje resztę (czyli cyfrę odpowiadającą bieżącemu wykładnikowie
), przyrost podstawy i przeliczanie bieżącego wykładnika dziedzicznie0?e
.źródło