Twoim celem jest wydrukowanie (na standardowe wyjście) jak największej liczby przy użyciu zaledwie dziesięciu znaków kodu.
- Możesz używać dowolnych funkcji swojego języka, z wyjątkiem wbudowanych funkcji potęgowania.
- Podobnie nie możesz używać notacji naukowej do wprowadzania liczb. (Tak więc nie
9e+99
.)
- Podobnie nie możesz używać notacji naukowej do wprowadzania liczb. (Tak więc nie
- Program musi wydrukować numer bez żadnego wkładu użytkownika. Podobnie, brak odczytu z innych plików lub z Internetu i tak dalej.
- Twój program musi obliczyć jeden numer i wydrukować go. Nie można wydrukować łańcucha ani wydrukować tej samej cyfry tysiące razy.
- Możesz wyłączyć z limitu 10 znaków kod niezbędny do wydrukowania czegokolwiek. Na przykład w Pythonie 2, który korzysta ze
print x
składni, możesz użyć do 16 znaków w swoim programie. - Program musi faktycznie odnieść sukces w wyniku. Jeśli uruchomienie na najszybszym komputerze na świecie trwa dłużej niż godzinę, jest nieważne.
- Wyjście może być w dowolnym formacie (dzięki czemu można drukować
999
,5e+100
itp) - Nieskończoność jest pojęciem abstrakcyjnym , a nie liczbą. Więc to nie jest poprawny wynik.
code-challenge
number
busy-beaver
Ypnypn
źródło
źródło
If it takes longer than an hour to run on any computer in the world, it's invalid.
nie jest obiektywny. Mógłbym (teoretycznie) wyprodukować komputer, który zajmuje godzinę, aby zmienić jeden stan T* 2^x
?Odpowiedzi:
Język Wolfram
ack (9!, 9!) =
Dane wyjściowe są zapisywane strzałkami.
źródło
ack(99!,9)
jest znacznie, dużo większy.Perl,> 1,96835797883262e + 18
To może nie być największa odpowiedź ... dziś! Ale poczekaj wystarczająco tysiąclecia i będzie!
Edytować:
Aby odnieść się do niektórych komentarzy, przez „wystarczająco tysiąclecia”, mam na myśli n 100 lat.
Szczerze mówiąc, jeśli duża śmierć wszechświata z powodu zamarzania / upałów jest tym, w jaki sposób skończy się wszechświat (szacuje się, że nastąpi ~ 10 100 lat), „ostateczna” wartość wynosiłaby ~ 10 214 , co z pewnością jest znacznie mniejsze niż niektóre z inne odpowiedzi (choć „losowe fluktuacje kwantowe lub tunelowanie kwantowe mogą spowodować kolejny Wielki Wybuch za 10 10 56 lat”). Jeśli przyjmiemy bardziej optymistyczne podejście (np. Model cykliczny lub wieloświatowy), to czas będzie płynął nieskończenie, a więc pewnego dnia w jakimś wszechświecie, w jakiejś architekturze o wysokiej liczbie bitów, odpowiedź przekroczyłaby niektóre inne.
Z drugiej strony, jak wskazano,
time
jest rzeczywiście ograniczony rozmiarem liczby całkowitej / długiej, więc w rzeczywistości coś takiego~0
zawsze dawałoby większą liczbę niżtime
(tj. Maksimumtime
obsługiwane przez architekturę).To nie była najpoważniejsza odpowiedź, ale mam nadzieję, że wam się podobało!
źródło
time
w którymś momencie nie zawiniesz i nie zwrócisz małej liczby? Zależy od tego, czy jest to perl 32-bitowy czy 64-bitowyWolfram ≅ 2,003529930 × 10 19728
Tak, to jest język! Prowadzi back-end popularnej strony Wolfram Alpha. To jedyny język, w którym znalazłem, w którym funkcja Ackermanna jest wbudowana i skrócona do mniej niż 6 znaków.
W ośmiu znakach:
Lub ≅ 2,003529930 × 10 19728
ack(4,3)
,ack(5,2)
Itd. Są znacznie większe, ale zbyt duża.ack(4,2)
jest prawdopodobnie największą liczbą Ackermanna, niż można ją całkowicie obliczyć w niecałą godzinę.Większe liczby są renderowane w formie symbolicznej, np .:
Reguły mówią, że każdy format wyjściowy jest dozwolony, więc może być poprawny. Jest to więcej niż 10 10 19727 , co jest większe niż jakikolwiek inny zapis tutaj, z wyjątkiem powtarzanego silnia.
Jednak,
jest większy niż powtarzana silnia. Największa liczba, jaką mogę uzyskać w dziesięciu znakach, to:
To jest niesamowicie ogromne, Wszechświat nie jest wystarczająco duży, aby reprezentować znaczną część jego cyfr, nawet jeśli wziąłeś powtarzające się dzienniki liczby.
źródło
ack(4,2)+1
rozwiązania.ack(4,2)
jest nieprawidłowy. Język naturalny W | A nie powinien nawet być liczony jako język programowania. Nie jest on kompletny i nie można w nim pisać nawet podstawowych programów, takich jak algorytm Euclida. Z tego powodu nie sądzę, że jest to prawidłowa odpowiedź bardziej niż zapytanie Google.Powłoka Python2, 3010301 cyfr
Obliczanie długości: Python doda „L” do tych długich liczb, więc zgłasza 1 znak więcej niż wynik ma cyfry.
Pierwsza i ostatnia 20 cyfr:
źródło
9 * 2**9999999
, więc można argumentować, że używa potęgowania.***built-in*** exponentiation functions
nie są dozwolone, więc może to podlegać przepisom. +1floor(log10(9 * 2**9999999))+1
CJam, 2 × 10 268,435,457
Oblicza to b , zdefiniowane następująco:
0 = 10
a n = a n - 1 2
b = 20 × a 28
tło
Jest to zgodne z tym samym pomysłem, co odpowiedź Claudiu , ale nie jest na nim oparte. Miałem podobny pomysł, który zamieściłem zaledwie kilka minut po tym, jak opublikował swój , ale odrzuciłem go, ponieważ nie zbliżył się do terminu.
Jednak sugestia aditsu, aby uaktualnić do Javy 8 i mój pomysł użycia mocy 10 pozwoliły CJamowi obliczyć liczby poza zasięgiem GolfScript, co wydaje się być spowodowane pewnymi błędami / ograniczeniami Bignum Ruby.
Jak to działa
CJam, ≈ 8,1 × 10 1,826,751
Zajmuje mniej niż pięć minut na moim komputerze, więc wciąż jest miejsce na ulepszenia.
Oblicza to 20 , zdefiniowane w następujący sposób:
0 = 20
a n = (n × a n - 1 ) 2
Jak to działa
źródło
Python 3, 9 * 2 ^ (7 * 2 ^ 33)> 10 ^ 18 100,795,8813
9 * 2 ^ (2 ^ 35)> 10 ^ 10 343 311,894Edycja: Moja nowa odpowiedź to:
Stara odpowiedź dla potomnych:
Dokładnie dziesięć znaków.
Drukuję liczbę szesnastkową i
Dlatego mój rzeczywisty kod to:
Dowód, że działa w określonym czasie i generuje liczbę o określonym rozmiarze:
Mój numer> 10 ^ (15032385538 * log (16))> 10 ^ 18100795813
3 mniej cyfr szesnastkowych niż powyższy wydruk wc z powodu początkowej
0x9
.Python 3 jest konieczny, ponieważ w Pythonie 2
7<<33
byłby długi i<<
nie zajmuje długo jako danych wejściowych.Nie mogę zamiast tego użyć 9 << (1 << 36), ponieważ:
Jest to zatem największa możliwa liczba formularzy
a<<(b<<cd)
do wydrukowania na moim komputerze.Najprawdopodobniej najszybsza maszyna na świecie ma więcej pamięci niż ja, więc moją alternatywną odpowiedzią jest:
9 * 2 ^ (9 * 2 ^ 99)> 10 ^ (1,7172038461 * 10 ^ 30)
Jednak moja obecna odpowiedź jest jak dotąd największa, więc prawdopodobnie jest wystarczająco dobra. To wszystko zakłada, że przesunięcie bitów jest dopuszczalne. Wygląda na to, że z innych odpowiedzi, które go wykorzystały.
źródło
Dowolny język z wystarczająco krótkimi stałymi nazwami, około 18 cyfr.
Opublikowałbym to jako odpowiedź PHP, ale niestety
M_PI
sprawia, że jest to trochę za długo! Ale PHP daje za to 8.0839634798317E + 17. Zasadniczo narusza brak absolutnej precyzji w PI: sźródło
(/ 99(sin pi))
(14 znaków). Błąd w TI-83:99/sin(π
(8 znaków) powoduje dzielenie przez zero. Pracuje w LibreOffice Calc :=99/SIN(PI(
(10 znaków, nie licząc=
) oblicza 808423047055000000. LibreOffice automatyczne wkładki ostatnie dwa))
w=99/SIN(PI())
.99/sin(π
pięć lub osiem bajtów? Wiem, że TI-BASIC przechowuje kilka poleceń jako pojedyncze bajty; jestsin(
jednym z nich?Haskell
Bez żadnych sztuczek:
Prawdopodobnie bez obliczania czegokolwiek:
Dostosowując odpowiedź Nieta :
źródło
floor(infinity)
jest liczbą skończoną? Co do cholery Haskell?isInfinite $ 1 / 0 -- True
. O ile wiem, IEEE 754 definiuje1 / 0
jako nieskończoność.1 / 0 == Infinity
.PowerShell - 1.12947668480335E + 42
Mnoży 99 Pebibajtów razy 9 000 000 000 Pebibajtów.
źródło
J (
((((((((9)!)!)!)!)!)!)!)!
)Tak, to dużo.
10^(10^(10^(10^(10^(10^(10^(10^6.269498812196425)))))))
nie być bardzo dokładnym.źródło
!!9x
nic nie wydrukowałem. Szczerze wątpię,!!!!!!!!9x
czy kiedykolwiek zostanie to obliczone.!!9x
końcu wydrukowano do ekranu. Jestem pod wrażeniem, że faktycznie obliczył wartość, ale nadal całkowicie zawodziK / Kona :
8,977649e2611,774896e308!170
tworzy wektor liczb od 0 do 1691.6+
dodaje po jednym do każdego elementu wektora i konwertuje na liczby rzeczywiste (zakres wynosi od 1,6 do 170,6)*/
mnoży każdy element tablicy razemGdyby Kona obsługiwał quad precyzję, mógłbym to zrobić
*/9.+!999
i uzyskać około 1e2584. Niestety tak nie jest i jestem ograniczony do podwójnej precyzji.stara metoda
!99
tworzy wektor liczb od 0 do 989+
dodaje 9 do każdego elementu wektora (obecnie zakresy od 9 do 107)9.*
mnoży każdy element przez 9,0 (domyślnie konwertuje na liczby rzeczywiste, więc od 81,0 do 963,0)*/
mnoży każdy element wektora razemźródło
HTML, 9999999999
.. przybity.
źródło
9^9999
odbitki9^9999
. Tylko mówię :)PHP_INT_MAX
jest 11Python - zmienia się, do 13916486568675240 (do tej pory)
Nie do końca poważnie, ale pomyślałem, że to będzie fajna zabawa.
Ze wszystkich rzeczy, których próbowałem,
len
najbardziej konsekwentnie dostawałem duże dowody tożsamości.Uzyskano 13916486568675240 (17 cyfr) na moim komputerze i 13842722750490216 (także 17 cyfr) na tej stronie . Przypuszczam, że jest to możliwe, aby dać ci tak niskie, jak 0, ale może również wzrosnąć.
źródło
calculate
nic.*99
część wywołuje obliczenia.id(id)
lubid(0j)
, możesz pomnożyć przez999
vars
konsekwentnie daje najwyższą wartość (ale 4 znaki), a następniesum
. Użyj,print(sorted([(id(x),x)for x in[id,len,max,min,str,int,ord,chr,sum,map,abs,all,any,bin,bool,eval,oct,vars,iter,list,set,repr,round,zip,type,pow,dict,dir,hex]])[::-1])
aby sprawdzić.Golfscript, 1e + 33,554,432
Obliczenia
10 ^ (2 ^ 25)
bez użycia wykładników działają w 96 sekund:Może obliczyć, nawet
9 ^ (2 ^ 9999)
jeśli ma wystarczającą ilość czasu, ale zwiększenie wewnętrznego wykładnika o jeden powoduje potrojenie czasu, więc limit jednej godziny zostanie wkrótce osiągnięty.Objaśnienie :
Używanie poprzedniej wersji z tym samym pomysłem:
Podział:
Stos na początku każdego bloku składa się z jednej liczby, bieżącej liczby. Zaczyna się to jako
8
. Następnie:Tak więc stos, krok po kroku, wygląda następująco:
... itd. Postęp zapisany w notacji matematycznej jest następujący:
źródło
wc
. Zmienię, aby było jaśniejwc -c
aby uzyskać wyraźniejszy wynik10{.*}25
dostarcza 33.554.434 cyfry i kończy się w 90 sekundach na mojej maszynie. Nie wiem dlaczego, ale10{.*}26*
nic nie drukuje.wxMaxima ~ 3x10 49 948 (lub 10 8,565,705,514 )
Dane wyjściowe to
Nie jestem pewien, czy to całkiem pasuje do specyfikacji (szczególnie jeden format wyjściowy), ale mogę trafić jeszcze większy:
Dane wyjściowe to
To mniej więcej 10 8 655 705 514, co jest znacznie większe niż większość najlepszych odpowiedzi i zostało obliczone w około 2 sekundy.
bfloat
Funkcja daje dowolną dokładnością .źródło
Haskell, 4950
Ooo stary, to niewiele. 10 znaków zaczyna się po znaku dolara.
źródło
print
? Ponadto9/0.000001
jest większy niżsum[1..99]
.Mathematica, 2.174188391646043 * 10 ^ 20686623745
Dokładnie dziesięć znaków.
źródło
Powłoka Python,
649539999890001Pokonuje Haskella, niezbyt poważna odpowiedź.
źródło
calculate
odpowiedzi.9**9**9**9
jest poprawna, ponieważ jest operatorem arytmetycznym (nie wbudowanym func).Wolfram Alpha (czy witryna liczy się jako język)?
wyjścia
dzięki Cory za wskazówkę, że spacje działają tak samo jak pareny.
źródło
((99!)!)! > 4
nigdy nie powraca.Befunge-93 (1 853 020,188,851,841)
Cieszę się, że nikt jeszcze nie zrobił Befunge (to moja nisza), ale do cholery nie mogę znaleźć sprytnej sztuczki, aby zwiększyć liczbę.
To jest 9 ^ 16.
Zasadniczo mnoży wartość na górze stosu z samym sobą. Tak więc wartość na górze stosu wynosi:
i
Zwraca wartość końcową. Byłbym zainteresowany, aby zobaczyć, czy ktoś ma jakieś lepsze pomysły.
źródło
Wolę opublikować to jako komentarz powyżej, ale najwyraźniej nie mogę, ponieważ jestem noobem.
Pyton:
9<<(2<<29)
Wybrałbym większą zmianę bitów, ale Python wydaje się, że właściwym operandem zmiany jest niecałkowita liczba całkowita. Myślę, że zbliża się to do teoretycznego maksimum:
9<<(7<<27)
Jedynym problemem jest to, że mogą one nie spełniać reguły 5.
źródło
Matlab (1.7977e + 308)
Matlab przechowuje wartość największej (podwójnej precyzji) liczby zmiennoprzecinkowej w zmiennej o nazwie
realmax
. Wywołanie go w oknie poleceń (lub w wierszu poleceń) powoduje wydrukowanie jego wartości:źródło
realmax+1
. Wypróbowałem to dla zabawy i zaskakuje, że zwraca dokładnie taką samą liczbę jak ty (potem się roześmiałem, kiedy zdałem sobie sprawę ...eps(realmax)=1.99584030953472e+292
).Python, ca. 1,26e1388
Daje:
źródło
Co najmniej Python 3.5.0 (64-bitowy), więcej niż 10 ^ 242944768872896860
W idealnym świecie byłoby to
9<<(1<<63)-1
, ale nie ma na to wystarczającej ilości bajtów. Liczba ta jest tak duża, że do jej przechowywania potrzeba prawie 1 EiB pamięci, czyli nieco więcej niż na komputerze. Na szczęście potrzebujesz tylko około 0,2% światowej przestrzeni dyskowej na zamianę. Po wartości binarnej1001
następują zera 8070450532247928832.Jeśli Python wyjdzie na maszyny 128-bitowe, maksymalna będzie
9<<(9<<99)
, która wymaga mniej niż 1 MiYiB pamięci. Jest to dobre, ponieważ masz wystarczająco dużo miejsca adresowalnego do przechowywania interpretera Pythona i systemu operacyjnego.źródło
Cubix , 9.670457478596419e + 147 (niekonkurencyjny)
Nie konkuruje, ponieważ Cubix jest nowszy niż to wyzwanie. Możesz go przetestować online tutaj , ale pamiętaj, że tak naprawdę nie drukuje numeru; będziesz musiał zatrzymać program po uruchomieniu dwóch ostatnich
*
s, aby zobaczyć wartość na stosie.Jak to działa
Cubix to dwuwymiarowy esolang, w którym kod jest owinięty wokół sześcianu. Ten kod jest dokładnie równoważny z następującą siatką kostki, gdzie
.
nie ma operacji :Następnie uruchamiany jest kod ze wskaźnikiem instrukcji (IP) rozpoczynającym się w lewym górnym rogu skrajnie lewej strony, skierowanym w prawo.
"
włącza tryb łańcuchowy, w którym wszystkie znaki zostały napotkane, aż do następnego"
wypchnięcia kodów znaków na stos. Adres IP owija się wokół kodu, wypychając trzy/
s (47), dwa*
s (42) i dwa.
s (46) na stos, zanim ponownie opuści tryb ciągów.Oto, gdzie robi się ciekawie. Pierwsze lustro
/
odbija adres IP, więc jest skierowane do góry; następnie obraca się wokół sześcianu, uderzając w następujące znaki:Te trzy
*
s mnożą dwa górne elementy na stosie. Teraz, w przeciwieństwie do większości języków opartych na stosie, w których operatory arytmetyczne wstawiają argumenty, Cubix pozostawia poprzednie wartości na stosie. Oznacza to, że to się oblicza46*46 = 2116, 46*2116 = 97336, 2116*97336 = 205962976
.Kiedy adres IP osiągnie
/
ponownie, jest skręcony w prawo. Następnie uderza w następne lustro i podąża następującą ścieżką:Dwie gwiazdki ponownie pomnożą dwa górne elementy. Następnie lustro ponownie kieruje adres IP, a trzecie lustro powtarza proces jeszcze raz:
Wreszcie, IP opuszcza sekcję lustrzaną kierując się na wschód. Dwie ostatecznie gwiazdki mnożą się jeszcze dwa razy, pozostawiając wynik 9.670457478596419e + 147 na stosie. Można to wydrukować
O
, ale nie jest to łatwy sposób, ponieważ praktycznie każde miejsce na kostce jest już zajęte.źródło
Scala, 2 63 -1
Biedna, biedna Scala. Aby uzyskać
BigInt
wartość, potrzeba co najmniej 8 znaków , co nie pozostawia wystarczającej ilości miejsca, aby ją zwiększyć.Ale tylko 7 znaków (policzonego) kodu możemy wydrukować jak największy pozytyw
Long
:źródło
Brainf ** k 256 - 2147483647
Jeśli zignorujesz fakt, że większość kompilatorów i interpreterów wyprowadza dane, ponieważ są one równoważne ascii (bądź leanient, tak właśnie jest;)) , zwróci to maksymalną wartość typu danych interpretera / kompilatora.
W niektórych systemach jest to tylko 256, choć w niektórych (na przykład mój), jest to maksymalna wartość 32-bitowej liczby całkowitej, tj. 2 147 483 647.
Edytować:
Wydrukuje to samo o wiele mniej znaków
źródło
-1
na tłumaczach, którzy używają podpisanych wartości dla taśmyPerl, niekonkurujący
Używam tego, aby podświetlić trochę znanego kąta perla.
Perl tak naprawdę nie może konkurować z tym, ponieważ nie ma wbudowanych bignum (oczywiście można załadować bibliotekę bignum).
Ale to, co wszyscy wiedzą, nie jest do końca prawdą. Jedna podstawowa funkcja faktycznie obsługuje duże liczby.
pack
Formatw
może rzeczywiście przekształcić dowolny rozmiar liczbę naturalną między bazą10
i podstawą128
. Podstawowa liczba całkowita 128 jest jednak reprezentowana jako bajty łańcuchowe. Łańcuchxxxxxxxyyyyyyyzzzzzzz
bitów staje się bajtami:1xxxxxxx 1yyyyyyy 0zzzzzzz
(każdy bajt zaczyna się od 1 oprócz ostatniego). I możesz przekonwertować taki ciąg na bazę 10 z rozpakowaniem. Możesz więc napisać kod taki jak:co daje:
Możesz zastąpić
4**4
je większymi wartościami, aż poczujesz, że to trwa zbyt długo lub zużywa zbyt dużo pamięci.Niestety jest to zdecydowanie za długo na limit tego wyzwania i można argumentować, że wynik 10 jest konwertowany na ciąg znaków, zanim stanie się wynikiem, więc wyrażenie tak naprawdę nie generuje liczby. Ale wewnętrznie perl naprawdę wykonuje arytmetykę, aby przekonwertować dane wejściowe na bazę 10, co zawsze uważałem za dość porządne.
źródło
TI-36 (nie 84, 36), 10 bajtów, ok. 9,999985426E99
Starsze kalkulatory można również programować w pewnym zakresie;)
69!58.4376
Jest to bardzo zbliżone do maksymalnego zakresu, jaki może wyświetlić kalkulator TI:
-1E100<x<1E100
źródło
Perl 6 , 456 574 cyfr
Brak TIO, ponieważ uruchomienie zajmuje 2 minuty.
źródło