Tujuan Anda adalah menulis program yang mencetak angka. Semakin besar angkanya, semakin banyak poin yang akan Anda dapatkan. Tetapi berhati-hatilah! Panjang kode dibatasi dan sangat tertimbang dalam fungsi penilaian. Nomor cetak Anda akan dibagi dengan kubus jumlah byte yang Anda gunakan untuk solusi Anda .
Jadi, katakanlah Anda mencetak 10000000
dan kode Anda 100
panjang byte. Skor akhir Anda akan menjadi 10000000 / 100^3 = 10
.
Ada aturan lain yang harus diikuti, untuk membuat tantangan ini sedikit lebih sulit.
- Anda tidak dapat menggunakan angka dalam kode Anda (0123456789);
- Anda dapat menggunakan matematika / fisik / dll. konstanta, tetapi hanya jika mereka kurang dari 10. (mis. Anda dapat menggunakan Pi ~ = 3.14 tetapi Anda tidak dapat menggunakan konstanta Avogadro = 6e23)
- Rekursi diperbolehkan tetapi nomor yang dihasilkan harus terbatas (sehingga tak terbatas tidak diterima sebagai solusi. Program Anda harus berakhir dengan benar, dengan asumsi waktu dan memori tidak terbatas, dan menghasilkan output yang diminta);
- Anda tidak dapat menggunakan operasi
*
(gandakan),/
(membagi),^
(daya) atau cara lain untuk menunjukkannya (misalnya2 div 2
tidak diizinkan); - Program Anda dapat menampilkan lebih dari satu nomor, jika Anda memerlukannya . Hanya yang tertinggi yang akan dihitung untuk penilaian;
- Namun, Anda dapat menyatukan string: ini berarti bahwa setiap urutan digit yang berdekatan akan dianggap sebagai angka tunggal;
- Kode Anda akan dijalankan apa adanya. Ini berarti bahwa pengguna akhir tidak dapat mengedit baris kode apa pun, atau ia dapat memasukkan nomor atau apa pun;
- Panjang kode maksimum adalah 100 byte.
Papan peringkat
- 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, ≈ a 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
- rekursif , Python, ≈ 2↑↑ 11/95 3 ≈ 10 ↑↑ 8.63297 [1] [3]
- nm , Haskell, ≈ 2↑↑ 7/100 3 ≈ 10 ↑↑ 4.63297 [1]
- David Yaw , C, ≈ 10 10 4 × 10 22 /83 3 ≈ 10 ↑↑ 4,11821 [2]
- primo , Perl, ≈ 10 (12750684161!) 5 × 2 27 /100 3 ≈ 10 ↑↑ 4,11369
- Seni , C, ≈ 10 10 2 × 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 × (2 64 ) 4 /100 3 ≈ 10 ↑↑ 3,28039
- Joshua , bash, ≈ 10 10 15 /86 3 ≈ 10 ↑↑ 3,07282
Catatan kaki
- Jika setiap elektron di alam semesta adalah qubit, dan setiap superposisi darinya dapat secara menguntungkan digunakan untuk menyimpan informasi (yang, selama Anda tidak benar-benar perlu tahu apa yang disimpan secara teori dimungkinkan), program ini membutuhkan lebih banyak memori daripada yang bisa mungkin ada, dan karena itu tidak dapat dijalankan - sekarang, atau pada titik apa pun di masa depan. Jika penulis bermaksud untuk mencetak nilai yang lebih besar dari ≈3 ↑↑ 3.28 sekaligus, kondisi ini berlaku.
- Program ini membutuhkan lebih banyak memori daripada yang ada saat ini, tetapi tidak begitu banyak sehingga secara teoritis tidak dapat disimpan pada sejumlah qubit yang sedikit, dan karena itu suatu hari komputer mungkin ada yang dapat menjalankan program ini.
- Semua penerjemah yang ada saat ini mengeluarkan kesalahan runtime, atau program lain gagal untuk mengeksekusi sebagaimana yang dimaksudkan penulis.
- Menjalankan program ini akan menyebabkan kerusakan yang tidak dapat diperbaiki pada sistem Anda.
Sunting @primo : Saya telah memperbarui sebagian papan skor menggunakan notasi yang mudah-mudahan lebih mudah untuk dibandingkan, dengan desimal untuk menunjukkan jarak logaritmik ke kekuatan yang lebih tinggi berikutnya. Misalnya 10 ↑↑ 2,5 = 10 10 √10 . Saya juga telah mengubah beberapa skor jika saya percaya analisis pengguna salah, silakan membantah semua ini.
Penjelasan dari notasi ini:
Jika 0 ≤ b < 1
demikian .a↑↑b = ab
Jika b ≥ 1
demikian .a↑↑b = aa↑↑(b-1)
Jika b < 0
demikian .a↑↑b = loga(a↑↑(b+1))
12e10
(12 * 10 ^ 10) sebagai12*10^10
?500b
, apakah ini tidak benar? Yaitu, bisakah kita mengabaikan semua hal non-numerik yang dicetak oleh program? Dan jika demikian, apakah sesuatu seperti50r7
dihitung507
?Jawaban:
GolfScript; skor setidaknya f ε_0 + ω + 1 (17) / 1000
Mengikuti saran res untuk menggunakan Lifetime of a worm answer untuk pertanyaan ini, saya menyajikan dua program yang jauh lebih baik pada turunannya dari solusi Howard.
Mereka berbagi awalan umum, modulo nama fungsi:
menghitung di
g(g(1)) = g(5)
manag(x) = worm_lifetime(x, [x])
tumbuh kira-kira sebagai f ε 0 (yang catatan res adalah "fungsi dalam hierarki yang tumbuh cepat yang tumbuh pada tingkat yang kira-kira sama dengan fungsi Goodstein").(!) Yang sedikit lebih mudah untuk dianalisis adalah
.{foo}*
petax
kefoo^x x
.dengan demikian memberi
g^(g(5)) ( g(5) )
; 8 level lebih lanjut dari iterasi mirip dengan rantai panah. Untuk mengungkapkan dalam istilah sederhana: jikah_0 = g
danh_{i+1} (x) = h_i^x (x)
kemudian kita hitungh_10 (g(5))
.Saya pikir program kedua ini hampir pasti skornya jauh lebih baik. Kali ini label yang ditugaskan untuk berfungsi
g
adalah baris baru.Kali ini saya menggunakan lebih baik
^
sebagai fungsi yang berbeda.mengambil
x
tumpukan, dan daunx
diikuti oleh string yang berisix
salinan.{
diikuti olehg
diikuti olehx
salinan}*
; kemudian mengevaluasi string. Karena saya memiliki tempat yang lebih baik untuk membakar karakter cadangan, kami mulai denganj_0 = g
; jikaj_{i+1} (x) = j_i^x (x)
kemudian evaluasi pertama^
menghitungj_{g(5)} (g(5))
(yang saya yakin sudah mengalahkan program sebelumnya). Saya kemudian mengeksekusi^
16 kali lebih banyak; jadi jikak_0 = g(5)
dank_{i+1} = j_{k_i} (k_i)
kemudian menghitungk_17
. Saya bersyukur (lagi) untuk res untuk memperkirakan bahwak_i
>> f ε_0 + ω + 1 (i).sumber
.{foo}*
petax
kefoo^x (x)
. Jika kita mengambilh_0 (x) = g^4 (x)
danh_{i+1} (x) = h_i^x (x)
kemudian nilai yang dihitung adalahh_9 (g(3))
. Andaf(x) = g^(4x) (x) = h_0^x (x) = h_1 (x)
.*
kerjanya. Aman untuk mengatakan bahwa h_0 (x) = g ^ 4 (x) >> f_eps_0 (x); akibatnya, hubungan h_ {i + 1} (x) = h_i ^ x (x) secara efektif mendefinisikan hierarki yang "dipercepat" dengan cepat sehingga h_i (x) >> f_ (eps_0 + i) (x). Yaitu, angka yang dihitung h_9 (g (3)) tentu saja jauh lebih besar daripada f_ (eps_0 + 9) (g (3)). Adapun g (3), saya pikir saya bisa menunjukkan bahwa itu lebih besar dari g_4, angka keempat dalam urutan g_i yang digunakan untuk mendefinisikan nomor Graham (yaitu g_64).j_i ~ f_{eps_0 + i}
; apakah yang membuatk_i ~ f_{eps_0 + i omega + i^2}
?k_i ~ f_{ε_0 + ω}^i (k_0)
. Inilah alasannya: 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), jadi k_i ~ f_ {ε_0 + ω} ^ i (k_0). Batas bawah yang sangat konservatif pada k_i, seluruhnya dalam hal hierarki yang tumbuh cepat, adalahk_i >> f_{ε_0 + ω}^i (i) = f_{ε_0 + ω + 1} (i)
.Windows 2000 - Windows 8 (3907172 / 23³ = 321)
CATATAN: JANGAN MENCARI KERJA INI!
Simpan yang berikut ini ke file batch dan jalankan sebagai Administrator.
Output saat dijalankan pada drive 4TB dengan angka yang dicetak pertama dalam huruf tebal.
sumber
Your printed number will be divided for the number of bytes you used for your solution^3.
GolfScript, skor: cara terlalu banyak
OK, seberapa besar angka yang bisa kita cetak dalam beberapa karakter GolfScript?
Mari kita mulai dengan kode berikut ( terima kasih, Ben! ), Yang mencetak
126
:Selanjutnya, mari kita ulangi 126 kali, memberi kita angka sama dengan sekitar 1,26126 × 10 377 :
(Itu pengulangan string, bukan perkalian, jadi itu harus OK di bawah aturan.)
Sekarang, mari kita ulangi bahwa jumlah 378-digit sedikit lebih dari 10 377 kali:
Anda tidak akan pernah benar-benar melihat program ini selesai, karena mencoba menghitung angka dengan sekitar 10 380 ≈ 2 1140 angka. Tidak ada komputer yang pernah dibangun dapat menyimpan angka sebesar itu, juga komputer seperti itu tidak akan dapat dibangun menggunakan fisika yang dikenal; yang jumlah atom di alam semesta teramati diperkirakan sekitar 10 80 , bahkan jika kita entah bagaimana bisa menggunakan semua materi di alam semesta untuk menyimpan sejumlah besar ini, kita akan masih entah harus menjejalkan sekitar 10 380 /10 80 = 10 300 digit ke dalam setiap atom!
Tetapi mari kita asumsikan bahwa kita memiliki juru bahasa GolfScript milik Tuhan sendiri, yang mampu menjalankan perhitungan seperti itu, dan kita masih belum puas. Oke, ayo lakukan itu lagi!
Output dari program ini, jika bisa selesai, akan memiliki sekitar 10 10 383 digit, dan akan sama dengan sekitar 10 10 10 383 .
Tapi tunggu! Program itu semakin berulang ... mengapa kita tidak mengubahnya menjadi satu lingkaran?
Di sini, tubuh loop akan dijalankan sekitar 10 377 kali, memberikan kita output teoritis yang terdiri dari sekitar 10 10⋰ 10 377 digit atau lebih, di mana menara kekuatan iterasi dari 10 adalah sekitar 10 377 langkah panjang. (Sebenarnya, itu adalah perkiraan yang terlalu rendah, karena saya mengabaikan fakta bahwa jumlah yang diulang juga semakin lama, tetapi secara relatif itu adalah masalah kecil.)
Tapi kita belum selesai. Mari tambahkan loop lain!
Bahkan untuk menuliskan perkiraan angka-angka tersebut dengan benar diperlukan notasi matematika esoterik. Sebagai contoh, dalam notasi panah atas Knuth , jumlah (secara teoritis) output oleh program di atas harus sekitar 10 ↑ 3 10 377 , memberi atau mengambil beberapa (atau 10 377 ) kekuatan sepuluh, dengan asumsi saya melakukan matematika dengan benar.
Angka-angka seperti ini melampaui "luar biasa besar", dan masuk ke ranah "tak terbayangkan". Seperti dalam, tidak hanya tidak mungkin untuk menghitung hingga atau menuliskan angka-angka seperti itu (kami sudah melewati titik itu pada contoh ketiga di atas), tetapi mereka benar-benar tidak memiliki penggunaan atau keberadaan yang mungkin di luar matematika abstrak. Kita dapat membuktikan, dari aksioma matematika , bahwa angka-angka seperti itu ada, sama seperti kita dapat membuktikan dari spesifikasi GolfScript bahwa program di atas akan menghitungnya, jika batas-batas realitas dan ruang penyimpanan yang tersedia tidak campur tangan), tetapi secara harfiah tidak ada dalam alam semesta fisik yang dapat kita gunakan untuk menghitung atau mengukur dalam arti apa pun.
Meski begitu, ahli matematika terkadang menggunakan angka yang bahkan lebih besar . (Secara teoritis) angka komputasi yang besar membutuhkan sedikit lebih banyak pekerjaan - alih-alih hanya mengumpulkan lebih banyak loop satu demi satu, kita perlu menggunakan rekursi untuk mengukur kedalaman loop loop yang bersarang. Namun, pada prinsipnya, mungkin untuk menulis sebuah program GolfScript pendek (jauh di bawah 100 byte, saya harapkan) untuk (secara teoritis) menghitung angka yang dapat diekspresikan dalam, katakanlah, notasi notasi panah dirangkai Conway ; detail dibiarkan sebagai latihan. ;-)
sumber
"...No computer ever built could store a number that big...
Koreksi saya jika saya salah, tetapi saya rasa itu tidak berlaku di sini. Bukankah itu hanya berulang kali "menyimpan" dan mencetak 3 digit sekaligus (?) Sehingga tidak perlu menyimpan hasil akhir.JavaScript 44 karakter
Ini mungkin tampak sedikit curang:
alert((Math.PI+''+Math.E).replace(/\./g,""))
Nilai = 31415926535897932718281828459045/44 ^ 3 ≈ 3.688007904758867e + 26 ≈ 10 ↑↑ 2.1536134004
sumber
"."
untuk menggantikan/\./g
m=Math,p=m.PI,e=m.E,s="",alert((p*p*p+s+e*e*e).replace(/\./g,s))
sebagai gantinya, skor Anda adalah 3100627668029981620085536923187664/63 ^ 3 = 1,240017943838551e + 28C, skor = 10 10 97.61735 / 98 3 ≈ 10 ↑↑ 2.29874984
Saya menghargai bantuan dalam mencetak gol. Setiap wawasan atau koreksi sangat dihargai. Inilah metode saya:
n = penggabungan setiap angka dari 1 hingga 2 64 -1, diulangi (2 64 -1) 4 kali . Pertama, inilah cara saya memperkirakan (rendah) jumlah kumulatif digit dari 1 hingga 2 64 -1 ("urutan"): Angka terakhir dalam urutan urutan adalah 2 64 -1 =
18446744073709551615
dengan 20 digit. Dengan demikian, lebih dari 90% dari angka di bagian selanjutnya (yang dimulai dengan1
..9
) memiliki 19 digit. Mari kita asumsikan sisa 10% rata-rata 10 digit. Ini akan menjadi lebih dari itu, tetapi ini adalah perkiraan rendah untuk matematika mudah dan tidak ada kecurangan. Selanjutnya akan diulangi (2 64 -1) 4 kali, jadi panjangnya dari n akansetidaknya (0,9 × (2 64 -1) × 19 + 0,1 × (2 64 -1) × 10) × (2 64 -1) 4 = 3,86613 × 10 97 digit. Dalam komentar di bawah ini, @primo mengonfirmasi panjang n menjadi 4,1433x10 97 . Jadi n itu sendiri akan 10 pangkat itu, atau 10 10 97.61735 .l = 98 karakter kode
skor = n / l 3 = 10 10 97.61735 / 98 3
Persyaratan: Harus dijalankan di komputer 64-bit di mana
sizeof(long) == 8
. Mac dan Linux akan melakukannya.sumber
'z'
adalah nilai konstan122
. Baik?printf("%d",n)
akan membuat jumlahnya jauh lebih besar. Juga, komputer 64-bit tidak berarti panjang 64-bit, misalnya Windows menggunakan model LLP64 selama masih 32 bit0..2^64-1
persis 357823770363079921190 digit.(2^64-1)^4
Waktu yang berulang adalah 4.1433x10 ^ 97. Ambil 10 hingga kekuatan itu adalah10^10^97.61735
≈ 10 ↑↑ 3.29875. Saya pikir Anda mengklaim kekuatan sepuluh Anda tidak memiliki (perhatikan di mana3.866×10^97
menjadi3.866^10^97
2.0
bukan97
.10^10^10^2.00
=10^10^97.6
. Saya akan mencerminkan itu dalam skor saya sekarang.Python 3 - 99 karakter - (kemungkinan besar) secara signifikan lebih besar dari jumlah Graham
Saya datang dengan fungsi yang lebih cepat meningkat berdasarkan perluasan fungsi Ackermann.
http://fora.xkcd.com/viewtopic.php?f=17&t=31598 menginspirasi saya, tetapi Anda tidak perlu melihat ke sana untuk memahami nomor saya.
Ini adalah versi modifikasi dari fungsi ackermann yang akan saya gunakan dalam analisis saya:
Fungsi saya
A
dalam kode di atas secara teknis tidak sama, tetapi sebenarnya lebih kuat, dengan pernyataan berikut untuk menggantikan baris ketiga dari definisi di atas:(a harus minimal 1, jadi itu harus lebih kuat)
Tetapi untuk tujuan saya, saya akan berasumsi bahwa itu sama dengan yang lebih sederhana, karena analisisnya sudah sebagian dilakukan untuk fungsi Ackermann, dan karena itu untuk fungsi ini ketika memiliki dua argumen.
Fungsi saya dijamin untuk akhirnya berhenti berulang karena selalu: menghilangkan argumen, mengurangi argumen pertama, atau mempertahankan argumen pertama yang sama dan mengurangi argumen kedua.
Analisis ukuran
Nomor Graham, AFAIK, dapat direpresentasikan dengan
G(64)
menggunakan:Dimana a
↑^(n)
adalah not panah atas knuth.Demikian juga:
Angka yang dinyatakan dalam program di atas adalah
A(0,1,2,3,4,...,123,124,125)
.Karena
g^64(4)
itu nomor Graham, dan anggaplah matematika saya benar maka itu kurang dariA(1,64,100)
, angka saya jauh lebih besar dari angka Graham.Tolong tunjukkan kesalahan dalam matematika saya - meskipun jika tidak ada, ini harus menjadi jumlah terbesar yang dihitung sejauh ini untuk menjawab pertanyaan ini.
sumber
range(ord('~'))
? Tidak bisakah Anda melakukanrange(125)
byte lebih sedikit, yang akan memungkinkan Anda untuk memeras dalam jumlah yang lebih tinggi sepertirange(A(9,9,9))
?Perl - skor ≈ 10 ↑↑ 4.1
Sekali lagi menyalahgunakan mesin regex perl untuk menggiling melalui jumlah kombinasi yang tak terbayangkan, kali ini menggunakan keturunan rekursif.
Di dalam sebagian besar ekspresi, kita memiliki yang telanjang
.
untuk mencegah rekursi tak terbatas, dan dengan demikian membatasi tingkat rekursi dengan panjang tali.Yang akan kita akhiri adalah:
... diulang 671088640 kali, dengan total 12750684161 bersarang - yang cukup menyeluruh menempatkan upaya saya sebelumnya 23 bersarang menjadi malu. Hebatnya, perl bahkan tidak tersedak ini (sekali lagi, penggunaan memori tetap stabil di sekitar 1.3GB), meskipun akan memakan waktu cukup lama sebelum pernyataan cetak pertama bahkan dikeluarkan.
Dari analisis saya sebelumnya di bawah ini, dapat disimpulkan bahwa jumlah output digit akan berada di urutan (! 12750684161) 671088640 , di mana ! K adalah Faktor Kiri dari k (lihat A003422 ). Kami dapat memperkirakan ini sebagai (k-1)! , Yang benar-benar lebih kecil, tetapi pada urutan yang sama besarnya.
Dan jika kita bertanya pada wolframalpha :
... yang nyaris tidak mengubah skor saya sama sekali. Saya pikir pasti itu setidaknya 10 ↑↑ 5 . Saya kira perbedaan antara 10 ↑↑ 4 dan 10 ↑↑ 4.1 jauh lebih besar dari yang Anda kira.
Perl - skor ≈ 10 ↑↑ 4
Menyalahgunakan mesin perl regex untuk melakukan beberapa kombinatorik untuk kita. Codeblock yang tertanam
(??{print})
akan memasukkan hasilnya langsung ke regex. Karena$_
seluruhnya terdiri dari2
s (dan hasilnyaprint
selalu1
), ini tidak pernah bisa cocok, dan mengirim perl berputar melalui semua kombinasi yang mungkin, yang ada beberapa.Konstanta digunakan
$^F
- pegangan file sistem maksimum, biasanya2
.$]
- nomor versi perl, mirip dengan5.016002
.$_
kemudian string berisi digit yang2
diulang 671088640 kali. Penggunaan memori konstan pada sekitar 1,3GB, output dimulai segera.Analisis
Mari kita mendefinisikan P k (n) menjadi berapa kali pernyataan cetak dieksekusi, di mana k adalah jumlah sarang, dan n adalah panjang dari string ditambah satu (hanya karena saya tidak merasa ingin menulis n + 1 dimana mana).
(.*.*)*
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, ... ]
dll. Secara umum, rumus dapat digeneralisasi sebagai berikut:
dimana
Yaitu, Faktor Kiri dari k , yaitu jumlah semua faktorial kurang dari k (lihat A003422 ).
Aku sudah tidak dapat menentukan bentuk tertutup untuk D k dan E k , tapi ini tidak peduli terlalu banyak, jika kita mengamati bahwa
dan
Dengan 23 sarang, ini memberi kami skor perkiraan:
Ini seharusnya hampir tepat, sebenarnya.
Tetapi untuk menempatkan ini ke dalam notasi yang sedikit lebih mudah untuk divisualisasikan, kita dapat memperkirakan basis eksponen dalam:
dan kemudian eksponen itu sendiri:
dan kemudian bertanya wolframalpha :
yang Anda mungkin juga hanya memanggil 10 ↑↑ 4 dan selesai dengan itu.
sumber
Javascript, 10 ↑↑↑↑ 210
100 karakter:
Berdasarkan pengamatan bahwa iterasi maksimal
f
adalah cara optimal untuk pergi, saya mengganti 13 panggilanf
dengan 3 level panggilan bersarangf
,z
setiap kali (sambilf
terus meningkatz
).Saya memperkirakan skor secara analitis pada selembar kertas — saya akan mengetiknya jika ada yang tertarik melihatnya.
Skor yang ditingkatkan: 10 ↑↑ 13
Javascript, persis 100 karakter, lagi:
Ini meningkatkan jawaban asli saya dalam tiga cara—
Menentukan
z
ruang lingkup global menyelamatkan kita dari keharusan mengetiko.z
setiap waktu.Dimungkinkan untuk menentukan pengambil pada lingkup global (jendela) dan mengetik
f
alih-aliho.f
.Memiliki lebih banyak iterasi
f
bernilai lebih dari memulai dengan angka yang lebih besar, jadi daripada(Math.E+'').replace('.','')
(= 2718281828459045, 27 karakter), lebih baik menggunakan~~Math.E+''
(= 2, 11 karakter), dan menggunakan karakter yang diselamatkan untuk meneleponf
berkali-kali.Karena, sebagaimana dianalisis lebih lanjut di bawah, setiap iterasi menghasilkan, dari angka dalam urutan magnitudo M , angka yang lebih besar dalam urutan magnitudo 10 M , kode ini menghasilkan setelah setiap iterasi
Nilai: ∼10 10 10 10 10 16 ≈ 10 ↑↑ 6.080669764
Javascript, persis 100 karakter:
Masing-masing
o.f
memanggil loop sementara, dengan total 5 loop. Setelah hanya iterasi pertama, skor sudah lebih dari 10 42381398144233621 . Dengan iterasi kedua, Mathematica tidak dapat menghitung bahkan jumlah digit dalam hasil.Berikut panduan kode:
Init
Mulai dengan 2718281828459045 dengan menghapus titik desimal dari
Math.E
.Iterasi 1
Menggabungkan urutan penurunan angka,
untuk membentuk nomor (raksasa) baru,
Berapa angka dalam angka ini? Yah, ini adalah gabungan dari
Dalam Mathematica,
Dengan kata lain, ini adalah 2.72⋅10 42381398144233625 .
Membuat skor saya, setelah hanya iterasi pertama, 2.72⋅10 42381398144233619 .
Iterasi 2
Tapi itu baru permulaan. Sekarang, ulangi langkahnya, dimulai dengan angka raksasa ! Artinya, merangkai urutan angka yang menurun,
Jadi, berapa skor baruku, Mathematica?
Iterasi 3
Ulangi.
Iterasi 4
Ulangi.
Iterasi 5
Ulangi.
Skor Analitik
Dalam iterasi pertama, kami menghitung jumlah digit dalam rangkaian urutan menurun mulai dari 2718281828459045, dengan menghitung jumlah digit dalam
Jumlah ini dapat direpresentasikan dengan rumus,
di mana Z menunjukkan angka awal ( mis. 2718281828459045) dan O Z menunjukkan urutan besarnya ( misalnya 15, karena Z ∼ 10 15 ). Menggunakan kesetaraan untuk jumlah terbatas , hal di atas dapat dinyatakan secara eksplisit sebagai
yang, jika kita ambil 9 ≈ 10, semakin berkurang
dan, akhirnya, memperluas persyaratan dan memesannya dengan mengurangi urutan besarnya, kami dapatkan
Sekarang, karena kita hanya tertarik pada urutan besarnya hasil, mari gantikan Z dengan "angka dalam urutan besarnya O Z ," yaitu 10 O Z -
Akhirnya, persyaratan ke-2 dan ke-3 dibatalkan, dan dua istilah terakhir dapat dibatalkan (ukurannya sepele), sehingga kami
dari mana istilah pertama menang.
Disajikan kembali,
f
ambil angka dalam urutan besarnya M dan menghasilkan angka kira-kira dalam urutan besarnya M (10 M ).Iterasi pertama dapat dengan mudah diperiksa dengan tangan. 2718281828459045 adalah angka dalam urutan besarnya 15 — oleh karena itu
f
harus menghasilkan angka dalam urutan besarnya 15 (10 15 ) ∼ 10 16 . Memang, jumlah yang dihasilkan adalah, dari sebelumnya, 2.72⋅10 42381398144233625 —yaitu, 10 42381398144233625 ∼ 10 10 16 .Memperhatikan bahwa M bukan merupakan faktor yang signifikan dalam M (10 M ), urutan besarnya hasil setiap iterasi, kemudian, mengikuti pola sederhana tetrasi:
Sumber LaTeX
sumber
f
melakukan sesuatu seperti mengambil angkaz
dengan kekuatannya sendiri. Jadi seperti itulah↑↑↑
. Tentu saja nilainya tidak2↑↑↑2
, maaf ...2↑↑↑5+1
sepertinya. Apakah Anda setuju, haruskah saya letakkan itu di papan peringkat?i=o.z;while(i--)...
Anda tidak mengeksekusi waktu loopo.z
, karena loop didasarkan pada variabel integer dano.z
berisi string yang lebih besar dari integer representable terbesar, tergantung pada ukuran kata juru bahasa Anda. Andaikata untuk kepentingan Anda bahwa penerjemah Anda tidak akan muntah dalam mengkonversi string tersebut menjadi int,i
akan mulai setiap kali dengan nilai integer representable terbesarnya, katakanlah 2 ^ 63, dan tidak dengan nilai saat ini dario.z
.APL, 10 ↑↑ 3.4
Inilah upaya saya yang telah direvisi:
Program 100 char / byte *, berjalan pada perangkat keras saat ini (menggunakan jumlah memori yang dapat diabaikan dan variabel int 32-bit biasa) meskipun akan membutuhkan waktu yang sangat lama untuk diselesaikan.
Anda benar-benar dapat menjalankannya pada penerjemah APL dan itu akan mulai mencetak angka. Jika dibiarkan selesai, nomor itu akan dicetak dengan 10 × 123456789 44 digit.
Oleh karena itu nilai adalah 10 10 × 123456789 44 /100 3 ≈ 10 10 353 ≈ 10 ↑↑ 3,406161
Penjelasan
⎕D
adalah string konstan standar yang sama dengan'0123456789'
n←⍎⎕D
mendefinisikan n menjadi angka yang diwakili oleh string itu: 123456789 (yang <2 31 dan karenanya dapat digunakan sebagai variabel kontrol loop){⍞←⎕D}
akan mencetak 10 digit ke output standar, tanpa baris baru{⍞←⎕D}⍣n
akan melakukannya n kali (⍣
adalah "operator daya": itu bukan *, /, atau ^, karena itu bukan operasi matematika, itu semacam loop){⍞←n}⍣n⍣n
akan mengulangi operasi sebelumnya n kali, oleh karena itu mencetak 10 digit n 2 kali{⍞←n}⍣n⍣n⍣n
akan melakukannya n 3 kali⍣n
di sana, sehingga mencetak n 44 kali string'0123456789'
.⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
*: APL dapat ditulis dalam charset byte tunggal (lama) yang memetakan simbol APL ke nilai 128 byte atas. Oleh karena itu, untuk tujuan penilaian, program karakter N yang hanya menggunakan karakter ASCII dan simbol APL dapat dianggap sebagai panjang N byte.
sumber
100 cubed
(100 ^ 3) bagi saya.{⍞←⎕D}
untuk⍞←
yang akan menghemat tiga byte yang dapat Anda gunakan untuk menambah satu lagi⍣n
dan membuat⊢n←⍎⎕D
menjadi⌽⍕n←⍎⎕D
untuk peningkatan 80 kali lipat. Jika Anda mengizinkan berjalan dengan⎕PP←17
menggunakan×⍨
alih-alih⌽⍕
yang hampir dua kali lipat jumlah angka yang dicetak.Haskell, skor: (2 2 2 65536 -3) / 1000000 ≈ 2 ↑↑ 7 ≈ 10 ↑↑ 4.6329710779
Program ini persis 100 byte kode Haskell murni. Ini akan mencetak angka Ackermann keempat, yang pada akhirnya menghabiskan semua energi, materi, dan waktu Semesta yang tersedia dan seterusnya dalam proses (sehingga sedikit melebihi batas lunak 5 detik).
sumber
o=length[]
memberi Anda tambahan!q
di akhir dan menghemat satu byte di atas itu.Python, 2 ↑↑ 11/830584 ≈ 10 ↑↑ 8.632971 (Notasi panah naik)
Mungkin tidak ada komputer yang memiliki cukup memori untuk berhasil menjalankan ini, tapi itu bukan kesalahan program. Dengan terpenuhinya persyaratan sistem minimum, itu berhasil.
Ya, ini melakukan sedikit pergeseran pada nilai boolean.
True
dipaksa1
dalam konteks ini. Python memiliki bilangan bulat panjang yang berubah-ubah.sumber
print True<<(True<<(True<<(True<<True<<True)))
itu, dan itu menghasilkan string 19k.t=True
dan kemudian menggunakant
setelah?$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
Saya pikir
*
ini diperbolehkan karena ini menunjukkan pengulangan string, bukan perkalian.Penjelasan:
'~'(
akan meninggalkan 126 (nilai ASCII "~") di stack. Kemudian salin nomornya, konversikan menjadi string, dan lakukan pengulangan string sebanyak 126 kali. Ini memberi126126126126...
yang kira-kira1.26 e+377
. Solusinya adalah 7 karakter, jadi bagi dengan7^3
, untuk skor sekitar3.673e+374
sumber
Ruby, probabilistically infinite, 54 karakter
x diinisialisasi ke 97. Kami kemudian mengulangi prosedur berikut: Menghasilkan angka acak x antara 0 dan 1. Jika semuanya sama, maka akhiri dan cetak x. Jika tidak, gandakan x dan ulangi. Karena angka acak Ruby memiliki 17 digit presisi, peluang terminasi pada langkah apa pun adalah 1 in (10e17) ^ x. Karena itu, kemungkinan untuk mengakhiri dalam n langkah adalah jumlah untuk x = 1 hingga n dari (1 / 10e17) ^ (2 ^ n), yang konvergen ke 1 / 10e34. Ini berarti bahwa untuk angka berapa pun, tidak peduli seberapa besar, sangat tidak mungkin bahwa program ini menghasilkan angka yang lebih rendah.
Sekarang, tentu saja, pertanyaan filosofisnya adalah apakah suatu program yang memiliki peluang kurang dari 1 dalam 10 ^ 34 untuk diakhiri dengan langkah n untuk setiap n dapat dikatakan pernah berakhir. Jika kita mengasumsikan tidak hanya waktu dan tenaga yang tak terbatas, tetapi bahwa program tersebut diberikan kemampuan untuk berjalan pada kecepatan yang meningkat pada tingkat yang melebihi tingkat di mana probabilitas terminasi menurun, kita dapat, saya percaya, pada kenyataannya membuat probabilitas berakhir pada saat t sewenang-wenang mendekati 1.
sumber
GolfScript, ≈ f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (126) 0 (126))))))))))))))
Ini tanpa malu-malu diadaptasi dari jawaban lain oleh @Howard, dan menggabungkan saran oleh @Peter Taylor.
Pemahaman saya tentang GolfScript terbatas, tetapi saya percaya
*
dan^
operator di atas tidak operator aritmatika yang dilarang oleh OP.(Saya dengan senang hati akan menghapus ini jika @Howard ingin mengirimkan versinya sendiri, yang tentunya akan lebih baik dari yang ini.)
Program ini menghitung angka yang kira-kira f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 ( f ε 0 (126)))))))) ))) - iterasi sembilan kali lipat dari f ε 0 - di mana f ε 0 adalah fungsi dalam hierarki yang tumbuh cepat yang tumbuh dengan laju yang kira-kira sama dengan fungsi Goodstein. (f ε 0tumbuh sangat cepat sehingga laju pertumbuhan fungsi Friedman n (k) dan panah berantai k-lipat Conway secara virtual tidak signifikan bahkan jika dibandingkan dengan hanya satu non-iterated f ε 0. )
sumber
'',:o;'oo',:t;
hanya memberikan nilai0
keo
dan2
ket
; jika itu hanya untuk mengatasi kekurangan angka maka dapat disingkat menjadi,:o)):t;
, kecuali bahwa tidak ada alasan untuk menghapust
di tempat pertama karena Anda dapat menulisexpr:t;{...}:f;[[[t]f]f]f
sebagai[[[expr:t]{...}:f~]f]f
menyimpan 3 karakter selanjutnya.o
: Saya cukup yakin itu[0 126]f
akan menjadi lebih besar dari[126]f
sehingga Anda menyimpan char dan menabrak output. Meskipun Anda meninggalkan string kosong di sana, yang mungkin merusak segalanya: mungkin lebih baik untuk memulai[[,:o'~'=]
[
itu tidak perlu karena Anda tidak memiliki apa pun di tumpukan.dc, 100 karakter
Diberi cukup waktu dan memori, ini akan menghitung angka sekitar 15 ↑ ¹⁶⁶⁶⁶⁶⁵ 15. Awalnya saya telah menerapkan fungsi hyperoperation , tetapi itu membutuhkan terlalu banyak karakter untuk tantangan ini, jadi saya menghapus
n = 2, b = 0
dann >= 3, b = 0
kondisinya, memutarn = 1, b = 0
kondisi menjadin >= 1, b = 0
.Satu-satunya operator aritmatika yang digunakan di sini adalah penjumlahan dan pengurangan.
EDIT: seperti yang dijanjikan dalam komentar, berikut adalah uraian dari apa yang dilakukan kode ini:
Seperti dicatat, ini menyimpang dari fungsi hiperoperasi di mana kasus dasar untuk perkalian dan lebih tinggi diganti dengan kasus dasar untuk penambahan. Kode ini berperilaku seolah-olah
a*0 = a^0 = a↑0 = a↑↑0 ... = a
, bukan matematis yang benara*0 = 0
dana^0 = a↑0 = a↑↑0 ... = 1
. Sebagai hasilnya, ia menghitung nilai yang sedikit lebih tinggi dari yang seharusnya, tapi itu bukan masalah besar karena kami bertujuan untuk angka yang lebih besar. :)EDIT: Saya baru saja memperhatikan bahwa satu digit masuk ke kode secara tidak sengaja, di makro yang melakukan peningkatan
n=0
. Saya telah menghapusnya dengan menggantinya dengan 'F' (15), yang memiliki efek samping dari penskalaan setiap operasi penambahan dengan 15. Saya tidak yakin seberapa besar ini mempengaruhi hasil akhir, tetapi mungkin jauh lebih besar sekarang.sumber
Tidak ada batasan lagi pada runtime? Baiklah kalau begitu.
Apakah program harus dapat dijalankan pada komputer modern?
Kedua solusi menggunakan kompilasi 64-bit, sehingga
long
merupakan integer 64-bit.C: lebih besar dari 10 (2 64 -1) 2 64 , yang dengan sendirinya lebih besar dari 10 10 355393490465494856447 ≈ 10 ↑↑ 4.11820744
88 karakter.
Untuk membuat formula ini lebih mudah, saya akan gunakan
t = 2^64-1 = 18446744073709551615
.main
akan memanggilf
dengan parametert
, yang akan mengulangt
kali, setiap kali mencetak nilait
, dan memanggilf
dengan parametert-1
.Jumlah digit yang dicetak:
20 * t
.Masing-masing panggilan
f
dengan parametert-1
akan mengulangit
kali, mencetak nilait
, dan memanggil f dengan parametert-2
.Jumlah digit yang dicetak:
20 * (t + t*t)
Saya mencoba program ini menggunakan yang setara dengan bilangan bulat 3-bit (saya mengatur
i = 8
dan memiliki panggilan utamaf(7)
). Itu mencapai pernyataan cetak 6725600 kali. Itu berhasil7^8 + 7^7 + 7^6 + 7^5 + 7^4 + 7^3 + 7^2 + 7
Oleh karena itu, saya percaya bahwa ini adalah perhitungan akhir untuk program lengkap:Jumlah digit yang dicetak:
20 * (t + t*t + t^3 + ... + t^(t-1) + t^t + t^(2^64))
Saya tidak yakin bagaimana cara menghitung (2 64 -1) 2 64 . Penjumlahan itu lebih kecil dari (2 64 ) 2 64 , dan saya membutuhkan kekuatan dua untuk melakukan perhitungan ini. Karena itu, saya akan menghitung (2 64 ) 2 64 -1 . Ini lebih kecil dari hasil sebenarnya, tetapi karena kekuatan dua, saya dapat mengubahnya menjadi kekuatan 10 untuk perbandingan dengan hasil lainnya.
Adakah yang tahu bagaimana melakukan penjumlahan itu, atau bagaimana mengkonversi (2 64 -1) 2 64 hingga 10 n ?
Tapi ingat, itu angka digit yang dicetak. Nilai integer adalah 10 dinaikkan ke kekuatan itu, jadi 10 ^ 10 ^ 355393490465494856447
Program ini akan memiliki kedalaman tumpukan 2 ^ 64. Itu 2 ^ 72 byte memori hanya untuk menyimpan loop counters. Itu adalah 4 Miliar Terabyte penghitung loop. Belum lagi hal-hal lain yang akan terjadi pada stack untuk tingkat rekursi 2 ^ 64.
Sunting: Mengoreksi sepasang kesalahan ketik, dan menggunakan nilai yang lebih tepat untuk log2 (10).
Sunting 2: Tunggu sebentar, saya punya loop bahwa printf berada di luar. Mari kita perbaiki itu. Menambahkan inisialisasi
i
.Sunting 3: Sial, saya mengacaukan matematika pada edit sebelumnya. Tetap.
Yang ini akan berjalan di komputer modern, meskipun tidak akan selesai dalam waktu dekat.
C: 10 ^ 10 ^ 136 ≈ 10 ↑↑ 3.329100567
98 Karakter.
Ini akan mencetak bitwise-kebalikan dari nol, 2 ^ 64-1, sekali untuk setiap iterasi. 2 ^ 64-1 adalah angka 20 digit.
Jumlah digit =
20 * (2^64-1)^7
= 14536774485912137805470195290264863598250876154813037507443495139872713780096227571027903270680672445638775618778303705182042800542187500Membulatkan panjang program hingga 100 karakter, Score = angka tercetak / 1.000.000
Nilai = 10 ^ 14536774485912137805470195290264863598250876154813037507443495139872713780096227571027903270680672445638775618778303705182042800542187494
sumber
%u
sedang mencetak angka 32-bit bahkan dengan kompilasi 64-bit, jadi saya hanya melakukanll
kebiasaan dari menulis di kompiler 32-bit.%llu
akan untuklong long
, dan%lu
akan benar untuklong
.%u
selalu 32-bit,%llu
selalu 64-bit, apakah dikompilasi sebagai 32 atau 64 bit. Namun, solusi di sini mengharuskanlong
64-bit, jadi Anda benar,%lu
sudah cukup.i
.Kode karakter R -
4941, 4.03624169270483442 * 10 ^ 5928 ≈ 10 ↑↑ 2.576681348akan mencetak [mereproduksi di sini hanya permulaan]:
sumber
cat
adalah fungsi aneh karena argumen pertama adalah...
. Jadi segala sesuatu sebelum argumen pertama yang disebut pergi ke...
(dan akancat
'ed), itulah sebabnya mengapasep
harus dinamai - kalau tidak, orang dapat mempersingkatnya sebagaicat(abs(.Random.seed),,"")
ECMAScript 6 - 10 ^ 3 ↑↑↑↑ 3/884736
(3 ↑↑↑↑ 3 adalah G (1) di mana G (64) adalah nomor Graham)
Output: 10 ^ 3 ↑↑↑↑ 3
Petunjuk:
Dihapus untuk singkatnya.G
adalah fungsi di mana G (64) adalah nomor Graham. Input adalah bilangan bulat. Output adalah string unary yang ditulis dengan 0.K
adalah fungsi Knuth up-panah a ↑ n b di mana a secara implisit 3. Input adalah n, string unary, dan b, string unary. Output adalah string unary.u
adalah "1".v
adalah "0000", atau G (0)e
adalah "000".sumber
Maximum code length is 100 bytes;
Kalau tidak, ini hampir tak terkalahkanC
(Dengan permintaan maaf kepada Darren Stone)
n = 2 ^ 64 digit angka (9 ...)
l = 100 karakter kode
skor ≈ 1e + 2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936570 ≈ 10 ↑↑ 3.2974890744
[Nilai = n ^ 5 / l ^ 3 = (10 ^ (2 ^ 320) -1) / (100 ^ 3) = (10 ^ 2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936576-1) / (10 ^ 6)
Perhatikan bahwa saya layak dicambuk tanpa ampun untuk jawaban ini, tetapi tidak bisa menolak. Saya tidak merekomendasikan bertingkah seperti saya di stackexchange, untuk alasan yang jelas. :-P
EDIT: Akan lebih sulit untuk menahan godaan untuk pergi dengan sesuatu seperti
... tapi saya mengira bahwa aturan yang dimaksudkan tetapi tidak ditentukan adalah bahwa seluruh angka yang membentuk angka harus dicetak.
sumber
)
, tetapi tidak apa-apa, karena Anda hanya memiliki 96 karakter sekarang.Ruby Baru: skor ~ f ω ω2 +1 (126 2 2 126 )
di mana f α (n) adalah hierarki yang tumbuh cepat.
Cobalah online!
Ini
*n
hanyalah perkalian string dan array, jadi semuanya harus baik-baik saja.Kode tidak dikunci:
di mana
b.-b<=>0
mengembalikan integer yang1
lebih dekat0
daripadab
.Penjelasan:
Mencetak
n
pada awal setiap panggilanH
.H[[]]
gandan
(n
kali), yaitun = n<<n
.H[[0,a,b,c,...,z]]
panggilanH[[a,b,c,...,z]]
(n
kali).H[[k+1,a,b,c,...,z]]
panggilanH[[k]*n+[a,b,c,...,z]]
(n
waktu), di mana[k]*n = [k,k,...,k]
.H[[-1,a,b,c,...,z]]
panggilanH[[n]*n+[a,b,c,...,z]]
(n
kali).H[[-(k+1),a,b,c,...,z]]
panggilanH[[-k]*n+[a,b,c,...,z]]
(n
kali).H[k] = H[[k]]
.Program saya diinisialisasi
n = 126
, kemudian memanggilH[-n-1]
126 2 2 126 kali.Contoh:
H[[0]]
akan memanggilH[[]]
yang berlakun = n<<n
(n
kali).H[[0,0]]
akan meneleponH[[0]]
(n
kali).H[[1]]
akan meneleponH[[0]*n]
(n
kali).H[[-1]]
akan meneleponH[[n]*n]
(n
kali).H[[-1,-1]]
akan meneleponH[[n]*n+[-1]]
(n
kali).H[[-3]]
akan meneleponH[[-2]*n]
(n
kali).Cobalah online!
Lihat revisi untuk hal keren lainnya.
sumber
Fungsi Haskell - Ackermann diterapkan pada hasilnya 20 kali - 99 karakter
Ini adalah solusi haskell terbaik yang dapat saya buat berdasarkan pada fungsi ackermann - Anda mungkin melihat beberapa kesamaan dengan solusi nm, i = round $ log pi diinspirasi dari sana dan sisanya adalah kebetulan: D
Ini menjalankan fungsi ackermann pada dirinya sendiri 20 kali, mulai dari satu, urutannya
Adapun estimasi, wikipedia mengatakan:
a (m, n) = 2 ↑ m-2 (n + 3) - 3
Dari sini kita dapat melihat a3 (1) = a (61,61) = 2 ↑ 59 64 + 3, yang jelas lebih besar dari g1 = 3 ↑ 4 3, kecuali 3 pada awalnya jauh lebih penting daripada yang saya pikirkan. Setelah itu, setiap level melakukan hal berikut (membuang konstanta yang tidak signifikan dalam n ):
Jika ini kira-kira setara, maka a 20 (1) ~ = g 18 . Istilah terakhir dalam n , (a n-1 ) jauh lebih besar dari 3, sehingga berpotensi lebih tinggi dari g 18 . Saya akan melihat apakah saya bisa mencari tahu apakah itu akan meningkatkannya bahkan iterasi tunggal dan melaporkan kembali.
sumber
length"a"
menghemat beberapa byte dan memungkinkan Anda yang lain.a
kode mesin x86 - 100 byte (Dirakit sebagai file MSDOS .com)
Catatan: mungkin sedikit membengkokkan aturan
Program ini akan menghasilkan 2 (65536 * 8 + 32) sembilan yang akan menempatkan skor di (10 2 524320 -1) / 1000000
Sebagai penghitung program ini menggunakan seluruh tumpukan (64kiB) ditambah dua register 16bit
Kode yang dirakit:
Majelis:
sumber
C
Ukuran file adalah 45 byte.
Programnya adalah:
Dan jumlah yang dihasilkan lebih besar dari 10 ^ (10 ^ (10 ^ 1.305451600608433)).
File yang saya arahkan std out saat ini lebih dari 16 Gb, dan masih terus bertambah.
Program ini akan berakhir dalam jumlah waktu yang wajar jika saya memiliki komputer yang lebih baik.
Skor saya tidak dapat dihitung dengan floating point presisi ganda.
sumber
GNU Bash, 10 ^ 40964096² /
80 ^ 3 ≈ 10 ↑↑ 2.072820169C = 4096 pada sistem yang masuk akal. SHLVL adalah bilangan bulat positif kecil (biasanya 1 atau 2 tergantung pada apakah / bin / sh adalah bash atau tidak).
UNIX 64 bit saja:
Nilai: ~ 10 ^ (40964096409640964096 * 40964096409640964096) / 88 ^ 3
sumber
bash -c 'bash -c "echo \$SHLVL"'
stat --printf
tidak bekerja Cobastat -c %s
C, 10 ^ 10 ^ 2485766 ≈ 10 ↑↑ 3.805871804
Kami membuat array 258048 bilangan bulat yang tidak ditandatangani. Tidak mungkin rindu yang tidak ditandatangani karena itu membuat program terlalu lama. Mereka tidak ditandatangani karena saya tidak ingin menggunakan perilaku yang tidak terdefinisi, kode ini adalah C yang tepat (selain kurangnya pengembalian dari main ()) dan akan mengkompilasi dan berjalan pada mesin normal, itu akan tetap berjalan untuk waktu yang lama. . Ukuran ini adalah yang terbesar yang dapat kami ekspresikan secara hukum tanpa menggunakan karakter non-ascii.
Kami mengulang-ulang array mulai dari elemen terakhir. Kami mencetak digit
2^32-1
, menambah elemen dan menjatuhkan loop jika elemen belum membungkus ke 0. Dengan cara ini kami akan mengulang(2^32 - 1)^254048 = 2^8257536
kali, mencetak 10 digit setiap kali.Berikut ini contoh kode yang menunjukkan prinsip dalam rentang data yang lebih terbatas:
Hasilnya kira-kira 10 ^ 10 ^ 2485766 dibagi dengan satu juta yang masih kira-kira 10 ^ 10 ^ 2485766.
sumber
Powershell (2.53e107976 / 72³ = 6.78e107970 ≈ 10 ↑↑ 1.701853371)
Ini membutuhkan waktu lebih dari 5 detik untuk berjalan.
Ini mengambil dan menyatukan panjang byte setiap file pada drive Anda saat ini. Regex menghapus semua karakter non-digit.
sumber
0
di sana.-ea(+'')
untuk mengurangi ukuran (''
dikonversi ke angka0
, yang merupakan nilai enumSilentlyContinue
). Anda dapat menggunakan\D
regex pengganti yang sama dengan[^\d]
. Dan Anda bisa menggunakan%{$_.Length}
alih-alihselect Length
menyingkirkan header kolom. Dan kemudian Anda dapat menyingkirkan-split
dan-replace
juga, meninggalkan Anda dengan-join(gci \ -ea(+'')-r|%{$_.Length})
yang 37 karakter lebih pendek (saya juga menata ulang parameter karena tanda kurung diperlukan pula karena+''
).Python 3, skor = ack (126.126) / 100 ^ 3
Fungsi f adalah fungsi ackermann, yang saya punya cukup ruang untuk menjalankan.
Sunting: sebelumnya "else n +1", yang melanggar aturan tantangan - pujian untuk Simply Beautiful Art.
sumber
f(m-g,g)
kef(m-g,m)
.f(m-g,i)
. Juga, di akhir baris pertama, Anda menggunakan angka. Saya yakin Anda bermaksud menggunakannyan+g
, yang akan saya tunjukkann+n
akan lebih besar.JavaScript 98 karakter
menghasilkan 2.718e + 239622337 ≈ 10 ↑↑ 2.9232195202
Untuk skor hanya sedikit lebih dari 2,718e + 239622331 ≈ 10 ↑↑ 2,9232195197
yang merupakan yang terbesar yang bisa saya buat tanpa browser mogok.
(console.log (a) akan menampilkan kepada Anda output penuh)
Jangan jalankan ini:
akan menampilkan 2.718 + e121333054704 ≈ 10 ↑↑ 3.0189898069 (alias 2.718 * 10 ^ (1.213 * 10 ^ 12) untuk dibandingkan dengan jawaban yang lebih panjang:
versi yang lebih ekstrem, jika tidak merusak browser Anda:
yang akan membuat angka dengan ukuran yang sama dengan e * 10 ^ (10 ^ 19) ≈ 10 ↑↑ 3.106786869689
Sunting: solusi asli kode yang diperbarui hanya menghasilkan 2,718e + 464
sumber
Python 3: 98 karakter, ≈ 10 ↑↑ 256
Menggunakan fungsi argumen-variabel:
Secara efektif, E mengurangi argumen pertama sambil meningkatkan sisa argumen, kecuali bahwa alih-alih menempatkan -1 dalam argumen itu menjatuhkan argumen. Karena setiap siklus mengurangi argumen pertama atau mengurangi jumlah argumen, ini dijamin akan berakhir. Fungsi peningkatan yang digunakan adalah int ("% d% d"% (k, k)), yang memberikan hasil antara k ** 2 + 2 * k dan 10 * k ** 2 + k. Kode saya memang menggunakan simbol * - tetapi tidak sebagai perkalian. Ini digunakan untuk bekerja dengan sejumlah variabel argumen, yang saya pikir harus mengikuti aturan karena titik jelas dari aturan adalah untuk membatasi operasi tertentu, bukan simbol itu sendiri.
Beberapa contoh seberapa besar E dapat dengan cepat:
Hanya dua yang pertama yang bisa dijalankan di komputer saya dalam jumlah waktu yang wajar.
Kemudian, E dipanggil oleh
E(*range(ord('~')))
- yang berarti:Saya tidak sepenuhnya yakin seberapa besar ini (saya sudah mencoba untuk memperkirakannya tetapi tidak berhasil) - tetapi jelas bahwa ini ~ sangat ~ besar.
Sebagai contoh, sekitar dua belas siklus, hasilnya sekitar: (secara teknis sedikit lebih dari)
Estimasi hasil:
Jika kami memperkirakan langkah peningkatannya
lambda k: 10 * k**2
, fungsi dapat digambarkan sebagaiHal yang relevan yang kami lakukan di sini adalah membangun menara kekuatan sepuluh, sehingga skor akhirnya dapat diperkirakan 10 ↑↑ 256.
Estimasi hasil yang lebih baik (walaupun parsial):
Ini menggunakan yang sama
10 * k**2
dengan estimasi lainnya.Di bawah estimasi sebelumnya, itu akan menjadi:
Yang secara signifikan lebih kecil dari nilai sebenarnya karena menggunakan
a**2
bukan2**a
untuk 10 dan menggunakana*2
bukan2**a
untuk b.sumber
C (skor ≈ 10 ^ 20 000 000 000 ≈ 10 ↑↑ 3,005558275)
Meskipun
rand()
outputnya deterministik karena tidak ada fungsi seed.sumber
rand()
mengakhiri kondisi membuatnya tidak deterministik. Selanjutnya memanggilrand()
setiap iterasi harus membuatnya sangat lambat. Gunakan sesuatu seperti yangLONG_MAX
didefinisikanlimits.h
sebagai gantinya.non deterministic
kembali, karena tidak ada seed seperti yang Anda tulis.~' '
alih - alihrand()
, dicetak dengan%u
? Dua byte lebih sedikit sumber, dan nilai yang lebih tinggi.