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.