Twoim celem jest napisanie programu, który wypisze liczbę. Im większa liczba, tym więcej punktów otrzymasz. Ale bądź ostrożny! Długość kodu jest zarówno ograniczona, jak i ważona w funkcji oceniania. Twój wydrukowany numer zostanie podzielony przez sześcian liczby bajtów użytych do rozwiązania .
Powiedzmy, że wydrukowałeś, 10000000
a twój kod ma 100
długość bajtów. Twój końcowy wynik to 10000000 / 100^3 = 10
.
Aby uczynić to wyzwanie nieco trudniejszym, należy przestrzegać innych zasad.
- Nie możesz używać cyfr w swoim kodzie (0123456789);
- Państwo może używać matematyczne / fizyczne / etc. stałe, ale tylko jeśli są mniejsze niż 10. (np. Możesz użyć Pi ~ = 3,14, ale nie możesz użyć stałej Avogadro = 6e23)
- Rekurencja jest dozwolona, ale wygenerowana liczba musi być skończona (więc nieskończoność nie jest akceptowana jako rozwiązanie. Twój program musi zakończyć się poprawnie, przy założeniu nieograniczonego czasu i pamięci oraz wygenerować żądany wynik);
- Nie można używać operacji
*
(mnożenie),/
(dzielenie),^
(moc) ani w żaden inny sposób do ich wskazania (np.2 div 2
Nie jest dozwolone); - Twój program może wypisać więcej niż jedną liczbę, jeśli jest to potrzebne . Tylko najwyższy będzie liczył się do punktacji;
- Można jednak łączyć łańcuchy: oznacza to, że każda sekwencja sąsiadujących cyfr będzie traktowana jako pojedyncza liczba;
- Twój kod będzie działał bez zmian. Oznacza to, że użytkownik końcowy nie może edytować żadnego wiersza kodu ani nie może wprowadzić liczby ani niczego innego;
- Maksymalna długość kodu wynosi 100 bajtów.
Tabela liderów
- Steven H. , Pyth ≈ f φ (1,0,0) +7 (256 26 ) / 1000000 [1]
- Simply Beautiful Art , Ruby ≈ f φ 121 (ω) (126) [1]
- Peter Taylor , GolfScript ≈ f ε 0 + ω + 1 (17) / 1000 [1]
- res , GolfScript ≈ f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (126)))))))) [1]
- Simply Beautiful Art , Ruby ≈ f ω ω2 +1 (1983)
- eaglgenes101 , Julia ≈ f ω3 (127)
- col6y , Python 3, ≈ (127 → 126 → ... → 2 → 1) / 99 3 [1] [3]
- Toeofdoom Haskell, ≈ 20 (1) / 99 3 [1]
- Fraxtil , dc, ≈ 15 ↑ ¹⁶⁶⁶⁶⁶⁵ 15/100 3 [3]
- Magenta , Python, (ack (126 126) / 100 3 ≈ 10 ↑ 124 129
- Kendall Frey , ECMAScript 6 ≈ 10 3 ↑ 4 3 /100 3 [1]
- Ilmari Karonen , GolfScript, ≈ 10 ↑ 3 10 377 /18 3 [1]
- BlackCap , Haskell, ≈ 10 ↑↑ 65503/100 3
- rekurencyjny , Python, ≈ 2↑↑ 11/95 3 ≈ 10 ↑↑ 8.63297 [1] [3]
- nm , Haskell, ≈ 2↑↑ 7/100 3 ≈ 10 ↑↑ 4.63297 [1]
- David odchylenia , C ≈ 10 10 4 X 10 22 /83 3 ≈ 10 ↑↑ 4,11821 [2]
- Primo , Perl ≈ 10 (12750684161!) 5 x 2 27 /100 3 ≈ 10 ↑↑ 4,11369
- Sztuki , C ≈ 10 10 2 x 10 6 /98 3 ≈ 10 ↑↑ 3,80587
- Robert Sørlie , x86, ≈ 10 2 2 19 +32 / 100 3 ≈ 10 ↑↑ 3,71585
- Tobia , APL ≈ 10 10 353 /100 3 ≈ 10 ↑↑ 3,40616
- Darren Stone , C, ≈ 10 10 97,61735 / 98 3 ≈ 10 ↑↑ 3.29875
- ecksemmess , C ≈ 10 2 320 /100 3 ≈ 10 ↑↑ 3,29749
- Adam Speight , vb.net, ≈ 10 5000 x (2 64 ) 4 /100 3 ≈ 10 ↑↑ 3,28039
- Joshua , bash, ≈ 10 10 15 /86 3 ≈ 10 ↑↑ 3,07282
Przypisy
- Gdyby każdy elektron we wszechświecie był kubitem, a każda jego superpozycja mogłaby być z korzyścią wykorzystywana do przechowywania informacji (co, o ile tak naprawdę nie trzeba wiedzieć, co jest przechowywane, jest teoretycznie możliwe), program ten wymaga więcej pamięci niż mógłby być może istnieją i dlatego nie można ich uruchomić - teraz ani w żadnym możliwym punkcie w przyszłości. Jeśli autor zamierzał wydrukować wartość większą niż ↑3 ↑↑ 3.28 jednocześnie, warunek ten ma zastosowanie.
- Ten program wymaga więcej pamięci niż obecnie, ale nie tak bardzo, że teoretycznie nie mógłby być przechowywany na skąpej liczbie kubitów, dlatego też może kiedyś istnieć komputer, który mógłby uruchomić ten program.
- Wszyscy obecnie dostępni tłumacze zgłaszają błąd w czasie wykonywania lub program nie działa inaczej, jak zamierzał autor.
- Uruchomienie tego programu spowoduje nieodwracalne uszkodzenie systemu.
Edytuj @primo : Zaktualizowałem część tablicy wyników, używając, mam nadzieję, łatwiejszego do porównania zapisu, z ułamkami dziesiętnymi, które oznaczają logarytmiczną odległość do następnej wyższej mocy. Na przykład 10 ↑↑ 2,5 = 10 10 √10 . Zmieniłem również niektóre wyniki, jeśli uważałem, że analiza użytkownika jest wadliwa, możesz zakwestionować którąkolwiek z nich.
Objaśnienie tego zapisu:
Jeśli 0 ≤ b < 1
tak .a↑↑b = ab
Jeśli b ≥ 1
tak .a↑↑b = aa↑↑(b-1)
Jeśli b < 0
tak .a↑↑b = loga(a↑↑(b+1))
12e10
(12 * 10 ^ 10) jako12*10^10
?500b
, czy to jest nieprawidłowe? To znaczy, czy możemy zignorować wszystkie nienumeryczne rzeczy drukowane przez program? A jeśli tak, czy coś takiego może się50r7
liczyć507
?Odpowiedzi:
GolfScript; ocena co najmniej f ε_0 + ω + 1 (17) / 1000
Zgodnie z sugestią Res , aby użyć odpowiedzi Lifetime robaka na to pytanie, przedstawiam dwa programy, które znacznie poprawiły jego pochodzenie rozwiązania Howarda.
Dzielą wspólny przedrostek, modulo nazwę funkcji:
oblicza,
g(g(1)) = g(5)
gdzieg(x) = worm_lifetime(x, [x])
rośnie w przybliżeniu jako f ε 0 (co oznacza, że „funkcja w szybko rosnącej hierarchii, która rośnie mniej więcej w tym samym tempie, co funkcja Goodsteina”).Nieco łatwiej (!) Do analizy jest
.{foo}*
mapyx
dofoo^x x
.w ten sposób daje
g^(g(5)) ( g(5) )
; kolejne 8 poziomów iteracji jest podobne do tworzenia łańcuchów strzałek. Wyrażając się w prosty sposób: czyh_0 = g
ih_{i+1} (x) = h_i^x (x)
wtedy obliczamyh_10 (g(5))
.Myślę, że ten drugi program prawie na pewno osiąga znacznie lepsze wyniki. Tym razem etykieta przypisana do funkcji
g
jest znakiem nowej linii (sic).Tym razem lepiej wykorzystam
^
jako inną funkcję.bierze
x
stos i opuszczax
ciąg zawierającyx
kopie,.{
ag
następniex
kopie}*
; następnie ocenia ciąg. Ponieważ miałem lepsze miejsce do wypalania zapasowych postaci, zaczynamy odj_0 = g
; jeślij_{i+1} (x) = j_i^x (x)
to pierwsza ocena^
obliczeńj_{g(5)} (g(5))
(co jestem prawie pewien, że już wygrywa z poprzednim programem). Następnie wykonuję jeszcze^
16 razy; więc jeślik_0 = g(5)
ik_{i+1} = j_{k_i} (k_i)
to się liczyk_17
. Jestem wdzięczny (ponownie) res za oszacowanie tegok_i
>> f ε_0 + ω + 1 (i).źródło
.{foo}*
mapyx
dofoo^x (x)
. Jeśli weźmiemy pod uwagęh_0 (x) = g^4 (x)
, ah_{i+1} (x) = h_i^x (x)
następnie obliczana jest wartośćh_9 (g(3))
. Twójf(x) = g^(4x) (x) = h_0^x (x) = h_1 (x)
.*
działa. Można śmiało powiedzieć, że h_0 (x) = g ^ 4 (x) >> f_eps_0 (x); w konsekwencji relacja h_ {i + 1} (x) = h_i ^ x (x) skutecznie definiuje „przyspieszoną” szybko rosnącą hierarchię taką, że h_i (x) >> f_ (eps_0 + i) (x). To znaczy, obliczona liczba h_9 (g (3)) jest z pewnością znacznie większa niż f_ (eps_0 + 9) (g (3)). Jeśli chodzi o g (3), myślę, że mogę pokazać, że jest większa niż g_4, czwarta liczba w sekwencji g_i użyta do zdefiniowania liczby Grahama (czyli g_64).j_i ~ f_{eps_0 + i}
; czy to czynik_i ~ f_{eps_0 + i omega + i^2}
?k_i ~ f_{ε_0 + ω}^i (k_0)
. Oto uzasadnienie: k_ {i + 1} = j_ {k_i} (k_i) = j_ω (k_i) ~ f_ {ε_0 + ω} (k_i) ~ f_ {ε_0 + ω} ^ 2 (k_ {i-1}) ... ~ f_ {ε_0 + ω} ^ {i + 1} (k_0), więc k_i ~ f_ {ε_0 + ω} ^ i (k_0). Jest wtedy bardzo konserwatywna dolna granica k_i, całkowicie pod względem szybko rosnącej hierarchiik_i >> f_{ε_0 + ω}^i (i) = f_{ε_0 + ω + 1} (i)
.Windows 2000 - Windows 8 (3907172 / 23³ = 321)
UWAGA: NIE URUCHAMIAJ TEGO!
Zapisz następujące elementy w pliku wsadowym i uruchom go jako Administrator.
Wyjście jest uruchamiane na napędzie 4 TB z pierwszym wydrukowanym numerem pogrubionym drukiem.
źródło
Your printed number will be divided for the number of bytes you used for your solution^3.
GolfScript, wynik: droga zbyt dużo
OK, jak dużą liczbę możemy wydrukować w kilku znakach GolfScript?
Zacznijmy od następującego kodu ( dzięki, Ben! ), Który drukuje
126
:Następnie powtórzmy to 126 razy, dając nam liczbę równą około 1,26126 × 10 377 :
(To powtarzanie ciągów, a nie mnożenie, więc zgodnie z zasadami powinno być OK.)
Powtórzmy teraz tę 378-cyfrową liczbę nieco ponad 10 377 razy:
Nigdy nie zobaczysz zakończenia tego programu, ponieważ próbuje on obliczyć liczbę z około 10 380 ≈ 2 1140 cyfr. Żaden komputer, który kiedykolwiek zbudowano, nie byłby w stanie pomieścić tak dużej liczby, ani taki komputer nigdy nie mógłby zostać zbudowany przy użyciu znanej fizyki; liczba atomów w obserwowalnego Wszechświata szacuje się na około 10 80 , więc nawet jeśli moglibyśmy jakoś wykorzystać całą materię we Wszechświecie przechowywać tę ogromną liczbę, byśmy nadal jakoś trzeba napełnić około 10 380 /10 80 = 10 300 cyfr w każdym atomie!
Załóżmy jednak, że mamy własnego Boskiego interpretera GolfScript, który jest w stanie przeprowadzić takie obliczenia i że nadal nie jesteśmy zadowoleni. OK, zróbmy to jeszcze raz!
Dane wyjściowe tego programu, jeśli mogłyby zostać ukończone, miałyby około 10 10 383 cyfr, a więc byłyby równe około 10 10 10 383 .
Ale poczekaj! Ten program zaczyna się powtarzać ... dlaczego nie zmienimy go w pętlę?
Tutaj ciało pętli biegnie około 10 377 razy, dając nam teoretyczny wynik składający się z około 10 10⋰ 10 377 cyfr lub więcej, gdzie wieża o iterowanych mocach 10 ma około 10 377 kroków. (W rzeczywistości jest to rażące niedoszacowanie, ponieważ zaniedbuję fakt, że powtarzana liczba również się wydłuża za każdym razem, ale mówiąc relatywnie rzecz biorąc, jest to niewielki problem.)
Ale jeszcze nie skończyliśmy. Dodajmy kolejną pętlę!
Nawet prawidłowe zapisanie przybliżenia takich liczb wymaga ezoterycznej notacji matematycznej. Na przykład, w notacji Knutha , liczba (teoretycznie) wynikająca z powyższego programu powinna wynosić około 10 ↑ 3 10 377 , dać lub wziąć kilka (lub 10 377 ) potęg dziesięciu, zakładając, że zrobiłem matematykę poprawnie.
Liczby takie jak ta przekraczają po prostu „niewiarygodnie ogromne” i wkraczają w sferę „niepojętych”. Podobnie jak w przypadku, nie tylko nie można policzyć ani zapisać takich liczb (przekroczyliśmy ten punkt już w trzecim przykładzie powyżej), ale dosłownie nie mają one żadnego możliwego zastosowania ani istnienia poza abstrakcyjną matematyką. Możemy udowodnić, z aksjomatów matematyki , że istnieją takie liczby, jak możemy udowodnić ze specyfikacji GolfScript tego programu ponad byłoby je obliczyć, jeśli granice rzeczywistości i dostępnej przestrzeni magazynowej nie interweniować), ale nie ma dosłownie nic w fizyczny wszechświat, którego moglibyśmy użyć do policzenia lub pomiaru w dowolnym sensie.
Mimo to matematycy czasami używają jeszcze większych liczb . (Teoretycznie) obliczanie tak dużych liczb wymaga nieco więcej pracy - zamiast po prostu zagnieżdżać więcej pętli jeden po drugim, musimy użyć rekurencji do teleskopowania głębokości zagnieżdżonych pętli. Jednak w zasadzie powinno być możliwe napisanie krótkiego programu GolfScript (spodziewałbym się, że poniżej 100 bajtów) (teoretycznie) obliczy dowolną liczbę możliwą do wyrażenia, powiedzmy, w notacji łańcuchowej Conwaya ; szczegóły pozostawia się jako ćwiczenie. ;-)
źródło
"...No computer ever built could store a number that big...
Popraw mnie, jeśli się mylę, ale nie sądzę, żeby miało to tutaj zastosowanie. Czy to nie tylko wielokrotne „przechowywanie” i drukowanie 3 cyfr na raz (?), Więc nie ma potrzeby przechowywania końcowego wyniku.JavaScript 44 znaki
To może wydawać się trochę oszukiwane:
alert((Math.PI+''+Math.E).replace(/\./g,""))
Wynik = 31415926535897932718281828459045/44 ^ 3 ≈ 3,688007904758867e + 26 ≈ 10 ↑↑ 2,1536134004
źródło
"."
zamiast/\./g
m=Math,p=m.PI,e=m.E,s="",alert((p*p*p+s+e*e*e).replace(/\./g,s))
zamiast tego zrobić , twój wynik to 3100627668029981620085536923187664/63 ^ 3 = 1,240017943838551e + 28C, wynik = 10 10 97,61735 / 98 3 ≈ 10 ↑↑ 2.29874984
Doceniam pomoc w punktacji. Wszelkie spostrzeżenia i poprawki są mile widziane. Oto moja metoda:
n = konkatenacja każdej liczby od 1 do 2 64 -1, powtórzona (2 64 -1) 4 razy . Po pierwsze, oto w jaki sposób szacuję (małą) łączną liczbę cyfr od 1 do 2 64 -1 („podsekwencja”): Ostateczna liczba w sekwencji podsekwencji wynosi 2 64 -1 =
18446744073709551615
z 20 cyframi. Tak więc ponad 90% liczb w podsekwencji (te zaczynające się od1
..9
) ma 19 cyfr. Załóżmy, że pozostałe 10% to średnio 10 cyfr. Będzie to znacznie więcej, ale jest to niska ocena dla łatwej matematyki i bez oszukiwania. Ta podsekwencja jest powtarzana (2 64 -1) 4 razy, więc długośćz n będzie wynosić co najmniej (0,9 × (2 64 -1) × 19 + 0,1 × (2 64 -1) × 10) × (2 64 -1) 4 = 3,86613 × 10 97 cyfr. W poniższych komentarzach @primo potwierdza, że n wynosi 4,1433x10 97 . Zatem n samo będzie miało 10 do tej potęgi, czyli 10 10 97,61735 .l = 98 znaków kodu
wynik = n / l 3 = 10 10 97,61735 / 98 3
Wymagania: Musi działać na komputerze 64-bitowym, gdzie
sizeof(long) == 8
. Mac i Linux to zrobią.źródło
'z'
jest wartością stałą122
. Dobrze?printf("%d",n)
że sprawi, że liczba będzie znacznie większa. Również 64-bitowy komputer nie oznacza 64-bitowych długości, na przykład Windows używa modelu LLP64, więc nadal ma 32 bity0..2^64-1
ma długość dokładnie 357823770363079921190 cyfr. Powtarzane(2^64-1)^4
czasy to 4,1433x10 ^ 97. Weź 10 do tej mocy is10^10^97.61735
10 ↑↑ 3.29875. Myślę, że żądasz mocy dziesięciu, której nie masz (zwróć uwagę, gdzie się3.866×10^97
stał3.866^10^97
.2.0
zamiast97
.10^10^10^2.00
=10^10^97.6
. Odzwierciedlę to teraz w moim wyniku.Python 3 - 99 znaków - (najprawdopodobniej) znacznie większy niż liczba Grahama
Wymyśliłem szybciej rosnącą funkcję opartą na rozszerzeniu funkcji Ackermanna.
Inspiruje mnie http://fora.xkcd.com/viewtopic.php?f=17&t=31598 , ale nie musisz tam szukać, aby zrozumieć mój numer.
Oto zmodyfikowana wersja funkcji ackermann, której będę używać w mojej analizie:
Moja funkcja
A
w powyższym kodzie nie jest technicznie taka sama, ale w rzeczywistości jest silniejsza, z następującą instrukcją zastępującą trzeci wiersz powyższej definicji:(a musi wynosić co najmniej 1, więc musi być silniejsze)
Ale dla moich celów założę, że jest taki sam jak ten prostszy, ponieważ analiza jest już częściowo wykonana dla funkcji Ackermanna, a zatem dla tej funkcji, gdy ma dwa argumenty.
Moja funkcja ostatecznie przestanie się powtarzać, ponieważ zawsze albo: usuwa argument, zmniejsza pierwszy argument, albo zachowuje ten sam pierwszy argument i zmniejsza drugi argument.
Analiza wielkości
Numer Grahama, AFAIK, można przedstawić jako
G(64)
:Gdzie
↑^(n)
b jest notacją Knutha skierowaną w górę.Także:
Liczba wyrażona w powyższym programie to
A(0,1,2,3,4,...,123,124,125)
.Ponieważ
g^64(4)
jest to liczba Grahama i przy założeniu, że moja matematyka jest poprawna, to jest mniejsza niżA(1,64,100)
, moja liczba jest znacznie większa niż liczba Grahama.Proszę wskazać wszelkie błędy w mojej matematyce - chociaż jeśli nie ma, powinna to być największa jak dotąd liczba obliczona, aby odpowiedzieć na to pytanie.
źródło
range(ord('~'))
? Czy nie mógłbyś zrobićrange(125)
dla mniejszej ilości bajtów, co pozwoliłoby ci wycisnąć większą liczbę jakrange(A(9,9,9))
?Perl - wynik ≈ 10 ↑↑ 4.1
Po raz kolejny nadużywam silnika wyrażeń regularnych Perla do mielenia niewyobrażalnej ilości kombinacji, tym razem przy użyciu rekurencyjnego zejścia.
W wewnętrznej części wyrażenia mamy dość,
.
aby zapobiec nieskończonej rekurencji, a tym samym ograniczyć poziomy rekurencji do długości łańcucha.Skończymy z tym:
... powtórzyłem 671088640 razy, w sumie 12750684161 zagnieżdżeń - co całkiem dokładnie zawstydza moją poprzednią próbę 23 zagnieżdżeń. Co dziwne, perl nawet się nie dusi (po raz kolejny zużycie pamięci utrzymuje się na stałym poziomie około 1,3 GB), chociaż upłynie sporo czasu, zanim wydane zostanie pierwsze polecenie wydruku.
Od mojej poprzedniej analizie poniżej, można stwierdzić, że liczba cyfr wyjściem będzie rzędu (! 12750684161) 671088640 , gdzie ! K jest Lewy Silnia z k (patrz A003422 ). Możemy to przybliżać jako (k-1)! , który jest ściśle mniejszy, ale tego samego rzędu wielkości.
A jeśli zapytamy wolframalpha :
... co ledwo zmienia mój wynik. Myślałem na pewno, że będzie to co najmniej 10 ↑↑ 5 . Myślę, że różnica między 10 ↑↑ 4 a 10 ↑↑ 4.1 jest znacznie większa, niż mogłoby się wydawać.
Perl - wynik ≈ 10 ↑↑ 4
Nadużywanie silnika wyrażeń regularnych Perla, aby zrobić dla nas kombinatorykę. Osadzony blok kodu
(??{print})
wstawi wynik bezpośrednio do wyrażenia regularnego. Ponieważ$_
składa się wyłącznie z2
s (a wynikiemprint
jest zawsze1
), to nigdy nie może się równać, i wysyła perl wirujący przez wszystkie możliwe kombinacje, z których jest całkiem sporo.Zastosowane stałe
$^F
- zazwyczaj maksymalny uchwyt pliku systemowego2
.$]
- numer wersji perla, podobny do5.016002
.$_
jest wówczas ciągiem zawierającym cyfrę2
powtórzoną 671088640 razy. Zużycie pamięci jest stałe przy około 1,3 GB, wyjście rozpoczyna się natychmiast.Analiza
Zdefiniujmy P k (n) jako liczbę wykonań instrukcji print, gdzie k jest liczbą zagnieżdżeń, a n jest długością ciągu plus jeden (tylko dlatego, że nie mam ochoty pisać n + 1 wszędzie).
(.*.*)*
P 2 (n) = [ 2, 8, 28, 96, 328, 1120, 3824, 13056, ... ]
((.*.*)*)*
P 3 (n) = [ 3, 18, 123, 900, 6693, 49926, 372615, 2781192, ... ]
(((.*.*)*)*)*
P 4 (n) = [ 4, 56, 1044, 20272, 394940, 7696008, 149970676, 2922453344, ... ]
((((.*.*)*)*)*)*
P 5 (n) = [ 5, 250, 16695, 1126580, 76039585, 5132387790, 346417023515, 23381856413800, ... ]
(((((.*.*)*)*)*)*)*
P 6 (n) = [ 6, 1452, 445698, 137050584, 42142941390, 12958920156996, ... ]
((((((.*.*)*)*)*)*)*)*
P 7 (n) = [ 7, 10094, 17634981, 30817120348, 53852913389555, ... ]
itp. Ogólnie formułę można uogólnić w następujący sposób:
gdzie
Oznacza to, że lewa Silnia od k , czyli sumy wszystkich silni mniej niż k (patrz A003422 ).
Byłem w stanie określić, zamknięte formy dla D K i E k , ale to nie ma znaczenia zbyt wiele, jeśli widzimy, że
i
Przy 23 zagnieżdżeniach daje nam to przybliżony wynik:
To powinno być prawie dokładne.
Ale aby umieścić to w notacji, która jest nieco łatwiejsza do wizualizacji, możemy przybliżyć podstawę wewnętrznego wykładnika:
a następnie sam wykładnik:
a następnie zapytaj wolframalpha :
który równie dobrze możesz po prostu zadzwonić 10 ↑↑ 4 i skończyć z tym.
źródło
JavaScript, 10 ↑↑↑↑ 210
100 znaków:
Opierając się na spostrzeżeniu, że
f
optymalnym rozwiązaniem jest maksymalne iterowanie , zastąpiłem 13 wywołańf
3 poziomami wywoływania zagnieżdżonych pętlif
,z
razy za każdym razem (f
ciągle się zwiększającz
).Oceniłem wynik analitycznie na kartce papieru - napiszę go, jeśli ktoś będzie zainteresowany jego zobaczeniem.
Poprawiony wynik: 10 ↑↑ 13
JavaScript, dokładnie w 100 znakach, znowu:
To poprawia moją pierwotną odpowiedź na trzy sposoby -
Zdefiniowanie
z
zakresu globalnego pozwala nam uniknąć konieczności pisania zao.z
każdym razem.Możliwe jest zdefiniowanie gettera w zasięgu globalnym (okno) i wpisanie
f
zamiasto.f
.Posiadanie większej liczby iteracji
f
jest warte więcej niż rozpoczynanie od większej liczby, więc zamiast(Math.E+'').replace('.','')
(= 2718281828459045, 27 znaków) lepiej jest użyć~~Math.E+''
(= 2, 11 znaków) i używać uratowanych znaków, aby dzwonićf
wiele razy.Ponieważ, jak przeanalizowano poniżej, każda iteracja daje, z liczby w rzędzie wielkości M , większą liczbę w rzędzie wielkości 10 M , kod ten powstaje po każdej iteracji
Wynik: ∼10 10 10 10 10 16 ≈ 10 ↑↑ 6.080669764
JavaScript, dokładnie 100 znaków:
Każde
o.f
wywołuje pętlę while, co daje w sumie 5 pętli. Już po pierwszej iteracji wynik jest już ponad 10 42381398144233621 . W drugiej iteracji Mathematica nie był w stanie obliczyć nawet liczby cyfr w wyniku.Oto przewodnik po kodzie:
W tym
Zacznij od 2718281828459045, usuwając przecinek dziesiętny z
Math.E
.Iteracja 1
Połącz malejącą sekwencję liczb,
aby utworzyć nowy (gigantyczny) numer,
Ile cyfr jest w tym numerze? Cóż, to jest konkatenacja
W Mathematica
Innymi słowy, jest to 2,72⋅10 42381398144233625 .
Robiąc mój wynik, już po pierwszej iteracji, 2.72⋅10 42381398144233619 .
Iteracja 2
Ale to dopiero początek. Teraz powtórz kroki, zaczynając od gigantycznej liczby ! To znaczy, łączymy malejącą sekwencję liczb,
Jaki jest mój nowy wynik, Mathematica?
Iteracja 3
Powtarzać.
Iteracja 4
Powtarzać.
Iteracja 5
Powtarzać.
Wynik analityczny
W pierwszej iteracji obliczono liczbę cyfr w konkatenacji malejącej sekwencji rozpoczynającej się od 2718281828459045, zliczając liczbę cyfr w
Suma ta może być reprezentowana przez wzór,
gdzie Z oznacza liczbę początkową ( np. 2718281828459045), a O Z oznacza jego rząd wielkości ( np. 15, ponieważ Z ∼ 10 15 ). Używając równoważników dla sum skończonych , powyższe można wyrazić wprost jako
co, jeśli weźmiemy 9 ≈ 10, zmniejsza się jeszcze bardziej do
i wreszcie, poszerzanie warunków i porządkowanie ich poprzez zmniejszanie rzędu wielkości, otrzymujemy
Ponieważ interesuje nas tylko rząd wielkości wyniku, zastąpmy Z „liczbą w rzędzie wielkości O Z ”, tj. 10 O Z -
Wreszcie, drugi i trzeci termin zostają anulowane, a ostatnie dwa terminy można usunąć (ich rozmiar jest trywialny), co pozostawia nam
od którego wygrywa pierwszy semestr.
Przekształcone,
f
przyjmuje liczbę rzędu wielkości M i daje liczbę w przybliżeniu rzędu wielkości M (10 M ).Pierwszą iterację można łatwo sprawdzić ręcznie. 2718281828459045 to liczba rzędu wielkości 15 - dlatego
f
powinna dać liczbę rzędu wielkości 15 (10 15 ) ∼ 10 16 . Rzeczywiście, wyprodukowana liczba wynosi z góry 2,72⋅10 42381398144233625 - czyli 10 42381398144233625 6 10 10 16 .Biorąc pod uwagę, że M nie jest znaczącym czynnikiem w M (10 M ), rząd wielkości wyniku każdej iteracji następuje zatem według prostego wzoru tetracji:
Źródła LaTeX
źródło
f
liczbęz
do własnej mocy. To coś w stylu↑↑↑
. Oczywiście wynik nie jest2↑↑↑2
, przepraszam ... bardziej2↑↑↑5+1
wydaje się. Zgadzasz się, czy powinienem umieścić to w tabeli wyników?i=o.z;while(i--)...
, nie wykonujesz czasów pętlio.z
, ponieważ pętla jest oparta na zmiennej całkowitej io.z
zawiera ciąg większy niż największa reprezentatywna liczba całkowita, w zależności od wielkości słowa tłumacza. Przypuśćmy, że dla twojej korzyści, że Twój interpreter nie zablokuje się przy konwersji takiego ciągu na int,i
zacznie się za każdym razem od największej reprezentatywnej wartości całkowitej, powiedzmy 2 ^ 63, a nie od bieżącej wartościo.z
.APL, 10 ↑↑ 3.4
Oto moja zmieniona próba:
Program 100 znaków / bajt *, działający na bieżącym sprzęcie (zużywa niewielką ilość pamięci i zwykłe 32-bitowe zmienne int), chociaż jego ukończenie zajmie bardzo dużo czasu.
Możesz go uruchomić na interprecie APL i zacznie drukować cyfry. Jeśli pozwolisz na wypełnienie, wydrukuje liczbę z 10 × 123456789 44 cyframi.
Dlatego wynik wynosi 10 10 x 123456789 44 /100 3 ≈ 10 10 353 ≈ 10 ↑↑ 3,406161
Wyjaśnienie
⎕D
jest predefiniowanym ciągiem ciągłym równym'0123456789'
n←⍎⎕D
definiuje n jako liczbę reprezentowaną przez ten ciąg: 123456789 (która jest <2 31 i dlatego może być używana jako zmienna sterująca pętli){⍞←⎕D}
wypisze 10 cyfr na standardowe wyjście, bez nowego wiersza{⍞←⎕D}⍣n
zrobi to n razy (⍣
jest „operatorem mocy”: to nie jest *, /, ani ^, ponieważ nie jest to operacja matematyczna, to rodzaj pętli){⍞←n}⍣n⍣n
powtórzy poprzednią operację n razy, dlatego drukuje 10 cyfr n 2 razy{⍞←n}⍣n⍣n⍣n
zrobi to n 3 razy⍣n
, więc drukuje n 44 razy ciąg'0123456789'
.⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
*: APL można zapisać we własnym (starszym) jednobajtowym zestawie znaków, który odwzorowuje symbole APL na górne 128 bajtów. Dlatego do celów oceniania program N znaków, który używa tylko znaków ASCII i symboli APL, może zostać uznany za N-bajtowy.
źródło
100 cubed
(100 ^ 3).{⍞←⎕D}
na⍞←
który oszczędza trzy bajty, których można użyć, aby dodać jeszcze jeden⍣n
i czynią⊢n←⍎⎕D
na⌽⍕n←⍎⎕D
na 80-krotny wzrost. Jeśli pozwalasz na bieganie,⎕PP←17
użyj×⍨
zamiast tego⌽⍕
prawie dwukrotnie więcej drukowanych cyfr.Haskell, wynik: (2 2 2 65536-3 ) / 1000000 ≈ 2 ↑↑ 7 ≈ 10 ↑↑ 4.6329710779
Ten program ma dokładnie 100 bajtów czystego kodu Haskell. Wypisze czwartą liczbę Ackermanna, ostatecznie zużywając w tym procesie całą dostępną energię, materię i czas Wszechświata (i dalej) ( nieznacznie przekraczając miękki limit 5 sekund).
źródło
o=length[]
dostaje dodatkowe!q
na końcu i oszczędza dodatkowo bajt.Python, 2 ↑↑ 11/830584 ≈ 10 ↑↑ 8.632971 (Notacja strzałki w górę Knutha)
Prawdopodobnie żaden komputer nie ma wystarczającej ilości pamięci, aby pomyślnie to uruchomić, ale tak naprawdę nie jest to wina programu. Przy spełnieniu minimalnych wymagań systemowych działa.
Tak, to trochę przesuwa wartości logiczne.
True
zostaje do1
tego zmuszony . Python ma liczby całkowite o dowolnej długości.źródło
print True<<(True<<(True<<(True<<True<<True)))
robi, a to daje ciąg 19k.t=True
a następnie używająct
po?$python -c 'print True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<True<<True)))))))))' Traceback (most recent call last): File "<string>", line 1, in <module> OverflowError: long int too large to convert to int
GolfScript 3.673e + 374
Myślę, że
*
jest to dozwolone, ponieważ oznacza powtarzanie ciągów, a nie mnożenie.Objaśnienie:
'~'(
pozostawi 126 (wartość ASCII „~”) na stosie. Następnie skopiuj liczbę, przekonwertuj ją na ciąg i powtórz ciąg 126 razy. To daje w126126126126...
przybliżeniu1.26 e+377
. Rozwiązanie składa się z 7 znaków, więc podziel przez7^3
, aby uzyskać wynik około3.673e+374
źródło
Rubinowy, probabilistycznie nieskończony, 54 znaki
x jest inicjowany na 97. Następnie iterujemy następującą procedurę: Wygeneruj x liczb losowych od 0 do 1. Jeśli wszystkie są takie same, zakończ i wypisz x. W przeciwnym razie dwukrotnie x i powtórz. Ponieważ losowe liczby Ruby mają 17 cyfr dokładności, szanse na zakończenie każdego kroku wynoszą 1 na (10e17) ^ x. Prawdopodobieństwo zakończenia w ciągu n kroków jest zatem sumą dla x = 1 do n (1 / 10e17) ^ (2 ^ n), która jest zbieżna do 1 / 10e34. Oznacza to, że dla dowolnej liczby, bez względu na to, jak duże, jest w przeważającej mierze mało prawdopodobne, że ten program wyświetli mniejszą liczbę.
Oczywiście, filozoficznym pytaniem jest, czy program, który ma mniej niż 1 na 10 ^ 34 szansę na zakończenie kroku n dla dowolnego n, można powiedzieć, że kiedykolwiek się zakończy. Jeśli założymy nie tylko nieskończony czas i moc, ale że program ma możliwość działania z rosnącą prędkością z prędkością przekraczającą szybkość, z którą maleje prawdopodobieństwo zakończenia, możemy, jak sądzę, faktycznie ustalić prawdopodobieństwo kończące się w czasie t arbitralnie bliskie 1.
źródło
GolfScript, ≈ f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (126)))))))))
Jest to bezwstydnie dostosowane z innej odpowiedzi @Howard i zawiera sugestie @Peter Taylor.
Moje rozumienie GolfScript jest ograniczone, ale uważam, że powyższe operatory
*
i nie^
są operatorami arytmetycznymi zabronionymi przez OP.(Z przyjemnością usunę to, jeśli @Howard chce przesłać własną wersję, która i tak bez wątpienia byłaby lepsza od tej.)
Ten program oblicza liczbę w przybliżeniu f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (126)))))) ))) - dziewięciokrotna iteracja f ε 0 - gdzie f ε 0 jest funkcją w szybko rosnącej hierarchii, która rośnie mniej więcej w tym samym tempie co funkcja Goodsteina. (f ε 0rośnie tak szybko, że tempo wzrostu funkcji n (k) Friedmana i k-krotnych strzały łańcuchowe Conwaya są praktycznie nieistotne, nawet w porównaniu z pojedynczym nie iterowanym f ε 0. )
źródło
'',:o;'oo',:t;
po prostu przypisuje wartości0
doo
i2
dot
; jeśli ma to na celu obejście braku cyfr, można to znacznie skrócić,:o)):t;
, z wyjątkiem tego, że nie ma powodu, aby go usuwać,t
ponieważ można pisaćexpr:t;{...}:f;[[[t]f]f]f
jako[[[expr:t]{...}:f~]f]f
zapisywanie kolejnych 3 znaków.o
: jestem pewien, że[0 126]f
będzie on większy niż,[126]f
więc zapisujesz znak i podbijasz wynik. Chociaż zostawiasz tam pusty ciąg, który prawdopodobnie psuje rzeczy: lepiej zacząć[[,:o'~'=]
[
są niepotrzebne, ponieważ nie masz nic na stosie.dc, 100 znaków
Biorąc pod uwagę wystarczającą ilość czasu i pamięci, obliczymy liczbę około 15 ↑ ¹⁶⁶⁶⁶⁶⁵ 15. Pierwotnie zaimplementowałem funkcję hiperoperacji , ale wymagało to zbyt wielu znaków do tego wyzwania, więc usunąłem warunki
n = 2, b = 0
in >= 3, b = 0
, zamieniającn = 1, b = 0
warunekn >= 1, b = 0
.Jedynymi używanymi tutaj operatorami arytmetycznymi są dodawanie i odejmowanie.
EDYCJA: zgodnie z obietnicą w komentarzach, oto podział tego, co robi ten kod:
Jak zauważono, różni się to od funkcji hiperoperacji tym, że podstawowe przypadki mnożenia i wyższe są zastępowane przez podstawowe przypadki dodawania. Ten kod zachowuje się tak, jakby
a*0 = a^0 = a↑0 = a↑↑0 ... = a
zamiast matematycznie poprawnegoa*0 = 0
ia^0 = a↑0 = a↑↑0 ... = 1
. W rezultacie oblicza wartości, które są nieco wyższe niż powinny, ale to nie jest wielka sprawa, ponieważ dążymy do większych liczb. :)EDYCJA: Właśnie zauważyłem, że cyfra przypadkowo wślizgnęła się do kodu w makrze, które wykonuje przyrosty
n=0
. Usunąłem go, zastępując go „F” (15), co powoduje efekt uboczny skalowania każdej operacji przyrostowej o 15. Nie jestem pewien, jak bardzo wpływa to na końcowy wynik, ale prawdopodobnie jest teraz znacznie większy.źródło
Nie ma już limitu czasu działania? OK.
Czy program musi być uruchamiany na nowoczesnych komputerach?
Oba rozwiązania wykorzystują 64-bitową kompilację, więc
long
jest to 64-bitowa liczba całkowita.C: większa niż 10 (2 64 -1) 2 64 , która sama jest większa niż 10 10 355393490465494856447 ≈ 10 ↑↑ 4.11820744
88 znaków.
Aby ułatwić te formuły, użyję
t = 2^64-1 = 18446744073709551615
.main
będzie wywoływałf
z parametremt
, który zapętlit
czasy, za każdym razem drukując wartośćt
i wywołującf
z parametremt-1
.Wszystkich cyfry wydrukowane:
20 * t
.Każde z tych wywołań
f
z parametremt-1
iterujet
czasy, wypisuje wartośćt
i wywołuje f z parametremt-2
.Liczba wydrukowanych cyfr:
20 * (t + t*t)
Wypróbowałem ten program, używając odpowiednika 3-bitowych liczb całkowitych (ustawiłem
i = 8
i miałem wywołanie głównef(7)
). Uderzył w drukowany wyciąg 6725600 razy. To się sprawdza,7^8 + 7^7 + 7^6 + 7^5 + 7^4 + 7^3 + 7^2 + 7
dlatego uważam, że jest to ostateczna liczba dla pełnego programu:Liczba wydrukowanych cyfr:
20 * (t + t*t + t^3 + ... + t^(t-1) + t^t + t^(2^64))
Nie jestem pewien, jak obliczyć (2 64 -1) 2 64 . To sumowanie jest mniejsze niż (2 64 ) 2 64 , a do obliczeń potrzebuję potęgi dwóch. Dlatego obliczę (2 64 ) 2 64 -1 . Jest mniejszy niż rzeczywisty wynik, ale ponieważ jest potęgą dwóch, mogę przekonwertować go na potęgę 10 dla porównania z innymi wynikami.
Czy ktoś wie, jak wykonać to sumowanie lub jak przekonwertować (2 64 -1) 2 64 na 10 n ?
Pamiętaj jednak, że to liczba wydrukowanych cyfr. Wartość liczby całkowitej wynosi 10 podniesiona do tej potęgi, więc 10 ^ 10 ^ 355393490465494856447
Ten program będzie miał głębokość stosu 2 ^ 64. To 2 ^ 72 bajty pamięci tylko do przechowywania liczników pętli. To 4 miliardy terabajtów liczników pętli. Nie wspominając o innych rzeczach, które trafiłyby na stos dla 2 ^ 64 poziomów rekurencji.
Edycja: Poprawiono parę literówek i użyłem bardziej precyzyjnej wartości dla log2 (10).
Edycja 2: Zaczekaj sekundę, mam pętlę, której printf jest poza. Naprawmy to. Dodano inicjalizację
i
.Edycja 3: Cholera, zepsułem matematykę z poprzedniej edycji. Naprawiony.
Ten będzie działał na nowoczesnych komputerach, ale wkrótce się nie skończy.
C: 10 ^ 10 ^ 136 ≈ 10 ↑↑ 3,329100567
98 znaków.
Spowoduje to wydrukowanie odwrotności bitowej zera, 2 ^ 64-1, raz dla każdej iteracji. 2 ^ 64-1 to 20 cyfr.
Liczba cyfr =
20 * (2^64-1)^7
= 14536774485912137805470195290264863598250876154813037507443495139872713780096227571027903270680672445638775618778303705182042800542187500Zaokrąglenie długości programu do 100 znaków, Wynik = liczba wydrukowana / 1 000 000
Wynik = 10 ^ 14536774485912137805470195290264863598250876154813037507443495139872713780096227571027903270680672445638775618778303705182042800542187494
źródło
%u
drukowałem liczby 32-bitowe nawet przy kompilacji 64-bitowej, więc po prostu przestałemll
przyzwyczajać się do pisania w 32-bitowym kompilatorze.%llu
byłobylong long
i%lu
byłoby słusznelong
.%u
zawsze jest 32-bitowa,%llu
zawsze jest 64-bitowa, bez względu na to, czy jest kompilowana jako 32- czy 64-bitowa. Jednak tutaj rozwiązanie wymaga wersjilong
64-bitowej, więc masz rację,%lu
wystarczy.i
.R -
4941 znaków kodu, 4.03624169270483442 * 10 ^ 5928 ≈ 10 ↑↑ 2.576681348wydrukuje [powielając tutaj dopiero początek]:
źródło
cat
jest dziwną funkcją, ponieważ pierwszym argumentem jest...
. Tak więc wszystko przed pierwszym argumentem o nazwie idzie do...
(i będziecat
'ed), dlategosep
należy go nazwać - inaczej można by go skrócić jakocat(abs(.Random.seed),,"")
ECMAScript 6 - 10 ^ 3 ↑↑↑↑ 3/884736
(3 ↑↑↑↑ 3 to G (1) gdzie G (64) to liczba Grahama)
Wyjście: 10 ^ 3 ↑↑↑↑ 3
Poradnik:
Usunięty dla zwięzłości.G
to funkcja, w której G (64) jest liczbą Grahama. Dane wejściowe są liczbami całkowitymi. Dane wyjściowe to ciąg jednoargumentowy zapisany za pomocą 0.K
to funkcja strzałki w górę Knutha a ↑ n b, gdzie a jest niejawnie 3. Dane wejściowe to n, łańcuch jednoargumentowy ib, łańcuch jednoargumentowy. Dane wyjściowe to ciąg jednoargumentowy.u
to „1”.v
to „0000” lub G (0)e
to „000”.źródło
Maximum code length is 100 bytes;
W przeciwnym razie jest to prawie nie do pobiciado
(Z przeprosinami dla Darrena Stone'a)
n = 2 ^ 64 cyfry (9 ...)
l = 100 znaków kodu
wynik ≈ 1e + 2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936570 ≈ 10 ↑↑ 3.2974890744
[Wynik = n ^ 5 / l ^ 3 = (10 ^ (2 ^ 320) -1) / (100 ^ 3) = (10 ^ 2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936576-1) / (10 ^ 6)]
Zauważ, że zasługuję na to, by bezlitośnie chłostać się za tę odpowiedź, ale nie mogłem się oprzeć. Z oczywistych powodów nie polecam zachowywać się tak jak ja podczas wymiany stosów. :-P
EDYCJA: Jeszcze trudniej oprzeć się pokusie pójścia z czymś takim
... ale przypuszczam, że zamierzoną, ale nieokreśloną zasadą było, że cały ciąg cyfr tworzących liczbę musi zostać wydrukowany.
źródło
)
, ale nie ma sprawy, ponieważ masz teraz tylko 96 znaków.Nowy Rubin: wynik ~ f ω ω2 +1 (126 2 2 126 )
gdzie f α (n) jest szybko rosnącą hierarchią.
Wypróbuj online!
Są
*n
to tylko mnożenie łańcuchów i tablic, więc powinny być w porządku.Nieskluczony kod:
gdzie
b.-b<=>0
zwraca liczbę całkowitą1
bliższą0
niżb
.Wyjaśnienie:
Drukuje
n
na początku każdego połączeniaH
.H[[]]
podwaja sięn
(n
razy), tjn = n<<n
.H[[0,a,b,c,...,z]]
połączeniaH[[a,b,c,...,z]]
(n
czasy).H[[k+1,a,b,c,...,z]]
połączeniaH[[k]*n+[a,b,c,...,z]]
(n
czasy), gdzie[k]*n = [k,k,...,k]
.H[[-1,a,b,c,...,z]]
połączeniaH[[n]*n+[a,b,c,...,z]]
(n
czasy).H[[-(k+1),a,b,c,...,z]]
połączeniaH[[-k]*n+[a,b,c,...,z]]
(n
czasy).H[k] = H[[k]]
.Mój program inicjuje się
n = 126
, a następnie wywołujeH[-n-1]
126 2 2 126 razy.Przykłady:
H[[0]]
zadzwoni,H[[]]
co dotyczyn = n<<n
(n
razy).H[[0,0]]
zadzwoniH[[0]]
(n
razy).H[[1]]
zadzwoniH[[0]*n]
(n
razy).H[[-1]]
zadzwoniH[[n]*n]
(n
razy).H[[-1,-1]]
zadzwoniH[[n]*n+[-1]]
(n
razy).H[[-3]]
zadzwoniH[[-2]*n]
(n
razy).Wypróbuj online!
Zobacz wersje innych fajnych rzeczy.
źródło
Haskell - funkcja Ackermanna zastosowana do jej wyniku 20 razy - 99 znaków
Jest to najlepsze rozwiązanie Haskell, jakie mogę wymyślić w oparciu o funkcję ackermann - możesz zauważyć pewne podobieństwa do rozwiązania nm, zainspirowany został i = round $ log pi, a reszta to zbieg okoliczności: D
Działa na sobie funkcję ackermann 20 razy, zaczynając od jednego, przy czym sekwencja jest
Jeśli chodzi o szacunki, wikipedia mówi:
a (m, n) = 2 ↑ m-2 (n + 3) - 3
Z tego wynika, że a3 (1) = a (61,61) = 2 ↑ 59 64 + 3, co jest wyraźnie większe niż g1 = 3 ↑ 4 3, chyba że 3 na początku jest znacznie ważniejsze niż myślę. Następnie, każdy poziom nie następuje (odrzucając nieznacznych stałych w a n )
Jeśli są one w przybliżeniu równoważne, wówczas 20 (1) ~ = g 18 . Ostateczny składnik w n , (a n-1 ) jest znacznie większy niż 3, więc potencjalnie jest wyższy niż g 18 . Zobaczę, czy uda mi się dowiedzieć, czy to przyspieszy choćby jedną iterację, i przekażę raport.
źródło
length"a"
oszczędza kilka bajtów i pozwala ci kolejny.a
kod maszynowy x86 - 100 bajtów (złożony jako plik MSDOS .com)
Uwaga: może nieco zgiąć reguły
Ten program wyświetli 2 (65536 * 8 + 32) dziewiątek, co dałoby wynik na (10 2 524320 -1) / 1000000
Jako licznik ten program wykorzystuje cały stos (64 kB) oraz dwa rejestry 16-bitowe
Zmontowany kod:
Montaż:
źródło
do
Rozmiar pliku to 45 bajtów.
Program to:
Wyprodukowana liczba jest większa niż 10 ^ (10 ^ (10 ^ 1.305451600608433)).
Plik, do którego przekierowałem standardowe wyjście, ma obecnie ponad 16 Gb i wciąż rośnie.
Program zakończyłby się w rozsądnym czasie, gdybym miał lepszy komputer.
Mój wynik jest niepoliczalny z zmiennoprzecinkową podwójną precyzją.
źródło
GNU Bash, 10 ^ 40964096² /
80 ^ 3 ≈ 10 ↑↑ 2.072820169C = 4096 w dowolnym rozsądnym systemie. SHLVL jest małą dodatnią liczbą całkowitą (zwykle 1 lub 2 w zależności od tego, czy / bin / sh to bash, czy nie).
Tylko 64-bitowy system UNIX:
Wynik: ~ 10 ^ (40964096409640964096 * 40964096409640964096) / 88 ^ 3
źródło
bash -c 'bash -c "echo \$SHLVL"'
stat --printf
nie działa. Spróbujstat -c %s
C, 10 ^ 10 ^ 2485766 ≈ 10 ↑↑ 3,805871804
Tworzymy tablicę 258048 liczb całkowitych bez znaku. Nie mogło być długo niepodpisanych, ponieważ to spowodowało, że program był zbyt długi. Są niepodpisane, ponieważ nie chcę używać niezdefiniowanego zachowania, ten kod jest poprawny C (poza brakiem powrotu z main ()) i będzie się kompilował i działał na każdym normalnym komputerze, ale będzie działał przez długi czas . Ten rozmiar jest największy, jaki możemy legalnie wyrazić bez użycia znaków innych niż ascii.
Pętlimy przez tablicę, zaczynając od ostatniego elementu. Drukujemy cyfry
2^32-1
, zwiększamy element i upuszczamy pętlę, jeśli element nie jest zawinięty do 0. W ten sposób będziemy zapętlać(2^32 - 1)^254048 = 2^8257536
czasy, drukując 10 cyfr za każdym razem.Oto przykładowy kod, który pokazuje zasadę w bardziej ograniczonym zakresie danych:
Wynik wynosi około 10 ^ 10 ^ 2485766 podzielony przez milion, który wciąż wynosi około 10 ^ 10 ^ 2485766.
źródło
PowerShell (2,53e107976 / 72³ = 6,78e107970 ≈ 10 ↑↑ 1.701853371)
Uruchomienie zajmuje znacznie więcej niż 5 sekund.
Pobiera i konkatenuje długość bajtów każdego pliku na bieżącym dysku. Regex usuwa wszelkie znaki inne niż cyfry.
źródło
0
tam.-ea(+'')
aby zmniejszyć rozmiar (''
przeliczony na liczbę0
, której wartość wyliczana jestSilentlyContinue
). Możesz użyć\D
do wyrażenia regularnego, który jest taki sam jak[^\d]
. I możesz po prostu użyć%{$_.Length}
zamiast tego, abyselect Length
pozbyć się nagłówków kolumn. A potem można się pozbyć-split
i-replace
jak dobrze, dzięki czemu można z-join(gci \ -ea(+'')-r|%{$_.Length})
którym jest 37 znaków krótszy (ja też kolejność parametrów ponieważ nawiasy są konieczne w każdym razie z powodu+''
).Python 3, wynik = ack (126 126) / 100 ^ 3
Funkcja f to funkcja ackermann, do której wywołania mam wystarczająco dużo miejsca.
Edycja: poprzednio „else n + 1”, co było niezgodne z regułami wyzwań - uznanie dla Simply Beautiful Art.
źródło
f(m-g,g)
naf(m-g,m)
.f(m-g,i)
. Ponadto na końcu pierwszego wiersza używasz liczby. Wierzę, że chciałeś użyćn+g
, po czym wskazuję, że będzien+n
większy.JavaScript 98 znaków
generuje 2,718e + 239622337 ≈ 10 ↑↑ 2.9232195202
Za wynik nieco ponad 2,718e + 239622331 ≈ 10 ↑↑ 2.9232195197
co jest największym, jaki mogę zrobić bez awarii przeglądarki.
(console.log (a) pokaże pełne wyjście)
Nie uruchamiaj tych:
wyniesie 2,718 + e121333054704 ≈ 10 ↑↑ 3.0189898069 (alias 2,718 * 10 ^ (1,213 * 10 ^ 12), aby porównać do dłuższej odpowiedzi:
bardziej ekstremalna wersja, jeśli nie spowodowała awarii przeglądarki: (80 znaków)
co stworzyłoby liczbę mniej więcej tego samego rozmiaru co e * 10 ^ (10 ^ 19) ≈ 10 ↑↑ 3.106786869689
Edycja: zaktualizowane oryginalne rozwiązanie kodu wygenerowało tylko 2,718e + 464
źródło
Python 3: 98 znaków, ≈ 10 ↑↑ 256
Za pomocą funkcji argumentu zmiennej:
Skutecznie, E zmniejsza pierwszy argument, jednocześnie zwiększając pozostałe argumenty, z tym wyjątkiem, że zamiast wstawiania -1 w argumentach, upuszcza argument. Ponieważ każdy cykl zmniejsza pierwszy argument lub zmniejsza liczbę argumentów, gwarantuje to, że zostanie zakończony. Zastosowaną funkcją rosnącą jest int („% d% d”% (k, k)), co daje wynik między k ** 2 + 2 * k a 10 * k ** 2 + k. Mój kod używa symbolu * - ale nie jako mnożenia. Służy do pracy ze zmienną liczbą argumentów, które moim zdaniem powinny być zgodne z regułami, ponieważ wyraźnym celem reguł było ograniczenie określonych operacji, a nie samych symboli.
Kilka przykładów tego, jak duże E szybko dostaje się:
Tylko dwa pierwsze z nich można uruchomić na moim komputerze w rozsądnym czasie.
Następnie E wywoływane jest przez
E(*range(ord('~')))
- co oznacza:Nie jestem do końca pewien, jak duży jest (próbowałem go przybliżyć bezskutecznie) - ale oczywiste jest, że jest ~ naprawdę ~ duży.
Na przykład, około dwunastu cykli, wynik jest około: (technicznie nieco więcej niż)
Oszacowanie wyniku:
Jeśli przybliżymy rosnący krok o
lambda k: 10 * k**2
, funkcję można opisać jakoIstotną rzeczą, którą tutaj robimy, jest zbudowanie dziesięcioosobowej wieży, więc ostateczny wynik można oszacować jako 10 ↑↑ 256.
Lepsze (choć częściowe) oszacowanie wyniku:
Wykorzystuje to to samo,
10 * k**2
co inne oszacowania.Zgodnie z poprzednim szacunkiem byłoby to:
Który jest znacznie mniejszy niż rzeczywista wartość, ponieważ używa
a**2
zamiast2**a
dla 10 i używaa*2
zamiast2**a
dla b.źródło
C (wynik ≈ 10 ^ 20 000 000 000 ≈ 10 ↑↑ 3,005558275)
Pomimo
rand()
wyniku jest deterministyczny, ponieważ nie ma funkcji początkowej.źródło
rand()
warunku zakończenia powoduje, że nie jest on deterministyczny. Ponadto wywoływanierand()
każdej iteracji powinno być strasznie wolne. Zamiast tego użyj czegoś takiego, jakLONG_MAX
zdefiniowano wlimits.h
.non deterministic
się, bo nie ma takiego ziarna, jak napisałeś.~' '
zamiast zrand()
nadrukiem%u
? Dwa bajty mniej źródła i wyższa wartość.