Niektórzy z was mogą być zaznajomieni z BigNum Bakeoff , który skończył całkiem ciekawie. Cel można mniej więcej podsumować jako napisanie programu w C, którego wynik byłby największy, przy pewnych ograniczeniach i warunkach teoretycznych, np. Komputer, który mógłby uruchomić program.
W tym samym duchu stawiam podobne wyzwanie otwarte na wszystkie języki. Warunki są następujące:
Maksymalnie 512 bajtów .
Ostateczny wynik należy wydrukować na STDOUT. To jest twój wynik. Jeśli wydrukowanych zostanie wiele liczb całkowitych, zostaną one połączone.
Dane wyjściowe muszą być liczbą całkowitą. (Uwaga: Infinity nie jest liczbą całkowitą .)
Brak wbudowanych stałych większych niż 10, ale cyfry / cyfry są w porządku (np. Stała Avogadro (jako stała wbudowana) jest niepoprawna, ale 10000 nie.)
Program musi zostać zakończony, gdy zostaną udostępnione wystarczające zasoby do uruchomienia.
Wydruk musi być deterministyczny, jeśli zapewnia wystarczające zasoby do uruchomienia.
Masz wystarczająco duże liczby całkowite lub duże, aby Twój program mógł działać. Na przykład, jeśli Twój program wymaga zastosowania podstawowych operacji na liczbach mniejszych niż 10 1 000 000 , możesz założyć, że uruchomiony komputer może obsłużyć liczby co najmniej do 10 1 000 000 . (Uwaga: Twój program może być również uruchomiony na komputerze, który obsługuje liczby do 10 2 000 000 , więc po prostu wywołanie maksymalnej liczby całkowitej, którą komputer może obsłużyć, nie da wyników deterministycznych).
Masz wystarczającą moc obliczeniową, aby Twój program mógł zakończyć działanie w mniej niż 5 sekund. (Więc nie martw się, jeśli Twój program działa przez godzinę na twoim komputerze i nie zakończy się w najbliższym czasie.)
Brak zewnętrznych zasobów, więc nie myśl o zaimportowaniu tej funkcji Ackermann, chyba że jest ona wbudowana.
Wszystkie magiczne przedmioty są tymczasowo pożyczane od hojnego bóstwa.
Niezwykle duży z nieznanym limitem
- Steven H , Pyth f 3 + B³F + ω² (256 26 )
gdzie B³F jest porządkiem kościelno-kleeńskim z podstawową sekwencją
B³F[n] = B³F(n), the Busy Beaver BrainF*** variant
B³F[x] = x, ω ≤ x < B³F
Tabela liderów:
Po prostu piękna sztuka , Rubinowy f ψ 0 (X (Ω M + X (Ω M + 1 Ω M + 1 ) )) + 29 (9 9 9 )
Steven H , Pyth f ψ (Ω Ω ) + ω² + 183 (256 27! )
Leaky Nun , Python 3 f ε 0 (9 9 9 )
fejfo , Python 3 f ω ω 6 (f ω ω 5 (9e999))
Steven H , Python 3 f ω ω + ω² (9 9 9 99 )
Simply Beautiful Art , Ruby f ω + 35 (9 9 99 )
i .. , Python 2 , f 3 (f 3 (141))
Niektóre uwagi dodatkowe:
Jeśli nie możemy zweryfikować twojego wyniku, nie możemy umieścić go na tablicy wyników. Możesz więc spodziewać się trochę wyjaśnienia swojego programu.
Podobnie, jeśli nie rozumiesz, jak duża jest twoja liczba, wyjaśnij swój program, a my postaramy się to wypracować.
Jeśli używasz programu typu Loader , umieszczę cię w osobnej kategorii o nazwie „Bardzo duży z nieznanym limitem” , ponieważ liczba Loadera nie ma nietrywialnej górnej granicy pod względem szybko rosnącej hierarchii dla „ standardowe sekwencje podstawowe.
Liczby będą sortowane według szybko rosnącej hierarchii .
Dla tych, którzy chcieliby się nauczyć, jak używać szybko rosnącej hierarchii do przybliżania naprawdę dużych liczb, udostępniam właśnie serwer Discord . Istnieje również pokój rozmów: porządek .
Podobne wyzwania:
Największy numer do wydrukowania
Golf liczba większa niż DRZEWO (3)
Najkrótszy kończący program, którego rozmiar wyjściowy przekracza liczbę Grahama
Dla tych, którzy chcą zobaczyć proste programy, które generują szybko rosnącą hierarchię małych wartości, oto one:
Ruby: szybko rosnąca hierarchia
#f_0:
f=->n{n+=1}
#f_1:
f=->n{n.times{n+=1};n}
#f_2:
f=->n{n.times{n.times{n+=1}};n}
#f_3:
f=->n{n.times{n.times{n.times{n+=1}}};n}
#f_ω:
f=->n{eval("n.times{"*n+"n+=1"+"}"*n);n}
#f_(ω+1):
f=->n{n.times{eval("n.times{"*n+"n+=1"+"}"*n)};n}
#f_(ω+2):
f=->n{n.times{n.times{eval("n.times{"*n+"n+=1"+"}"*n)}};n}
#f_(ω+3):
f=->n{n.times{n.times{n.times{eval("n.times{"*n+"n+=1"+"}"*n)}}};n}
#f_(ω∙2) = f_(ω+ω):
f=->n{eval("n.times{"*n+"eval(\"n.times{\"*n+\"n+=1\"+\"}\"*n)"+"}"*n);n}
itp.
Aby przejść od f_x
do f_(x+1)
, dodajemy jedną pętlę n.times{...}
.
W przeciwnym razie przekątnie w stosunku do wszystkich poprzednich, np
f_ω(1) = f_1(1)
f_ω(2) = f_2(2)
f_ω(3) = f_3(3)
f_(ω+ω)(1) = f_(ω+1)(1)
f_(ω+ω)(2) = f_(ω+2)(2)
f_(ω+ω)(3) = f_(ω+3)(3)
itp.
źródło
Odpowiedzi:
Rubinowy, f ψ 0 (X (Ω M + X (Ω M + 1 Ω M + 1 ) )) + 29 (9 9 9 )
gdzie M jest pierwszą „porządkową” Mahlo, X jest funkcją chi (funkcja zwijania Mahlo), a ψ jest zwykłą funkcją zwijania.
Wypróbuj online!
Podział kodu:
Podział matematyki:
f
zmniejszaa
na podstawien,b,q
.Podstawową ideą jest ekstremalnie zagnieżdżone
a
i zmniejszanie go wielokrotnie, aż zmniejszy się doa=0
. Dla uproszczenia pozwólNa razie martwmy się tylko
n
.Dla dowolnej liczby całkowitej
k
otrzymujemyf[k,n]=k-1
, więc możemy to zobaczyćMamy wówczas, dla każdego
d
,f[[0,d],n]=n
abyśmy mogli to zobaczyćMamy wówczas, dla każdego
c,d,e
,f[[c,0,e],n]=f[[c,d,0],n]=c
. Na przykład,Mamy zatem, dla każdego
c,d,e
takiego, że nie mieści się w poprzednim przypadku,f[[c,d,e],n]=[[c,d,f[e,n]],f[d,n],e]
. Tu zaczyna się komplikować. Kilka przykładów:Stamtąd szybko rośnie. Niektóre interesujące miejsca:
Ostatecznie wprowadzenie większej liczby argumentów
f
funkcji oraz większej liczby przypadków dla tablicy pozwala nam przekroczyć większość nazwanych notacji obliczalnych. Niektóre szczególnie znane:źródło
Pyth, f ψ (Ω Ω ) + ω 2 +183 (~ 256 27! )
Wymaga niepustych danych wejściowych, ale ich wartość nie jest używana.
Objaśnienie (dla nowej wersji, która ma właściwie punktację ):
Bardzo trudno jest mi obliczyć wielkość tego, głównie dlatego,
że jest późno i nie jestem zbyt dobrze zaznajomiony z szybko rozwijającymi się hierarchiami lub w jaki sposób spróbuję dowiedzieć się, ile razy Q przechodzi przezChociaż teraz wiem więcej o porządkach, wciąż nie mam pojęcia, jak obliczyć wartość porządku reprezentowanego przez definicję rekurencyjną w moim programie. Przyłączę się do serwera Discord, ale pod pseudonimem wolałbym nie być powiązany z moim prawdziwym imieniem.y()
wyżymaczka.Niestety, ponieważ stosunkowo mało wiem o szybko rozwijających się hierarchiach, prawdopodobnie już przegrałem z odpowiedzią Ruby. Trudno mi powiedzieć.Być może pokonałem Rubinową odpowiedź, ale nie jestem w 100% pewien.¯ \ _ (ツ) _ / ¯źródło
27^^^27^^27^^4
lubf<sub>4</sub>(27^^27^^4)) ≈ f<sub>4</sub>(f<sub>3</sub>(f<sub>3</sub>(19)))
.y
do działaniay(Q-1)
zamiast działania po prostuQ
. Jak to wpływa na wynik?y(Q) = L(y(Q-1))
per se?Pyth, f 3 + σ -1 + ω 2 (256 26 )
Gdzie σ m [n] jest funkcją Busy Beaver Σ rzędu
m
wywoływanegon
: σ m [n] = Σ m (n). Porządek-1
polega na tym, że tutaj Busy Beaver nie jest wywoływany na prawdziwej maszynie Turinga, a raczej w przybliżeniu za pomocą skończonej taśmy owijającejQ
elementy. Pozwala to rozwiązać problem zatrzymania w tych programach.TL; DR polega na tym, że tworzy to wszystkie możliwe programy BrainF ** k o długości Q, uruchamia je w środowisku, w którym maksymalna wartość liczby całkowitej wynosi Q, a długość taśmy wynosi Q, i kompiluje wszystkie stany z tych operacji razem do dołącz (to jest
3+
) do Q, powtarzając powyższe w skali f ω 2 .Wciąż mam ~ połowę postaci, z którymi chciałbym pracować, jeśli chcę zrobić coś więcej, ale dopóki nie dowiemy się, gdzie to jest, zostawię to tak, jak jest.
źródło
python, f 3 (f 3 (141)), 512 bajtów
To naprawdę nie jest poprawna odpowiedź, ale i tak chciałem ją opublikować. Szybkie podsumowanie:
W każdym razie nie wiem, czy ta odpowiedź jest technicznie zgodna z prawem, ale pisanie było fajne. Edytuj wszelkie błędy znalezione w kodzie.
źródło
for j in range(f(x)): for j in range(f(x)): x = f(x)
Jednak nawet zagnieżdżając , można uzyskać znacznie większą liczbę . Dołącz do nas na czacie, aby omówić dlaczego!Ruby, prawdopodobnie ~ f ω + 35 (9 9 99 )
Wypróbuj online!
Przybliżone objaśnienie matematyczne:
Poniżej jest w przybliżeniu równy powyższemu programowi, ale jest uproszczony, aby był łatwiejszy do zrozumienia.
G(0,k) = k
jest naszą podstawową funkcją.Aby to ocenić
G(n,k)
, bierzemyk
i piszemy jakoG(n-1,1) + ... + G(n-2,1) + ... + G(0,1)
.Następnie zmień wszystkie
G(x,1)
„naG(x,2)
” i odejmij1
od całego wyniku.Przepisz go w powyższej formie, używając
G(x,2)
, gdziex<n
i pozostaw resztę na końcu. Powtórz, zmieńG(x,2)
naG(x,3)
itp.Gdy wynik osiągnie
-1
, zwróć bazę (b
która byłaby wG(x,b)
.)Przykłady:
G (1,1):
G (1,2):
G (1,3):
G (2,5):
Robiąc matematykę, znalazłem to
Poza tym robi się trochę owłosiony.
Ogólnie mamy
źródło
Python 3, f ω ω + ω * ω (9 9 9 99 )
Wkrótce otrzymam wyjaśnienie.
źródło
Python 3 , ~ f ε 0 (9 9 9 )
Wypróbuj online!
źródło
Python 3, 323 bajty, g 9e9 (9)
Wypróbuj online!
Wyjaśnienie
Python 3 jest naprawdę rekurencyjnym językiem, co oznacza, że nie tylko samo wywołanie funkcji może pełnić inne funkcje jako funkcje wejściowe lub wyjściowe. Używanie funkcji do ulepszania się jest tym, na czym opiera się mój program.
f = lambda x, a: [a (x), e (x) ((x, a)) [1]]
Definicja
Definicja wyjaśniona
a(x)=9^x
a jest funkcją podstawową, wybrałem tę funkcję, ponieważ x> 0 => a (x)> x`, która pozwala uniknąć punktów stałych.b(x,f)=a(x), f^x
b jest ogólną funkcją ulepszającą, przyjmuje dowolną funkcję i generuje lepszą wersję. b można nawet zastosować do siebie:b(x,b)[1]=b^x
b(x,b^x)[1]=b^(x*x)
ale aby w pełni wykorzystać moc
b
ulepszaniab
, musisz wziąć wynik b i użyć go jako nowego b, to właśnie robi c0:c0(…,f)=f(…,f)
c0(x,b^x)=b^x(x,b^x)[1]>b^(9↑↑x)
bardziej ogólna funkcja c (n) przyjmuje n ostatni argument (zaczynając od 0) tak
c(1)(…,f,a)=f(…,f,a)
ic(2)(…,f,a,b)=f(…,f,a,b)
.*l
oznacza, że l jest tablicą il[~n]
przyjmuje n ostatni argumentd(x,b,c,*l)=a(x), c0(x,b), b(x,c0), b(x,f) for f in l
d używa c0 do aktualizacji b i b do aktualizacji wszystkich innych funkcji wejściowych (których może być dowolna ilość z powodu listy)d(x,b,c,d)>9^x,b^x,c^x,d^x
id²(x,b,c,d)>a²(x), b^(9↑↑x), c^(9↑↑x), d^(9↑↑x)
ale d staje się jeszcze lepszy, jeśli połączysz go z c:
c0²(x,b,c0,d)=d^x(9^x,b^x,c0^x,d^x)=…
c0(x,b,c0,d,c1)=c1(x,b,c0,d,c1)=d(x,b,c0,d,c1)=9^x,b^x,c0^x,d^x,c1^x
c0²(x,b,c0,d,c1)=c0(9^x,b^x,c0^x,d^x,c1^x)=c1^x(9^x,b^x,c0^x,d^x,c1^x)=…
im więcej c (x) dodasz na końcu, tym bardziej staje się ono potężne. Pierwsze c0 zawsze pozostaje d:
c0(x,b,c0,d,c4,c3,c2,c1)=c1(…)=c2(…)=c3(…)=c4(…)=d(x,b,c0,d,cX,cX-1,…,c3,c2,c1)=…
Ale drugie pozostawia wersje iterowane:
Kiedy
d^x
zostanie ostatecznie obliczony, następnym razemc4
zajmie dużo więcej iterowanej wersjid
. Kiedyc4^x
zostanie ostatecznie obliczonec3
, zajmie dużo bardziej iterowaną wersjęc4
…To tworzy naprawdę potężną wersję iteracji, ponieważ
d
:b
użyciec0
c0
użycieb
b
Ulepszenia same się poprawiają, co oznacza, że d staje się silniejszy, gdy jest iterowany więcej.Tworzenie tego długiego łańcucha c jest tym, co
e(x)=c0^x(x,b,c0,d,c(a(x)),c(a(x)-1),c(a(x)-2),…,c(3),c(2),c(1))[1]
robi.Wykorzystuje się
c0^x
do ominięcia,c0
które po prostu dałobyd
.Te
[1]
środki, które będą ostatecznie powrócić Drugie wyjścied^…
. Takb^…
.W tym momencie nie mogłem wymyślić nic wspólnego z e (x), aby znacznie zwiększyć jego moc wyjściową, z wyjątkiem zwiększenia nakładów.
f(x,a)=a(x),e(a(x))(x,a)[1](x)
Używa więcb^…
wygenerowanego przez,e(x)
aby wyprowadzić lepszą funkcję podstawową i wykorzystuje tę funkcję podstawową do wywołaniae(x)
z większym wejściem.g(x)=e(x)(x,f)[1](x,a)[1](x)
używa finałue(x)
do zagnieżdżeniaf
i tworzy naprawdę potężną funkcję.Przybliżenie Fgh
Będę potrzebować pomocy w przybliżeniu tej liczby za pomocą dowolnego fgh.
Stara wersja : f ω ω 6 (f ω ω 5 (9e999)), Wypróbuj online! Historia zmian wyjaśnienia
źródło
f_1(x) = x+x
ale na dłuższą metę nie ma to większego znaczenia.x*x
.a2(f_n)~=f_{n+1}
Rubinowy, f ε 0 2 (5), 271 bajtów
Wypróbuj online!
Jest to oparte na mapie m (n) .
Wyjaśnienie:
m[0][f0][k] = f0[f0[...f0[k]...]]
zk
iteracjamif0
.m[1][f0][f1][k] = f0[f0[...f0[f1]...]][k]
zk
iteracjamif0
.m[2][f0][f1][f2][k] = f0[f0[...f0[f1]...]][f2][k]
zk
iteracjamif0
.Generalnie,
m[n]
przyjmuje sięn+2
argumentów iteracje pierwszego argumentuf0
,k
razy na drugim argumencie, a następnie stosuje się wynik funkcji na trzecim argumencie (jeśli istnieje), a następnie stosuje się wynik funkcji na czwartego argumentu (jeśli istnieje), itp.Przykłady
m[0][n↦n+1][3] = (((3+1)+1)+1 = 6
Na ogół
m[0][n↦n+1] = n↦2n
.m[0][m[0][n↦n+1]][3] = m[0][n↦2n][3] = 2(2(2(3))) = 24
Na ogół
m[0][m[0][n↦n+1]] = n↦n*2^n
.Ogólnie
m[1][m[0]][n↦n+1] = f_ω
w szybko rosnącej hierarchii.i końcowy wynik jest
źródło