Số lượng lớn nhất có thể in


113

Mục tiêu của bạn là viết một chương trình in một số. Con số càng lớn, bạn càng nhận được nhiều điểm. Nhưng hãy cẩn thận! Độ dài mã vừa bị giới hạn vừa có trọng số lớn trong chức năng tính điểm. Số in của bạn sẽ được chia cho khối lập phương của số byte bạn đã sử dụng cho giải pháp của mình .

Vì vậy, giả sử bạn đã in 10000000và mã của bạn 100dài byte. Điểm cuối cùng của bạn sẽ là 10000000 / 100^3 = 10.

Có những quy tắc khác phải tuân theo, để làm cho thử thách này khó hơn một chút.

  • Bạn không thể sử dụng các chữ số trong mã của mình (0123456789);
  • Bạn có thể sử dụng toán học / vật lý / vv. các hằng số, nhưng chỉ khi chúng nhỏ hơn 10. (ví dụ: Bạn có thể sử dụng Pi ~ = 3.14 nhưng bạn không thể sử dụng hằng số Avogadro = 6e23)
  • Đệ quy được cho phép nhưng số được tạo cần phải hữu hạn (vì vậy vô hạn không được chấp nhận như một giải pháp. Chương trình của bạn cần chấm dứt chính xác, giả sử thời gian và bộ nhớ không giới hạn và tạo đầu ra được yêu cầu);
  • Bạn không thể sử dụng các hoạt động *(nhân), /(chia), ^(sức mạnh) cũng như bất kỳ cách nào khác để chỉ ra chúng (ví dụ: 2 div 2không được phép);
  • Chương trình của bạn có thể xuất nhiều hơn một số, nếu bạn cần nó để làm điều đó . Chỉ người cao nhất sẽ được tính cho điểm;
  • Tuy nhiên, bạn có thể nối các chuỗi: điều này có nghĩa là bất kỳ chuỗi các chữ số liền kề sẽ được coi là một số duy nhất;
  • Mã của bạn sẽ được chạy như vốn có. Điều này có nghĩa là người dùng cuối không thể chỉnh sửa bất kỳ dòng mã nào, anh ta cũng không thể nhập một số hoặc bất cứ thứ gì khác;
  • Độ dài mã tối đa là 100 byte.

Bảng xếp hạng

  1. Steven H. , Pyth ≈ f φ (1,0,0) +7 (256 26 ) / 1000000 [1]
  2. Nghệ thuật đơn giản đẹp , Ruby f φ 121 () (126) [1]
  3. Peter Taylor , GolfScript ≈ f ε 0 + + 1 (17) / 1000 [1]
  4. res , GolfScript ≈ f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (126))))))))) [1]
  5. Nghệ thuật đơn giản là đẹp , Ruby ≈ f ω +12 +1 (1983)
  6. eaglgenes101 , Julia f ω3 (127)
  7. col6y , Python 3, ≈ (127 → 126 → ... → 2 → 1) / 99 3 [1] [3]
  8. Toeofdoom , Haskell, a 20 (1) / 99 3 [1]
  9. Fraxtil , dc, ≈ 15 ↑ 15/100 3 [3]
  10. Đỏ tươi , Python, ≈ ack (126.126) / 100 3 10 ↑ 124 129
  11. Kendall Frey , ECMAScript 6, ≈ 10 3 ↑ 4 3 /100 3 [1]
  12. Ilmari Karonen , GolfScript, ≈ 10 ↑ 3 10 377 /18 3 [1]
  13. BlackCap , Haskell, ≈ 10 ↑↑ 65503/100 3
  14. đệ quy , Python, ≈ 2 ↑↑ 11/95 3 10 ↑↑ 8.63297 [1] [3]
  15. nm , Haskell, ≈ 2 ↑↑ 7/100 3 10 ↑↑ 4.63297 [1]
  16. David Yaw , C, ≈ 10 10 4 × 10 22 /83 3 ≈ 10 ↑↑ 4,11821 [2]
  17. primo , Perl, ≈ 10 (12750684161) 5 × 2 27 /100 3 ≈ 10 ↑↑ 4,11369
  18. Nghệ thuật , C, ≈ 10 10 2 × 10 6 /98 3 ≈ 10 ↑↑ 3,80587
  19. Robert Sørlie , x86, ≈ 10 2 2 19 +32 / 100 3 10 3.71585
  20. Tobia , APL, ≈ 10 10 353 /100 3 ≈ 10 ↑↑ 3,40616
  21. Đá Darren , C, ≈ 10 10 97.61735 / 98 3 10 ↑↑ 3.29875
  22. ecksemmess , C, ≈ 10 2 320 /100 3 ≈ 10 ↑↑ 3,29749
  23. Adam Speight , vb.net, ≈ 10 5000 × (2 64 ) 4 /100 3 ≈ 10 ↑↑ 3,28039
  24. Giô-suê , bash, ≈ 10 10 15 /86 3 ≈ 10 ↑↑ 3,07282

Chú thích

  1. Nếu mọi điện tử trong vũ trụ là một qubit và mọi sự chồng chất của chúng có thể được sử dụng một cách hữu ích để lưu trữ thông tin (miễn là bạn không thực sự cần biết những gì được lưu trữ về mặt lý thuyết là có thể), chương trình này đòi hỏi nhiều bộ nhớ hơn có thể có thể tồn tại và do đó không thể chạy được - ngay bây giờ hoặc tại bất kỳ thời điểm nào có thể hiểu được trong tương lai. Nếu tác giả dự định in một giá trị lớn hơn ≈3 ↑↑ 3,28 cùng một lúc, điều kiện này sẽ được áp dụng.
  2. Chương trình này đòi hỏi nhiều bộ nhớ hơn hiện tại, nhưng không nhiều đến mức về mặt lý thuyết nó không thể được lưu trữ trên một số lượng ít qubit, và do đó một máy tính có thể tồn tại một ngày nào đó có thể chạy chương trình này.
  3. Tất cả các thông dịch viên hiện đang có lỗi thời gian chạy hoặc chương trình không thực thi như tác giả dự định.
  4. Chạy chương trình này sẽ gây ra thiệt hại không thể khắc phục cho hệ thống của bạn.

Chỉnh sửa @primo : Tôi đã cập nhật một phần của bảng điểm bằng cách sử dụng một ký hiệu hy vọng dễ dàng hơn để so sánh, với số thập phân để biểu thị khoảng cách logarit với sức mạnh cao hơn tiếp theo. Ví dụ 10 ↑↑ 2,5 = 10 10 √10 . Tôi cũng đã thay đổi một số điểm nếu tôi cho rằng phân tích của người dùng bị lỗi, cứ thoải mái tranh chấp bất kỳ điểm nào trong số này.

Giải thích về ký hiệu này:

Nếu 0 ≤ b < 1, sau đó .a↑↑b = ab

Nếu b ≥ 1, sau đó .a↑↑b = aa↑↑(b-1)

Nếu b < 0, sau đó .a↑↑b = loga(a↑↑(b+1))


16
Có ai đó nói rõ ràng "cơ sở 10" chưa?
keshlam

1
Số lượng lớn có được tính không nếu nó nói 12e10(12 * 10 ^ 10) là 12*10^10?
hichris123

4
Tôi nghĩ rằng một ràng buộc tốt hơn thay vì cấm *, / và ^, sẽ chỉ cho phép các hoạt động tuyến tính , ví dụ: +, -, ++, -, + =, - =, v.v. Nếu không, các lập trình viên có thể tận dụng lợi thế của các chức năng thư viện mũi tên / Ackermann của Knuth nếu được cung cấp bằng ngôn ngữ họ chọn, có vẻ như gian lận.
Andrew Cheong

14
Tôi vẫn đang chờ đợi để xem ai đó kiếm được chú thích [4].
Brian Minton

1
Nói, nếu chương trình của tôi in 500b, điều này có hợp lệ không? Đó là, chúng ta có thể bỏ qua tất cả những thứ không phải là số mà một chương trình in không? Và nếu vậy, một cái gì đó như 50r7được tính là 507?
Đơn giản là nghệ thuật đẹp

Câu trả lời:


20

GolfScript; điểm tối thiểu f ε_0 + + 1 (17) / 1000

Theo đề nghị của res để sử dụng câu trả lời trọn đời cho một câu trả lời sâu cho câu hỏi này, tôi trình bày hai chương trình cải thiện đáng kể sự xuất phát từ giải pháp của Howard.

Chúng có chung một tiền tố chung, modulo tên hàm:

,:z){.[]+{\):i\.z={.z+.({<}+??\((\+.@<i*\+}{(;}if.}do;}:g~g

tính toán g(g(1)) = g(5)nơi g(x) = worm_lifetime(x, [x])tăng trưởng xấp xỉ f ε 0 (mà res ghi chú là "hàm trong hệ thống phân cấp phát triển nhanh , tăng trưởng với tốc độ gần bằng với hàm Goodstein").

Phân tích dễ hơn một chút (!) Là

,:z){.[]+{\):i\.z={.z+.({<}+??\((\+.@<i*\+}{(;}if.}do;}:g~g.{.{.{.{.{.{.{.{.{.{g}*}*}*}*}*}*}*}*}*}*

.{foo}*bản đồ xđến foo^x x.

,:z){[]+z\{\):i\.z={.z+.({<}+??\((\+.@<i*\+}{(;}if.}do;}:g~g.{g}*

do đó cho g^(g(5)) ( g(5) ); 8 cấp độ lặp tiếp theo tương tự như chuỗi mũi tên. Để diễn đạt bằng các thuật ngữ đơn giản: nếu h_0 = gh_{i+1} (x) = h_i^x (x)sau đó chúng tôi tính toán h_10 (g(5)).

Tôi nghĩ rằng chương trình thứ hai này gần như chắc chắn điểm số tốt hơn nhiều. Lần này nhãn được gán cho chức năng glà một dòng mới (sic).

,:z){.[]+{\):i\.z={.z+.({<}+??\((\+.@<i*\+}{(;}if.}do;}:
~
{.['.{
}*'n/]*zip n*~}:^~^^^^^^^^^^^^^^^^

Lần này tôi sử dụng tốt hơn ^như là một chức năng khác.

.['.{
}*'n/]*zip n*~

lấy xtrên ngăn xếp và các lá xtiếp theo là một chuỗi chứa các xbản sao .{theo gsau là các xbản sao của }*; sau đó đánh giá chuỗi. Vì tôi có một nơi tốt hơn để đốt các nhân vật dự phòng, chúng tôi bắt đầu với j_0 = g; nếu j_{i+1} (x) = j_i^x (x)sau đó đánh giá đầu tiên của máy ^tính j_{g(5)} (g(5))(mà tôi khá chắc chắn đã đánh bại chương trình trước đó). Sau đó tôi thực hiện ^thêm 16 lần nữa; vì vậy nếu k_0 = g(5)k_{i+1} = j_{k_i} (k_i)sau đó nó tính toán k_17. Tôi rất biết ơn (một lần nữa) vì đã ước tính rằng k_i>> f _0 + + 1 (i).


Nếu tôi không nhầm, số chương trình của bạn tính (gọi nó là n) có thể được viết n = f ^ 9 (g (3)), trong đó f (x) = g ^ (4x) (x) và g ( x) là thời gian tồn tại của sâu [x]. Nếu chúng ta coi g gần bằng với f_eps_0 trong hệ thống phân cấp đang phát triển nhanh, thì phép tính "back-of-phong bì" của tôi cho thấy f_ (eps_0 + 2) (9) <n <f_ (eps_0 + 2) (10 ). Tất nhiên đó là người chiến thắng hiện tại - cho đến nay.
res

@res, tôi nghĩ đó là đánh giá thấp nó khá nhiều. .{foo}*bản đồ xđến foo^x (x). Nếu chúng ta lấy h_0 (x) = g^4 (x)h_{i+1} (x) = h_i^x (x)sau đó giá trị tính toán là h_9 (g(3)). Của bạn f(x) = g^(4x) (x) = h_0^x (x) = h_1 (x).
Peter Taylor

(Điều này liên quan đến chương trình ban đầu của bạn - Tôi chỉ thấy rằng bạn đã thực hiện một số chỉnh sửa.) Ohhh ... Tôi đã hiểu sai cách thức *hoạt động. Sẽ an toàn khi nói rằng h_0 (x) = g ^ 4 (x) >> f_eps_0 (x); do đó, mối quan hệ h_ {i + 1} (x) = h_i ^ x (x) xác định một cách hiệu quả hệ thống phân cấp phát triển nhanh "tăng tốc" sao cho h_i (x) >> f_ (eps_0 + i) (x). Tức là, số được tính h_9 (g (3)) chắc chắn lớn hơn nhiều so với f_ (eps_0 + 9) (g (3)). Đối với g (3), tôi nghĩ rằng tôi có thể chỉ ra rằng nó lớn hơn g_4, số thứ tư trong chuỗi g_i được sử dụng để xác định số của Graham (là g_64).
res

@res, vì vậy j_i ~ f_{eps_0 + i}; điều đó làm cho k_i ~ f_{eps_0 + i omega + i^2}?
Peter Taylor

Cho những gì bạn viết, tôi nhận được k_i ~ f_{ε_0 + ω}^i (k_0). Đây là lý do: 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), vì vậy k_i ~ f_ {_0 + ω} ^ i (k_0). Sau đó, một mức độ rất bảo thủ ràng buộc vào k_i, hoàn toàn về mặt phân cấp phát triển nhanh, sau đó k_i >> f_{ε_0 + ω}^i (i) = f_{ε_0 + ω + 1} (i).
res

91

Windows 2000 - Windows 8 (3907172 / 23³ = 321)

LƯU Ý: ĐỪNG CHẠY NÀY!

Lưu các mục sau vào một tệp bó và chạy nó với tư cách Quản trị viên.

CD|Format D:/FS:FAT/V/Q

Xuất ra khi chạy trên ổ đĩa 4TB với số in đầu tiên được in đậm.

Chèn đĩa mới cho ổ D:
và nhấn ENTER khi sẵn sàng ... Loại hệ thống tệp là NTFS.
Hệ thống tập tin mới là FAT.
QuickFormatted 3907172M
Âm lượng quá lớn đối với FAT16 / 12.


19
Thiên tài tuyệt vời!
WallyWest

7
Tôi nghĩ rằng bạn phải lập phương trình độ dài giải pháp trong đó tôi nhận được khoảng 321 điểmYour printed number will be divided for the number of bytes you used for your solution^3.
Cruncher

1
77 upvote, nhưng ... Tôi lưu ý điểm số là 321 ...
Đơn giản là nghệ thuật đẹp

3
@SimplyBeautitableArt, đó không phải là điểm số, mà là hành trình. :-D
Thực phẩm điện tử

4
Rõ ràng là như vậy, một trong đó đã cho một tiếng cười tốt. Bây giờ nếu chỉ chúng ta có thể đưa cái này lên bảng xếp hạng ... ai đó cần kiếm được thẻ "thiệt hại không thể khắc phục";)
Nghệ thuật đơn giản là đẹp

87

GolfScript, điểm số: cách quá nhiều

OK, một số lượng lớn chúng ta có thể in trong một vài ký tự GolfScript như thế nào?

Hãy bắt đầu với đoạn mã sau ( cảm ơn, Ben! ), In ra 126:

'~'(

Tiếp theo, hãy lặp lại nó 126 lần, cho chúng ta một số bằng khoảng 1,26126 × 10 377 :

'~'(.`*

(Đó là sự lặp lại chuỗi, không phải là phép nhân, vì vậy nó sẽ ổn theo quy tắc.)

Bây giờ, chúng ta hãy lặp lại rằng số 378 chữ số một ít hơn 10 377 lần:

'~'(.`*.~*

Bạn sẽ không bao giờ thực sự thấy chương trình này kết thúc, vì nó cố gắng tính một số có khoảng 10 380 2 1140 chữ số. Không có máy tính nào được chế tạo có thể lưu trữ một số lượng lớn như vậy, cũng không thể chế tạo một máy tính như vậy bằng vật lý đã biết; các số nguyên tử trong vũ trụ quan sát được được ước tính là khoảng 10 80 , vì vậy ngay cả nếu chúng ta bằng cách nào đó có thể sử dụng tất cả các vấn đề này trong vũ trụ để lưu trữ số lượng lớn này, chúng tôi vẫn bằng cách nào đó phải nhồi nhét khoảng 10 380 /10 80 = 10 300 chữ số vào mỗi nguyên tử!

Nhưng hãy giả sử rằng chúng tôi có trình thông dịch GolfScript của chính Chúa, có khả năng chạy một phép tính như vậy và chúng tôi vẫn chưa hài lòng. OK, hãy làm điều đó một lần nữa!

'~'(.`*.~*.~*

Đầu ra của chương trình này, nếu có thể hoàn thành, sẽ có khoảng 10 10 383 chữ số và do đó sẽ bằng khoảng 10 10 10 383 .

Nhưng chờ đã! Chương trình đó đang trở nên lặp đi lặp lại ... tại sao chúng ta không biến nó thành một vòng lặp?

'~'(.`*.{.~*}*

Ở đây, thân vòng lặp được chạy khoảng 10 377 lần, cho chúng ta một đầu ra lý thuyết bao gồm khoảng 10 10⋰ 10 377 chữ số hoặc hơn, trong đó tháp có sức mạnh lặp 10 dài khoảng 10 377 bước. .

Nhưng chúng tôi chưa hoàn thành. Hãy thêm một vòng lặp nữa!

'~'(.`*.{.{.~*}*}*

Để thậm chí viết đúng một xấp xỉ các số như vậy đòi hỏi phải có ký hiệu toán học bí truyền. Ví dụ, trong ký hiệu mũi tên Knuth , đầu ra số (theo lý thuyết) của chương trình trên phải vào khoảng 10 ↑ 3 10 377 , cho hoặc nhận một vài (hoặc 10 377 ) lũy thừa mười, giả sử tôi đã làm đúng phép toán.

Những con số như thế này vượt xa "vô cùng lớn" và đi vào cõi "không thể tưởng tượng được". Như trong, không chỉ không thể đếm hoặc viết ra những con số như vậy (chúng tôi đã vượt qua điểm đó ở ví dụ thứ ba ở trên), nhưng theo nghĩa đen chúng không có cách sử dụng hay tồn tại bên ngoài toán học trừu tượng. Chúng ta có thể chứng minh, từ các tiên đề của toán học , rằng những con số như vậy tồn tại, giống như chúng ta có thể chứng minh từ đặc tả GolfScript mà chương trình ở trên sẽ tính toán chúng, nếu giới hạn của thực tế và không gian lưu trữ có sẵn không can thiệp), nhưng thực sự không có gì trong vũ trụ vật lý mà chúng ta có thể sử dụng chúng để đếm hoặc đo theo bất kỳ ý nghĩa nào.

Tuy nhiên, các nhà toán học đôi khi sử dụng số lượng lớn hơn . (Lý thuyết) số máy tính lớn có làm việc nhiều hơn một chút - thay vì chỉ làm tổ hơn vòng từng người một, chúng ta cần phải sử dụng đệ quy để kính thiên văn các chiều sâu của các vòng lồng nhau. Tuy nhiên, về nguyên tắc, có thể viết một chương trình GolfScript ngắn (dưới 100 byte, tôi mong đợi) để tính toán (về mặt lý thuyết) bất kỳ số nào có thể biểu thị trong, ví dụ, ký hiệu chuỗi mũi tên Conway ; các chi tiết còn lại như một bài tập. ;-)


9
"...No computer ever built could store a number that big...Sửa lỗi cho tôi nếu tôi sai, nhưng tôi không nghĩ điều đó áp dụng ở đây. Không phải nó chỉ liên tục "lưu trữ" và in 3 chữ số cùng một lúc (?) Nên không cần lưu trữ kết quả cuối cùng.
Kevin Fegan

12
@KevinFegan: Đó là sự thật - con số lặp đi lặp lại đáng kinh ngạc, vì vậy nó sẽ dễ nén. Nhưng sau đó, chúng ta không còn thực sự lưu trữ số đó, mà là một số công thức trừu tượng mà theo đó, về mặt lý thuyết, số có thể được tính toán; thật vậy, một trong những công thức nhỏ gọn nhất có lẽ là chương trình GolfScript ở trên tạo ra nó. Ngoài ra, một khi chúng ta tiến thêm một bước tới chương trình tiếp theo, thậm chí "in" từng chữ số một trước khi loại bỏ chúng trở nên không thực tế - đơn giản là không có cách nào để thực hiện nhiều bước tính toán cổ điển trong vũ trụ.
Ilmari Karonen

GolfScript của IlmariKaronen vừa cho Googol một wedgie!
WallyWest

5
Còn về việc thực sự đẩy điều này đến giới hạn, hãy xem chính xác bạn có thể thực hiện nó như thế nào trong GolfScript trong vòng 100 ký tự? Vì thế, kết quả của bạn ít hơn số của Graham (mà giải pháp Haskell của tôi "gần đúng"), nhưng như bạn nói, GolfScript có thể còn đi xa hơn nữa.
đã ngừng quay ngược chiều

3
@leftaroundabout: Tôi đã quản lý để viết một trình đánh giá ký hiệu mũi tên Conway trong 80 ký tự GolfScript, mặc dù nó không vượt qua tất cả các yêu cầu của thử thách này (nó sử dụng các hằng số và toán tử số học). Nó có thể được cải thiện, nhưng tôi nghĩ tôi có thể coi đó là một thử thách mới.
Ilmari Karonen

42

JavaScript 44 ký tự

Điều này có vẻ hơi gian lận:

alert((Math.PI+''+Math.E).replace(/\./g,""))

Điểm = 31415926535897932718281828459045/44 ^ 3 ≈ 3.688007904758867e + 26 10 ↑↑ 2.1536134004


9
Không có quy tắc nào bị bẻ cong :;) * Không thể sử dụng 0123456789 [kiểm tra] * Sử dụng bất kỳ ngôn ngữ nào trong đó các chữ số là ký tự hợp lệ; [kiểm tra] * Bạn có thể sử dụng toán học / vật lý / vv. hằng số <10. [kiểm tra, sử dụng 2] * Cho phép đệ quy nhưng số được tạo cần phải hữu hạn; [kiểm tra, không đệ quy] Không thể sử dụng *, /, ^; [kiểm tra] Chương trình của bạn có thể xuất nhiều hơn một số; [kiểm tra] Bạn có thể nối chuỗi; [kiểm tra] Mã của bạn sẽ được chạy như hiện trạng; [kiểm tra] Độ dài mã tối đa: 100 byte; [kiểm tra] Cần chấm dứt w / i 5 giây [kiểm tra]
WallyWest

Cạo sạch 2 ký tự bằng cách chuyển qua "."để thay thế/\./g
gengkev

1
@gengkev Đáng buồn thay, chỉ sử dụng .replace (".", "") chỉ xóa cái đầu tiên. tính cách; Tôi phải sử dụng thay thế toàn cầu để thay thế TẤT CẢ. các ký tự trong chuỗi ...
WallyWest

m=Math,p=m.PI,e=m.E,s="",alert((p*p*p+s+e*e*e).replace(/\./g,s))Thay vào đó, bạn có thể làm , điểm số của bạn là 3100627668029981620085536923187664/63 ^ 3 = 1.240017943838551e + 28
AMK

1
@Cory Đối với một người, tôi sẽ không lặp lại một hằng số, nếu không mọi người sẽ sử dụng nó ... Thứ hai, tôi thực sự không có tranh luận thứ hai ...
WallyWest

28

C, điểm = 10 10 97.61735 / 98 3 10 ↑↑ 2.29874984

unsigned long a,b,c,d,e;main(){while(++a)while(++b)while(++c)while(++d)while(++e)printf("%lu",a);}

Tôi đánh giá cao sự giúp đỡ trong việc ghi bàn. Bất kỳ hiểu biết hoặc sửa chữa được đánh giá cao. Đây là phương pháp của tôi:

n = phép nối của mọi số từ 1 đến 2 64 -1, lặp lại (2 64 -1) 4 lần . Đầu tiên, đây là cách tôi ước tính (thấp) số chữ số tích lũy từ 1 đến 2 64 -1 ("chuỗi"): Số cuối cùng trong chuỗi thứ tự là 2 64 -1 = 18446744073709551615với 20 chữ số. Do đó, hơn 90% các số trong phần tiếp theo (những số bắt đầu bằng 1.. 9) có 19 chữ số. Giả sử 10% còn lại trung bình 10 chữ số. Nó sẽ nhiều hơn thế, nhưng đây là một ước tính thấp cho toán dễ dàng và không gian lận. Dãy đó được lặp đi lặp lại (2 64 -1) 4 lần, vì vậy độ dài của n sẽít nhất (0,9 × (2 64 -1) × 19 + 0,1 × (2 64 -1) × 10) × (2 64 -1) 4 = 3,86613 × 10 97 chữ số. Trong các bình luận bên dưới, @primo xác nhận độ dài của n là 4,1433x10 97 . Vì vậy, bản thân n sẽ là 10 với sức mạnh đó, hoặc 10 10 97.61735 .

tôi = 98 ký tự mã

điểm = n / l 3 = 10 10 97.61735 / 98 3

Yêu cầu: Phải chạy trên máy tính 64 bit sizeof(long) == 8. Mac và Linux sẽ làm điều đó.


2
Trong C, 'z'là giá trị không đổi 122. Đúng?
primo

1
tôi nghĩ rằng printf("%d",n)sẽ làm cho số lượng lớn hơn nhiều. Ngoài ra, máy tính 64 bit không có nghĩa là dài 64 bit, ví dụ Windows sử dụng mô hình LLP64 nên thời gian vẫn là 32 bit
phuclv

3
nó không phải vấn đề Nó. Tràn số nguyên đã ký là hành vi không xác định trong C, do đó không thể dự đoán điều gì sẽ xảy ra khi mã của bạn được thực thi. Nó có thể vi phạm các yêu cầu tài chính.
Dennis

1
Tôi nghĩ rằng các phân tích có thể là một chút. Sự kết hợp của 0..2^64-1chính xác là 357823770363079921190 chữ số. (2^64-1)^4Thời gian lặp lại là 4,1433x10 ^ 97. Lấy 10 để sức mạnh đó là 10^10^97.61735≈ 10 ↑↑ 3.29875. Tôi nghĩ rằng bạn đang tuyên bố sức mạnh của mười bạn không có (lưu ý nơi 3.866×10^97đã trở thành 3.866^10^97.
Primo

2
Xin chào @primo. Cảm ơn đã dành thời gian để kiểm tra điều này. Cảm kích điều đó. Tôi thấy những gì bạn đang nói. Số mũ cuối cùng của tôi là sai. Nó nên được 2.0thay vì 97. 10^10^10^2.00= 10^10^97.6. Tôi sẽ phản ánh rằng trong điểm số của tôi bây giờ.
Darren Stone

19

Python 3 - 99 ký tự - (rất có thể) lớn hơn đáng kể so với số của Graham

Tôi đã đưa ra một chức năng tăng nhanh hơn dựa trên một phần mở rộng của chức năng Ackermann.

A=lambda a,b,*c:A(~-a,A(a,~-b,*c)if b else a,*c)if a else(A(b,*c)if c else-~b);A(*range(ord('~')))

http://fora.xkcd.com/viewtopic.php?f=17&t=31598 đã truyền cảm hứng cho tôi, nhưng bạn không cần phải nhìn vào đó để hiểu số của tôi.

Đây là phiên bản sửa đổi của hàm ackermann mà tôi sẽ sử dụng trong phân tích của mình:

A(b)=b+1
A(0,b,...)=A(b,...)
A(a,0,...)=A(a-1,1,...)
A(a,b,...)=A(a-1,A(a,b-1,...),...)

Hàm của tôi Atrong đoạn mã trên về mặt kỹ thuật không giống nhau, nhưng nó thực sự mạnh hơn, với câu lệnh sau để thay thế dòng thứ ba của định nghĩa trên:

A(a,0,...)=A(a-1,a,...)

(a phải có ít nhất 1, vì vậy nó phải mạnh hơn)

Nhưng với mục đích của tôi, tôi sẽ cho rằng nó giống như đơn giản hơn, vì phân tích đã được thực hiện một phần cho chức năng của Ackermann, và do đó cho chức năng này khi nó có hai đối số.

Hàm của tôi được đảm bảo cuối cùng sẽ dừng đệ quy vì nó luôn luôn: xóa một đối số, giảm đối số thứ nhất hoặc giữ nguyên đối số thứ nhất và giảm đối số thứ hai.

Phân tích kích thước

Số của Graham, AFAIK, có thể được biểu diễn G(64)bằng cách sử dụng:

G(n) = g^n(4)
g(n) = 3 ↑^(n) 3

Trong đó một ↑^(n)b là ký hiệu mũi tên lên của knuth.

Cũng:

A(a,b) = 2 ↑^(a-2) (b+3) - 3
A(a,0) ≈ 2 ↑^(a-2) 3
g(n) ≈ A(n+2,0) // although it will be somewhat smaller due to using 2 instead of 3. Using a number larger than 0 should resolve this.
g(n) ≈ A(n+2,100) // this should be good enough for my purposes.

g(g(n)) ≈ A(A(n+2,100),100)

A(1,a+1,100) ≈ A(0,A(1,a,100),100) = A(A(1,a,100),100)

g^k(n) ≈ A(A(A(A(...(A(n+2,100)+2)...,100)+2,100)+2,100)+2,100) // where there are k instances of A(_,100)
A(1,a,100) ≈ A(A(A(A(...(A(100+2),100)...,100),100),100),100)

g^k(100) ≈ A(1,k,100)
g^k(4) < A(1,k,100) // in general
g^64(4) < A(1,64,100)

Con số thể hiện trong chương trình trên là A(0,1,2,3,4,...,123,124,125) .

g^64(4)là số của Graham và giả sử toán của tôi là chính xác thì nó nhỏ hơn A(1,64,100), số của tôi lớn hơn đáng kể so với số của Graham.

Vui lòng chỉ ra bất kỳ sai lầm nào trong toán học của tôi - mặc dù nếu không có lỗi nào, đây sẽ là con số lớn nhất được tính toán cho đến nay để trả lời câu hỏi này.


4
Trông thật tuyệt; rõ ràng "Ackermann đã sửa đổi" của bạn chính xác là một người đánh giá chuỗi Conway .
đã ngừng quay ngược chiều

1
@leftaroundabout Không hoàn toàn, nhưng tôi nghĩ rằng nó có sức mạnh đệ quy tương tự. Ngoài ra - các số 0 không hợp lệ trong chuỗi, vì vậy bạn sẽ muốn bỏ số 0 khỏi chuỗi Conway của mình trong danh sách điểm.
Cel Skeggs

1
Tại sao bạn làm range(ord('~'))vậy Bạn không thể thực hiện range(125)với ít byte hơn, điều này sẽ cho phép bạn ép số lượng cao hơn như thế range(A(9,9,9))nào?
Esolanging Fruit

1
@ Challenger5: quy tắc 1 nói "Bạn không thể sử dụng các chữ số trong mã của mình (0123456789)"
Cel Skeggs

@CelSkeggs: Ồ, tôi quên mất điều đó.
Esolanging Fruit

18

Perl - điểm 10 ↑↑ 4.1

$_=$^Fx($]<<-$]),/(?<R>(((((((((((((((((((.(?&R))*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*(??{print})/

Một lần nữa lạm dụng công cụ regex của perl để nghiền nát một lượng kết hợp không thể tưởng tượng được, lần này sử dụng một hậu duệ đệ quy.

Trong phần lớn của biểu thức, chúng ta có một trần . để ngăn chặn đệ quy vô hạn, và do đó hạn chế mức độ đệ quy với độ dài của chuỗi.

Những gì chúng ta sẽ kết thúc là đây:

/((((((((((((((((((((.[ ])*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*/
   ___________________/ \_____________________________________
  /                                                           \
  (((((((((((((((((((.[ ])*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*
   ___________________/ \_____________________________________
  /                                                           \
  (((((((((((((((((((.[ ])*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*
   ___________________/ \_____________________________________
  /                    .                                      \
                       .
                       .

... lặp đi lặp lại 671088640 lần, với tổng số 12750684161 lần làm tổ - điều này hoàn toàn đặt ra nỗ lực trước đây của tôi là 23 làm tổ bị xấu hổ. Đáng chú ý, perl thậm chí không bị sặc về điều này (một lần nữa, việc sử dụng bộ nhớ giữ ổn định ở mức khoảng 1,3 GB), mặc dù sẽ mất khá nhiều thời gian trước khi tuyên bố in đầu tiên được phát hành.

Từ phân tích trước đây của tôi dưới đây, có thể kết luận rằng số lượng chữ số đầu ra sẽ theo thứ tự (! 12750684161) 671088640 , trong đó ! KYếu tố còn lại của k (xem A003422 ). Chúng ta có thể ước chừng điều này là (k-1)! , đó là hoàn toàn nhỏ hơn, nhưng trên cùng một thứ tự cường độ.

Và nếu chúng ta hỏi wolframalpha :

... mà hầu như không thay đổi điểm số của tôi cả. Tôi nghĩ chắc chắn rằng ít nhất là 10 5 . Tôi đoán sự khác biệt giữa 10 ↑↑ 410 4.1 lớn hơn nhiều so với bạn nghĩ.


Perl - điểm 10 ↑↑ 4

$_=$^Fx($]<<-$]),/((((((((((((((((((((((.*.*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*(??{print})/

Lạm dụng công cụ regex perl để làm một số tổ hợp cho chúng tôi. Các codeblock được nhúng
(??{print})sẽ chèn kết quả của nó trực tiếp vào regex. Vì $_được cấu tạo hoàn toàn bằng 2s (và kết quả printlà luôn luôn 1), nên điều này không bao giờ có thể khớp và gửi perl spin qua tất cả các kết hợp có thể, trong đó có khá nhiều.

Hằng số sử dụng

  • $^F- xử lý tập tin hệ thống tối đa, điển hình 2.
  • $]- số phiên bản perl, tương tự như 5.016002.

$_sau đó là một chuỗi chứa chữ số 2lặp lại 671088640 lần. Sử dụng bộ nhớ không đổi ở mức khoảng 1,3 GB, đầu ra bắt đầu ngay lập tức.

Phân tích

Hãy xác định P k (n) là số lần câu lệnh in được thực thi, trong đó k là số lần lồng và n là độ dài của chuỗi cộng với một (chỉ vì tôi không cảm thấy như viết n + 1 mọi nơi).

(.*.*)*
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, ... ]

vv Nói chung, công thức có thể được khái quát như sau:

Ở đâu

Đó là, Yếu tố còn lại của k , tức là tổng của tất cả các yếu tố nhỏ hơn k (xem A003422 ).


Tôi đã không thể xác định các hình thức đóng cho D kE k , nhưng điều này không quá quan trọng, nếu chúng tôi quan sát thấy rằng

Với 23 lần lồng, điều này cho chúng ta một số điểm gần đúng:

Điều này nên gần như chính xác, thực sự.

Nhưng để đưa ra một ký hiệu dễ hình dung hơn một chút, chúng ta có thể tính gần đúng cơ sở của số mũ bên trong:

và sau đó là số mũ:

và sau đó hỏi wolframalpha :

mà bạn có thể chỉ cần gọi 10 4 và được thực hiện với nó.


1
Vì vậy, đây sẽ chỉ là một giải pháp hợp lệ miễn là số phiên bản vẫn thấp hơn 10?
Ông Lister

3
@MrLister Có. May mắn thay, không có phiên bản chính nào cao hơn 6 tồn tại và thậm chí đó không được coi là hoàn toàn 'sẵn sàng', mặc dù đã được công bố ban đầu vào năm 2000.
primo

@primo Bạn có nhận ra rằng bạn sẽ phải sửa lại câu trả lời này sau khi Perl đi vào số phiên bản> 10, phải không? ;)
WallyWest

3
@ Eliseod'Annunzio Nếu tôi vẫn còn sống khi ngày đó đến - nếu có bao giờ - tôi hứa sẽ quay lại và sửa nó.
primo

2
Một giải pháp chạy vượt quá 10 ↑↑ 4. Ấn tượng đấy. Bravo!
Tobia

16

Javascript, 10 ↑↑↑↑ 210

100 ký tự:

z=~~Math.E+'';o={get f(){for(i=z;i--;)z+=i}};o.f;for(i=z;i--;)for(j=z;j--;)for(k=z;k--;)o.f;alert(z)

Dựa trên quan sát rằng lặp đi lặp lại tối đa flà cách tối ưu, tôi đã thay thế 13 cuộc gọi fbằng 3 cấp độ của các vòng lặp lồng nhau f, zmỗi lần gọi (trong khi fvẫn tăngz ).

Tôi ước tính điểm số một cách phân tích trên một mảnh giấy mà tôi sẽ gõ nó nếu có ai muốn xem nó.


Điểm được cải thiện: 10 13

Javascript, trong chính xác 100 ký tự, một lần nữa:

z=~~Math.E+'';__defineGetter__('f',function(){for(i=z;i--;)z+=i});f;f;f;f;f;f;f;f;f;f;f;f;f;alert(z)

Điều này cải thiện câu trả lời ban đầu của tôi theo ba cách

  1. Xác định ztrên phạm vi toàn cầu giúp chúng ta không phải gõ o.zmỗi lần.

  2. Có thể định nghĩa một getter trên phạm vi toàn cầu (cửa sổ) và gõ fthay vì o.f.

  3. Có nhiều lần lặp lại fcó giá trị hơn so với bắt đầu với số lớn hơn, vì vậy thay vì (Math.E+'').replace('.','')(= 2718281828459045, 27 ký tự), tốt hơn là sử dụng ~~Math.E+''(= 2, 11 ký tự) và sử dụng các ký tự được trục vớt để gọi fnhiều lần hơn.

Vì, như được phân tích sâu hơn bên dưới, mỗi lần lặp tạo ra, từ một số theo thứ tự cường độ M , một số lớn hơn theo thứ tự cường độ 10 M , mã này tạo ra sau mỗi lần lặp

  1. 210 O (10 2 )
  2. Ôi (10 10 2 ) ∼ O (10 2)
  3. O (10 10 2 ) = O (10 3)
  4. O (10 10 3 ) = O (10 ↑↑ 4)
  5. O (10 10 4 ) = O (10 5)
  6. O (10 10 5 ) = O (10 ↑↑ 6)
  7. O (10 10 6 ) = O (10 7)
  8. O (10 10 7 ) = O (10 ↑↑ 8)
  9. O (10 10 8 ) = O (10 ↑↑ 9)
  10. Ô (10 10 9 ) = O (10 10)
  11. O (10 10 10 ) = O (10 11)
  12. O (10 10 11 ) = O (10 12)
  13. O (10 10 12 ) = O (10 ↑↑ 13)

Điểm: 10 10 10 10 10 16 10 ↑↑ 6.080669764

Javascript, trong chính xác 100 ký tự:

o={'z':(Math.E+'').replace('.',''),get f(){i=o.z;while(i--){o.z+=i}}};o.f;o.f;o.f;o.f;o.f;alert(o.z)

Mỗi o.fvòng gọi vòng lặp while, với tổng số 5 vòng. Chỉ sau lần lặp đầu tiên, điểm số đã vượt quá 10 42381398144233621 . Đến lần lặp thứ hai, Mathicala không thể tính được ngay cả số chữ số trong kết quả.

Đây là một hướng dẫn của mã:

Trong đó

Bắt đầu với 2718281828459045 bằng cách xóa dấu thập phân khỏi Math.E.

Lặp lại 1

Nối chuỗi số giảm dần,

  • 2718281828459045
  • 2718281828459044
  • 2718281828459043
  • ...
  • 3
  • 2
  • 1
  • 0

để tạo thành một số mới (khổng lồ),

  • 271828182845904527182818284590442718281828459043 ... 9876543210.

Có bao nhiêu chữ số trong số này? Vâng, đó là sự kết hợp của

  • 1718281828459046 Số 16 chữ số
  • 900000000000000 Số gồm 15 chữ số
  • 90000000000000 Số có 14 chữ số,
  • 9000000000000 số có 13 chữ số
  • ...
  • 900 số có 3 chữ số
  • 90 số có 2 chữ số
  • 10 số có 1 chữ số

Trong Mathicala,

In[1]:= 1718281828459046*16+Sum[9*10^i*(i+1),{i,-1,14}]+1
Out[1]= 42381398144233626

Nói cách khác, đó là 2,72⋅10 42381398144233625 .

Ghi điểm của tôi, chỉ sau lần lặp đầu tiên, 2,72⋅10 42381398144233619 .

Lặp lại 2

Nhưng đó mới chỉ là khởi đầu. Bây giờ, lặp lại các bước, bắt đầu với số lượng khổng lồ ! Đó là, nối chuỗi số giảm dần,

  • 271828182845904527182818284590442718281828459043 ... 9876543210
  • 271828182845904527182818284590442718281828459043 ... 9876543209
  • 271828182845904527182818284590442718281828459043 ... 9876543208
  • ...
  • 3
  • 2
  • 1
  • 0

Vì vậy, điểm số mới của tôi, Mathematica là gì?

In[2]:= 1.718281828459046*10^42381398144233624*42381398144233625 + Sum[9*10^i*(i + 1), {i, -1, 42381398144233623}] + 1

During evaluation of In[2]:= General::ovfl: Overflow occurred in computation. >>

During evaluation of In[2]:= General::ovfl: Overflow occurred in computation. >>

Out[2]= Overflow[]

Lặp lại 3

Nói lại.

Lặp lại 4

Nói lại.

Lặp lại 5

Nói lại.


Điểm phân tích

Trong lần lặp đầu tiên, chúng tôi đã tính số chữ số trong phép nối chuỗi giảm dần bắt đầu từ 2718281828459045, bằng cách đếm số chữ số trong

  • 1718281828459046 Số 16 chữ số
  • 900000000000000 Số gồm 15 chữ số
  • 90000000000000 Số có 14 chữ số,
  • 9000000000000 số có 13 chữ số
  • ...
  • 900 số có 3 chữ số
  • 90 số có 2 chữ số
  • 10 số có 1 chữ số

Tổng này có thể được biểu diễn bằng công thức,

        nhập mô tả hình ảnh ở đây

trong đó Z biểu thị số bắt đầu ( ví dụ 2718281828459045) và O Z biểu thị thứ tự độ lớn của nó ( ví dụ 15, kể từ Z 10 15 ). Sử dụng tương đương cho các khoản tiền hữu hạn , ở trên có thể được thể hiện rõ ràng như

        nhập mô tả hình ảnh ở đây

mà, nếu chúng ta mất 9 ≈ 10, sẽ giảm hơn nữa

        nhập mô tả hình ảnh ở đây

và cuối cùng, mở rộng các điều khoản và sắp xếp chúng theo thứ tự độ lớn giảm dần, chúng ta có được

        nhập mô tả hình ảnh ở đây

Bây giờ, vì chúng ta chỉ quan tâm đến thứ tự độ lớn của kết quả, hãy thay thế Z bằng "một số theo thứ tự độ lớn của O Z ", tức là 10 O Z -

        nhập mô tả hình ảnh ở đây

Cuối cùng, các điều khoản thứ 2 và thứ 3 hủy bỏ và hai điều khoản cuối cùng có thể được loại bỏ (kích thước của chúng là tầm thường), để lại cho chúng tôi

        nhập mô tả hình ảnh ở đây

từ đó nhiệm kỳ đầu tiên thắng

Được phục hồi, flấy một số theo thứ tự độ lớn của M và tạo ra một số xấp xỉ theo thứ tự độ lớn của M (10 M ).

Lặp lại đầu tiên có thể dễ dàng được kiểm tra bằng tay. 2718281828459045 là một số theo thứ tự cường độ 15 Do đó fnên tạo ra một số theo thứ tự cường độ 15 (10 15 ) 10 16 . Thật vậy, số lượng được sản xuất là, từ trước đó, 2,72⋅10 42381398144233625 namthat là, 10 42381398144233625 10 10 16 .

Lưu ý rằng M không phải là một yếu tố quan trọng trong M (10 M ), thứ tự độ lớn của kết quả của mỗi lần lặp, sau đó, theo một mô hình đơn giản hóa của phép chia:

  1. 10 16
  2. 10 10 16
  3. 10 10 10 16
  4. 10 10 10 10 16
  5. 10 10 10 10 10 16

Nguồn LaTeX

(Z-10^{\mathcal{O}_Z}+1)(\mathcal{O}_Z+1)+\sum_{k=0}^{\mathcal{O}_Z-1}{(9\cdot10^k(k+1))}+1

(Z-10^{\mathcal{O}_Z}+1)(\mathcal{O}_Z+1)+\frac{10-\mathcal{O}_Z10^{\mathcal{O}_Z}+(\mathcal{O}_Z-1)10^{\mathcal{O}_Z+1}}{9}+10^{\mathcal{O}_Z}

(Z-10^{\mathcal{O}_Z}+1)(\mathcal{O}_Z+1)+\mathcal{O}_Z10^{\mathcal{O}_Z}-\mathcal{O}_Z10^{\mathcal{O}_Z-1}+1

Z\mathcal{O}_Z+Z-10^{\mathcal{O}_Z}-\mathcal{O}_Z10^{\mathcal{O}_Z-1}+\mathcal{O}_Z+2

\mathcal{O}_Z10^{\mathcal{O}_Z}+10^{\mathcal{O}_Z}-10^{\mathcal{O}_Z}-\mathcal{O}_Z10^{\mathcal{O}_Z-1}+\mathcal{O}_Z+2

\mathcal{O}_Z10^{\mathcal{O}_Z}-\mathcal{O}_Z10^{\mathcal{O}_Z-1}

Việc tính toán của tôi về điểm số của bạn dựa trên sự quan sát fthực hiện điều gì đó như đưa con số zđến sức mạnh của chính nó. Vì vậy, đó là một cái gì đó như ↑↑↑. Tất nhiên điểm số là không 2↑↑↑2 , xin lỗi ... có vẻ như nhiều hơn 2↑↑↑5+1. Bạn có đồng ý không, tôi có nên đặt nó trong bảng xếp hạng không?
đã ngừng quay ngược chiều

@leftaroundabout - Cảm ơn bạn đã xem xét lại. Tôi không cảm thấy đủ thoải mái với ký hiệu mũi tên lên để nói liệu đề xuất của bạn nghe có đúng hay không, nhưng tôi đã tính thứ tự độ lớn của điểm số của mình (xem chỉnh sửa) nếu bạn muốn cập nhật bảng xếp hạng với điều đó.
Andrew Cheong

Xuất sắc! Tôi cũng không chắc chắn với mũi tên lên. Vì vậy, thực sự bạn có "chỉ" một tháp quyền lực; Tôi sợ rằng hai vị trí của bạn thấp hơn trong bảng xếp hạng. Kudos để phân tích đúng kết quả; ước tính của tôi có thể có nhiều sai sót hơn trong chúng, nhưng tôi cảm thấy ít nhất ai đó nên cố gắng để có được một số thứ tự trong câu trả lời.
đã ngừng quay ngược chiều

1
Điểm của bạn là sai. Bất cứ khi nào bạn bắt đầu một vòng lặp với i=o.z;while(i--)...bạn sẽ không thực hiện o.zthời gian lặp , bởi vì vòng lặp dựa trên một biến số nguyên và o.zchứa một chuỗi lớn hơn số nguyên có thể biểu diễn lớn nhất, tùy thuộc vào kích thước từ của trình thông dịch. Giả sử vì lợi ích của bạn mà trình thông dịch của bạn sẽ không chuyển đổi chuỗi đó thành int, isẽ bắt đầu mỗi lần với giá trị nguyên có thể biểu thị lớn nhất của nó, giả sử là 2 ^ 63, chứ không phải với giá trị hiện tại là o.z.
Tobia

2
@ acheong87 Đừng tự xóa mình, bạn chỉ cần tính toán lại điểm số của mình, giới hạn các biến vòng lặp thành 2 ^ 63 hoặc hơn thế. PS: để lại điểm số phân tích của bạn được đăng ở đây, nó rất mang tính hướng dẫn!
Tobia

14

APL, 10 ↑↑ 3,4

Đây là nỗ lực sửa đổi của tôi:

{⍞←⎕D}⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⊢n←⍎⎕D

Chương trình 100 char / byte *, chạy trên phần cứng hiện tại (sử dụng một lượng bộ nhớ không đáng kể và các biến int 32 bit thông thường) mặc dù sẽ mất rất nhiều thời gian để hoàn thành.

Bạn thực sự có thể chạy nó trên một trình thông dịch APL và nó sẽ bắt đầu in các chữ số. Nếu được phép hoàn thành, nó sẽ in một số có 10 × 123456789 44 chữ số.

Do đó tỷ số là 10 10 × 123456789 44 /100 3 ≈ 10 10 353 ≈ 10 ↑↑ 3,406161

Giải trình

  • ⎕D là một chuỗi hằng được xác định trước bằng '0123456789'
  • n←⍎⎕Dđịnh nghĩa n là số được biểu thị bằng chuỗi đó: 123456789 (là <2 31 và do đó có thể được sử dụng làm biến điều khiển vòng lặp)
  • {⍞←⎕D} sẽ in 10 chữ số thành đầu ra tiêu chuẩn, không có dòng mới
  • {⍞←⎕D}⍣nsẽ thực hiện nó n lần ( là "toán tử năng lượng": không phải *, /, cũng không ^, vì đó không phải là phép toán, nó là một dạng vòng lặp)
  • {⍞←n}⍣n⍣nsẽ lặp lại thao tác trước đó n lần, do đó in 10 chữ số n 2 lần
  • {⍞←n}⍣n⍣n⍣nsẽ làm điều đó n 3 lần
  • Tôi có thể phù hợp với 44 ⍣ntrong đó, vì vậy nó in n chuỗi 44 lần '0123456789'.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
*: APL có thể được viết ở riêng (di sản) charset byte đơn của nó mà các bản đồ ký tự APL đến trên 128 giá trị byte. Do đó, với mục đích ghi điểm, một chương trình gồm các ký tự N chỉ sử dụng các ký tự ASCII và các ký hiệu APL có thể được coi là dài N byte.


Số in của bạn sẽ được chia cho số byte bạn đã sử dụng cho giải pháp của mình ^ 3. , bạn đang chia cho 100 ngay bây giờ.
ToastyMallows

2
@ToastyMallows - hình như 100 cubed(100 ^ 3) với tôi.
Kevin Fegan

1
Tôi biết nhưng đó là byte, không phải ký tự.
ToastyMallows

1
@ToastyMallows Đọc ghi chú cuối về câu trả lời.
Nghệ thuật đơn giản đẹp

Thay đổi {⍞←⎕D}để ⍞←mà giúp bạn tiết kiệm ba byte mà bạn có thể sử dụng để thêm một người nữa ⍣nvà làm cho ⊢n←⍎⎕Dthành ⌽⍕n←⍎⎕Dcho sự gia tăng 80 lần. Nếu bạn cho phép chạy với ⎕PP←17thì sử dụng ×⍨thay vì ⌽⍕gần như tăng gấp đôi số chữ số được in.
Adám

12

Haskell, điểm: (2 2 2 65536 -3) / 1000000 2 ↑↑ 7 ≈ 10 ↑↑ 4.6329710779

o=round$sin pi
i=succ o
q=i+i+i+i
m!n|m==o=n+i
 |n==o=(m-i)!i
 |True=(m-i)!(m!(n-i))
main=print$q!q

Chương trình này chính xác là 100 byte mã Haskell thuần túy. Nó sẽ in số Ackermann thứ tư, cuối cùng tiêu thụ tất cả năng lượng có sẵn, vật chất và thời gian của vũ trụ và xa hơn nữa trong quá trình này (như vậy, hơi vượt quá giới hạn mềm 5 giây).


o=length[]giúp bạn có thêm một khoản !qcuối cùng và tiết kiệm cho bạn một byte trên đó.
Khuldraeseth na'Barya

9

Python, 2 ↑↑ 11/830584 10 ↑↑ 8.632971 (Ký hiệu mũi tên lên)

print True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<True<<True)))))))))

Có lẽ không có máy tính nào có đủ bộ nhớ để chạy thành công, nhưng đó không thực sự là lỗi của chương trình. Với các yêu cầu hệ thống tối thiểu thỏa mãn, nó hoạt động.

Vâng, điều này đang làm thay đổi bit trên các giá trị boolean. Truebị ép buộc 1trong bối cảnh này. Python có số nguyên chiều dài tùy ý.


Mã của bạn không chạy. Chỉ print True<<(True<<(True<<(True<<True<<True)))có, và điều đó tạo ra một chuỗi 19k.
Gabe

Yêu cầu hệ thống tối thiểu đó là gì?
Thủy thủ Danubian

8
Bạn có thể không làm cho nó ngắn hơn bằng cách xác định t=Truevà sau đó sử dụng tsau?
Bob

1
Tốt hơn nữa, chỉ cần tạo một vòng lặp làm các tổ này cho bạn.
Nghệ thuật đơn giản đẹp

Điều này thất bại đối với tôi:$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
Brian Minton

8

GolfScript 3.673e + 374

'~'(.`*

Tôi nghĩ rằng *nó được cho phép vì nó chỉ ra sự lặp lại chuỗi, không nhân.

Giải thích: '~'(sẽ để lại 126 (giá trị ASCII của "~") trên ngăn xếp. Sau đó sao chép số, chuyển đổi nó thành một chuỗi và lặp lại chuỗi 126 lần. Điều này cho 126126126126...đó là khoảng 1.26 e+377. Giải pháp là 7 ký tự, vì vậy chia 7^3cho, cho số điểm xấp xỉ3.673e+374


7

Ruby, xác suất vô hạn, 54 ký tự

x='a'.ord
x+=x while x.times.map(&:rand).uniq[x/x]
p x

x được khởi tạo thành 97. Sau đó, chúng tôi lặp lại quy trình sau: Tạo x số ngẫu nhiên trong khoảng từ 0 đến 1. Nếu tất cả đều giống nhau, sau đó chấm dứt và in x. Nếu không, nhân đôi x và lặp lại. Vì các số ngẫu nhiên của Ruby có 17 chữ số chính xác, tỷ lệ chấm dứt ở bất kỳ bước nào là 1 trong (10e17) ^ x. Do đó, xác suất chấm dứt trong n bước là tổng của x = 1 đến n của (1 / 10e17) ^ (2 ^ n), hội tụ đến 1 / 10e34. Điều này có nghĩa là đối với bất kỳ số nào, dù lớn đến đâu, rất khó có khả năng chương trình này tạo ra một số nhỏ hơn.

Tất nhiên, bây giờ, câu hỏi triết học là liệu một chương trình có ít hơn 1 trong 10 ^ 34 cơ hội chấm dứt bởi bước n cho bất kỳ n nào có thể được nói là chấm dứt. Nếu chúng ta giả sử không chỉ thời gian và sức mạnh vô hạn, mà chương trình còn được cung cấp khả năng chạy với tốc độ tăng dần với tốc độ vượt quá tốc độ xác suất kết thúc giảm, thì thực tế chúng ta có thể làm cho xác suất chấm dứt theo thời gian t tùy ý gần bằng 1.


3
điều này phụ thuộc vào trình tạo số mà trong hầu hết các ngôn ngữ khó có thể tạo ra 97 lần so với cùng một số
ratchet freak

1
Điểm hay, vì vậy, ngoài việc giả định sức mạnh tính toán liên tục tăng nhanh, tôi cũng cần phải thừa nhận một nguồn ngẫu nhiên hoàn hảo và một triển khai Ruby sử dụng nó.
lịch sử

7

GolfScript, ≈ f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (126)))))))))

Điều này được chuyển thể một cách đáng xấu hổ từ một câu trả lời khác của @Howard và kết hợp các đề xuất của @Peter Taylor.

[[[[[[[[[,:o;'~'(]{o:?~%{(.{[(]{:^o='oo',$o+o=<}{\(@\+}/}{,:^}if;^?):?)*\+.}do;?}:f~]f]f]f]f]f]f]f]f

Hiểu biết của tôi về GolfScript còn hạn chế, nhưng tôi tin rằng *và các ^toán tử ở trên không phải là toán tử số học bị OP cấm.

(Tôi sẽ vui vẻ xóa cái này nếu @Howard muốn gửi phiên bản của chính anh ta, điều này chắc chắn sẽ vượt trội hơn phiên bản này.)

Chương trình này tính một số xấp xỉ f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (126)))))) ))) - một phép lặp chín lần của f ε 0 - trong đó f ε 0 là hàm trong hệ thống phân cấp phát triển nhanh , tăng trưởng với tốc độ gần bằng với hàm Goodstein. (f ε 0phát triển quá nhanh mà tốc độ tăng trưởng của n Friedman (k) chức năng và k lần Conway xích mũi tên hầu như không đáng kể thậm chí so với chỉ một tổ chức phi lặp đơn f ε 0 .)


'',:o;'oo',:t;chỉ gán các giá trị 0cho o2cho t; nếu đó chỉ là để giải quyết vấn đề thiếu chữ số thì nó có thể được viết tắt rất nhiều ,:o)):t;, ngoại trừ việc không có lý do gì để xóa tngay từ đầu vì bạn có thể viết expr:t;{...}:f;[[[t]f]f]fnhư [[[expr:t]{...}:f~]f]flưu thêm 3 ký tự.
Peter Taylor

Vẫn không cần phải bật o: Tôi khá chắc chắn rằng nó [0 126]fsẽ lớn hơn một chút [126]fđể bạn lưu một char và tăng sản lượng. Mặc dù bạn đang để lại một chuỗi trống ở đó, điều này có thể phá vỡ mọi thứ: có thể tốt hơn để bắt đầu[[,:o'~'=]
Peter Taylor

Ồ, và [không cần thiết vì bạn không có bất cứ thứ gì khác trong ngăn xếp.
Peter Taylor

Ha ... cuộn những câu trả lời này, và rồi tôi thấy điều này ... và rồi tôi nhận thấy câu trả lời được chấp nhận ... hm ......
Đơn giản là nghệ thuật đẹp

@SimplyBeautitableArt Tôi không chắc ý của bạn là gì, nhưng câu trả lời được chấp nhận sẽ tính toán một con số lớn hơn rất nhiều so với câu hỏi này (giả sử cả hai đều như đã tuyên bố).
res

7

dc, 100 ký tự

[lnA A-=ilbA A-=jlaSalbB A--SbLndB A--SnSnlhxlhx]sh[LaLnLb1+sbq]si[LbLnLasbq]sjFsaFsbFFFFFFsnlhxclbp

Cho đủ thời gian và bộ nhớ, điều này sẽ tính toán một con số khoảng 15 ¹⁶⁶⁶⁶⁶⁵ 15. Ban đầu tôi đã thực hiện chức năng siêu hoạt động, nhưng nó đòi hỏi quá nhiều ký tự cho thử thách này, vì vậy tôi đã loại bỏ các điều kiện n = 2, b = 0n >= 3, b = 0điều kiện, biến n = 1, b = 0điều kiện thành n >= 1, b = 0.

Các toán tử số học duy nhất được sử dụng ở đây là phép cộng và phép trừ.

EDIT: như đã hứa trong các bình luận, đây là một sự cố về những gì mã này làm:

[            # start "hyperoperation" macro
lnA A-=i     # if n == 0 call macro i
lbA A-=j     # if b == 0 call macro j
laSa         # push a onto a's stack
lbB A--Sb    # push b-1 onto b's stack
LndB A--SnSn # replace the top value on n with n-1, then push n onto n's stack
lhxlhx       # call macro h twice
]sh          # store this macro in h

[            # start "increment" macro (called when n=0, the operation beneath addition)
LaLnLb       # pop a, b, and n
F+sb         # replace the top value on b with b+15
q            # return
]si          # store this macro in i

[            # start "base case" macro (called when n>0 and b=0)
LbLnLa       # pop b, n, and a
sb           # replace the top value on b with a
q            # return
]sj          # store this macro in j

Fsa          # store F (15) in a
Fsb          # store F (15) in b
FFFFFFsn     # store FFFFFF "base 10" (150000+15000+1500+150+15=1666665) in n
lhx          # load and call macro h
lbp          # load and print b

Như đã lưu ý, điều này lệch khỏi chức năng siêu hoạt động trong đó các trường hợp cơ sở cho phép nhân và cao hơn được thay thế bằng trường hợp cơ sở để bổ sung. Mã này hoạt động như thể a*0 = a^0 = a↑0 = a↑↑0 ... = a, thay vì chính xác về mặt toán học a*0 = 0a^0 = a↑0 = a↑↑0 ... = 1. Kết quả là, nó tính toán các giá trị cao hơn một chút so với mức cần thiết, nhưng đó không phải là vấn đề lớn vì chúng tôi đang nhắm đến những con số lớn hơn. :)

EDIT: Tôi chỉ nhận thấy rằng một chữ số trượt vào mã một cách tình cờ, trong macro thực hiện gia số cho n=0. Tôi đã loại bỏ nó bằng cách thay thế nó bằng 'F' (15), có tác dụng phụ là tăng tỷ lệ cho mỗi thao tác tăng thêm 15. Tôi không chắc điều này ảnh hưởng đến kết quả cuối cùng như thế nào, nhưng giờ đây có lẽ lớn hơn nhiều.


Tôi không biết mã này làm gì ... chỉ có thể giả sử nó đúng. Có lẽ bạn có thể giải thích một chút?
đã ngừng quay ngược chiều

Tôi sẽ giải thích từng đoạn mã khi tôi có thời gian vào tối nay.
Fraxtil

Chà, tôi đã giải thích về lời giải thích đó, nhưng tôi đã thêm nó ngay bây giờ. Hy vọng nó sẽ xóa mọi thứ lên.
Fraxtil

dc-1.06.95-2 chấm dứt ngay lập tức, không in gì cả.
primo

1
Tôi sẽ không mong đợi nó hoạt động trên bất kỳ máy hiện có nào, với mức độ lớn của giá trị mà nó sẽ cố gắng tạo ra. Tôi có cùng một phiên bản của dc và nó sẽ phân tách sau vài giây. Tôi cho rằng câu trả lời "đúng về mặt lý thuyết" được cho phép ở đây, vì không có tiêu chí nào cho việc tiêu thụ tài nguyên.
Fraxtil

6

Không còn giới hạn về thời gian chạy? Được rồi

Chương trình có cần chạy được trên các máy tính hiện đại không?

Cả hai giải pháp sử dụng một biên dịch 64-bit, do đó longlà một 64-bit số nguyên.

C: lớn hơn 10 (2 64 -1) 2 64 , chính nó lớn hơn 10 10 355393490465494856447 10 ↑↑ 4.11820744

long z;void f(long n){long i=z;while(--i){if(n)f(n+~z);printf("%lu",~z);}}main(){f(~z);}

88 ký tự.

Để làm cho các công thức này dễ dàng hơn, tôi sẽ sử dụng t = 2^64-1 = 18446744073709551615.

mainsẽ gọi fvới một tham số t, sẽ lặp lại tthời gian, mỗi lần in giá trị tvà gọi fvới tham số là t-1.

Tổng số chữ số được in : 20 * t.

Mỗi cuộc gọi đến fvới một tham số t-1sẽ lặp lại tlần, in giá trị tvà gọi f với tham số là t-2.

Tổng số chữ số được in: 20 * (t + t*t)

Tôi đã thử chương trình này bằng cách sử dụng số nguyên 3 bit tương đương (tôi đã đặt i = 8và có cuộc gọi chính f(7)). Nó đạt tuyên bố in 6725600 lần. Đó là công trình ra 7^8 + 7^7 + 7^6 + 7^5 + 7^4 + 7^3 + 7^2 + 7Vì vậy, tôi tin rằng đây là số cuối cùng cho toàn bộ chương trình:

Tổng số chữ số được in: 20 * (t + t*t + t^3 + ... + t^(t-1) + t^t + t^(2^64))

Tôi không chắc cách tính (2 64 -1) 2 64 . Tổng kết đó nhỏ hơn (2 64 ) 2 64 và tôi cần một lũy thừa hai để thực hiện phép tính này. Do đó, tôi sẽ tính (2 64 ) 2 64 -1 . Nó nhỏ hơn kết quả thực, nhưng vì nó có sức mạnh bằng hai, tôi có thể chuyển đổi nó thành sức mạnh 10 để so sánh với các kết quả khác.

Có ai biết cách thực hiện phép tính tổng đó hay cách chuyển đổi (2 64 -1) 2 64 thành 10 n không?

20 * 2 ^ 64 ^ (2 ^ 64-1)
20 * 2 ^ 64 ^ 18446744073709551615
20 * 2 ^ (64 * 18446744073709551615)
20 * 2 ^ 1180591620717411303360
10 * 2 ^ 1180591620717411303361
chia số mũ đó theo log cơ sở 2 của 10 để chuyển cơ sở của số mũ thành lũy thừa 10.
1180591620717411303361 / 3.321928094887362347870319429489390175864831393024580612054756 = 
355393490465494856446
10 * 10 ^ 355393490465494856446
10 ^ 355393490465494856447

Nhưng hãy nhớ, đó là số chữ số được in. Giá trị của số nguyên là 10 được nâng lên sức mạnh đó, vì vậy 10 ^ 10 ^ 355393490465494856447

Chương trình này sẽ có độ sâu ngăn xếp là 2 ^ 64. Đó là 2 ^ 72 byte bộ nhớ chỉ để lưu trữ các bộ đếm vòng lặp. Đó là 4 tỷ Terabyte của bộ đếm vòng lặp. Không đề cập đến những thứ khác sẽ có trong stack cho 2 ^ 64 cấp đệ quy.

Chỉnh sửa: Đã sửa một cặp lỗi chính tả và sử dụng giá trị chính xác hơn cho log2 (10).

Chỉnh sửa 2: Đợi một chút, tôi đã có một vòng lặp mà printf nằm ngoài. Hãy sửa nó đi. Đã thêm khởi tạo i.

Chỉnh sửa 3: Đăng nó, tôi làm hỏng toán trên lần chỉnh sửa trước. Đã sửa.


Cái này sẽ chạy trên các máy tính hiện đại, mặc dù nó sẽ không hoàn thành sớm.

C: 10 ^ 10 ^ 136 10 ↑↑ 3.329100567

#define w(q) while(++q)
long a,b,c,d,e,f,g,x;main(){w(a)w(b)w(c)w(d)w(e)w(f)w(g)printf("%lu",~x);}

98 Nhân vật.

Điều này sẽ in nghịch đảo bit của 0, 2 ^ 64-1, một lần cho mỗi lần lặp. 2 ^ 64-1 là một số gồm 20 chữ số.

Số chữ số = 20 * (2^64-1)^7= 14536774485912137805470195290264863598250876154813037507443495139872713780096227571027903270680672445638775618778303705182042800542187500

Làm tròn độ dài chương trình thành 100 ký tự, Điểm = số in / 1.000.000

Điểm = 10 ^ 14536774485912137805470195290264863598250876154813037507443495139872713780096227571027903270680672445638775618778303705182042800542187494


Có lẽ. %uđã in các số 32 bit ngay cả với trình biên dịch 64 bit, vì vậy tôi đã llbỏ thói quen viết từ trình biên dịch 32 bit.
David Yaw

Tôi nghĩ rằng %llusẽ được cho long long, và %lusẽ chính xác cho long.
tomlogic

Đã sửa. Lực lượng của thói quen: %uluôn luôn là 32 bit, %lluluôn là 64 bit, cho dù biên dịch thành 32 hay 64 bit. Tuy nhiên, giải pháp ở đây yêu cầu longlà 64 bit, vì vậy bạn đúng, %lulà đủ.
David Yaw

Các biến của bạn trên ngăn xếp không được đảm bảo để được khởi tạo thành 0. Trong chương trình thứ hai, chỉ cần đặt chúng bên ngoài bất kỳ chức năng nào. Trong cái đầu tiên, bạn sẽ phải khởi tạo i.
Nghệ thuật

Ngoài ra, tràn dài là hành vi không xác định và nhiều trình biên dịch hiện đại sẽ chỉ tối ưu hóa nó đi nếu chúng phát hiện ra, bạn có thể muốn sử dụng dài không dấu.
Nghệ thuật

5

R - 49 41 ký tự mã, 4.03624169270483442 * 10 ^ 5928 10 2.576681348

set.seed(T)
cat(abs(.Random.seed),sep="")

sẽ in ra [sao chép ở đây chỉ là bắt đầu]:

403624169270483442010614603558397222347416148937479386587122217348........

2
Tôi không nghĩ bạn cần bao gồm số trong bài viết. Nó cũng chiếm rất nhiều không gian trên thiết bị di động.
con người

@totallyhuman Tôi đồng ý, có thể là 100 chữ số đầu tiên, tối đa
tuskiomi

@totallyhuman ok cảm ơn đã xong :)
lebatsnok

catlà một hàm lạ trong đó đối số đầu tiên là .... Vì vậy, mọi thứ trước khi đối số được đặt tên đầu tiên chuyển sang ...(và sẽ là cat'ed), đó là lý do tại sao sepphải được đặt tên - nếu không, người ta có thể rút ngắn nó thànhcat(abs(.Random.seed),,"")
lebatsnok

5

ECMAScript 6 - 10 ^ 3 3/884736

(3 ↑↑↑↑ 3 là G (1) trong đó G (64) là số của Graham)

u=-~[v=+[]+[]]+[];v+=e=v+v+v;D=x=>x.substr(u);K=(n,b)=>b[u]?n?K(D(n),K(n,D(b))):b+b+b:e;u+K(v,e)

Đầu ra: 10 ^ 3 3

Gợi ý:

Glà hàm trong đó G (64) là số của Graham. Đầu vào là một số nguyên. Đầu ra là một chuỗi unary được viết bằng 0. Loại bỏ cho ngắn gọn.

Klà hàm mũi tên lên Knuth a ↑ n b trong đó a ẩn 3. Đầu vào là n, một chuỗi unary và b, một chuỗi unary. Đầu ra là một chuỗi unary.

u là "1".

v là "0000" hoặc G (0)

e là "000".


Maximum code length is 100 bytes;Nếu không thì điều này là gần như không thể đánh bại
Cruncher

@Cruncher Aaah, tôi đã bỏ lỡ điều đó
Kendall Frey

Ahh, tôi ghét bạn bây giờ Mỗi khi tôi cố gắng hiểu kích thước của số Graham thì đầu tôi đau.
Cruncher

Ngoài ra, không phải số của Graham là hằng số> 10 sao?
serakfalcon

1
Bây giờ để xác định xem tôi có đánh bại Ilmari không.
Kendall Frey

5

C

(Với lời xin lỗi đến Darren Stone)

long n,o,p,q,r;main(){while(--n){while(--o){while(--p){while(--q){while(--r){putchar('z'-'A');}}}}}}

n = 2 ^ 64 chữ số (9 ...)

l = 100 ký tự mã

điểm 1e + 2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936570 10 ↑↑ 3.2974890744

[Điểm = n ^ 5 / l ^ 3 = (10 ^ (2 ^ 320) -1) / (100 ^ 3) = (10 ^ 2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086)

Lưu ý rằng tôi xứng đáng bị đánh đập không thương tiếc cho câu trả lời này, nhưng không thể cưỡng lại. Tôi không khuyên bạn nên hành động như tôi trên stackexchange, vì những lý do rõ ràng. :-P


EDIT: Sẽ còn khó hơn để chống lại sự cám dỗ đi cùng với một cái gì đó như

long n;main(){putchar('z'-'A');putchar('e');putchar('+');while(--n){putchar('z'-'A');}

... nhưng tôi cho rằng một quy tắc dự định nhưng không xác định là toàn bộ các chữ số tạo thành số phải được in.


1
#DEFINE C while (- dài n, o, p, q, r, s, t; main () {Cn) {Co) {Cp) {Cq) {Cr {Cs {Ct) {putchar ('z' -'A ');}}}}}}}}
RobAu

@RobAu Bạn là một thiên tài! Làm cho nó một câu trả lời. Tôi chắc chắn nó sẽ là người chiến thắng. Tôi nghĩ rằng bạn đã quên một cặp vợ chồng ), nhưng không sao, vì hiện tại bạn chỉ có 96 ký tự.
Andrew Larsson

Đối với tất cả những người không nhận được sự mỉa mai: xem codegolf.stackexchange.com/a/18060/7021 để biết giải pháp thậm chí tốt hơn;)
RobAu

5

New Ruby: điểm ~ f w ω2 1 (126 2 2 126 )

trong đó f α (n) là hệ thống phân cấp phát triển nhanh.

n=?~.ord;H=->a{b,*c=a;eval"b ?H[b==$.?c:[b==~$.?n:b-(b<=>$.)]*n+c]:p(n+=n);"*n};eval"H[~n];".*n*n<<n

Hãy thử trực tuyến!

Đây *nchỉ là phép nhân chuỗi và mảng, vì vậy chúng sẽ ổn.

Mã bị đánh cắp:

n = 126
H =-> a {
    b, *c = a
    n.times{
        case b
        when nil
            puts(n += n)
        when 0
            H[c]
        when -1
            H[[n]*n+c]
        else
            H[[b.-b<=>0]*n+c]
        end
    }
}
(n*n<<n).times{H[~n]}

trong đó b.-b<=>0trả về một số nguyên 1gần 0hơn b.


Giải trình:

Nó in nvào lúc bắt đầu của mỗi cuộc gọi của H.

H[[]]nhân đôi n( nlần), tức là n = n<<n.

H[[0,a,b,c,...,z]]cuộc gọi H[[a,b,c,...,z]]( nlần).

H[[k+1,a,b,c,...,z]]cuộc gọi H[[k]*n+[a,b,c,...,z]]( nlần), ở đâu [k]*n = [k,k,...,k].

H[[-1,a,b,c,...,z]]cuộc gọi H[[n]*n+[a,b,c,...,z]]( nlần).

H[[-(k+1),a,b,c,...,z]]cuộc gọi H[[-k]*n+[a,b,c,...,z]]( nlần).

H[k] = H[[k]].

Chương trình của tôi khởi tạo n = 126, sau đó gọi H[-n-1]126 2 2 126 lần.


Ví dụ:

H[[0]]sẽ gọi H[[]]mà áp dụng n = n<<n( nlần).

H[[0,0]]sẽ gọi H[[0]]( nlần).

H[[1]]sẽ gọi H[[0]*n]( nlần).

H[[-1]]sẽ gọi H[[n]*n]( nlần).

H[[-1,-1]]sẽ gọi H[[n]*n+[-1]]( nlần).

H[[-3]]sẽ gọi H[[-2]*n]( nlần).

Hãy thử trực tuyến!


Xem sửa đổi cho những điều mát mẻ khác.



Tôi thực sự là 103 byte, bạn nghĩ rằng có một dòng mới.
Rɪᴋᴇʀ

@Riker Tôi tin rằng bạn đã sao chép và dán từ đây. Lưu ý rằng phải có một ký tự không thể in trên dòng thứ hai, do đó 104 byte.
Nghệ thuật đơn giản đẹp

@SimplyBeautitableArt ah, được thôi. Tôi nghĩ rằng tôi đã sao chép nhân vật. Lấy làm tiếc.
Rɪᴋᴇʀ

@Riker Nah, nó thậm chí còn không có do Stackexchange không cho phép tôi giấu các nhân vật vô hình ở mọi nơi.
Đơn giản là nghệ thuật đẹp

4

Haskell - Hàm Ackermann được áp dụng cho kết quả của nó 20 lần - 99 ký tự

Đây là giải pháp haskell tốt nhất tôi có thể đưa ra dựa trên hàm ackermann - bạn có thể nhận thấy một số điểm tương đồng với giải pháp của nm, i = round $ log pi được lấy cảm hứng từ đó và phần còn lại là trùng hợp: D

i=round$log pi
n?m|m<i=n+i|n<i=i?(m-i)|True=(n-i)?m?(m-i)
a n=n?n
b=a.a.a.a
main=print$b$b$b$b$b$i

Nó tự chạy hàm ackermann 20 lần, bắt đầu từ một, chuỗi đang

  • 1,
  • 3,
  • 61,
  • một (61,61),
  • a (a (61,61), a (61,61)) --- chúng ta sẽ gọi đây là 2 (61) hoặc 4 (1) ---
  • một 3 (61)
  • ...
  • một 18 (61) hoặc 20 (1). Tôi nghĩ rằng đây là khoảng g 18 (xem bên dưới).

Về dự toán, wikipedia nói:

a (m, n) = 2 ↑ m - 2 (n + 3) - 3

Từ đó, chúng ta có thể thấy a3 (1) = a (61,61) = 2 ↑ 59 64 + 3, rõ ràng lớn hơn g1 = 3 4 3, trừ khi 3 khi bắt đầu quan trọng hơn nhiều so với tôi nghĩ. Sau đó, mỗi cấp thực hiện các thao tác sau (loại bỏ các hằng số không đáng kể trong một n ):

  • g n = 3 g g n-1 3
  • a n ~ = 2 a n-1 (a n-1 )

Nếu những giá trị này tương đương, thì 20 (1) ~ = g 18 . Thuật ngữ cuối cùng trong một n , ( n-1 ) lớn hơn 3, vì vậy nó có khả năng cao hơn g 18 . Tôi sẽ xem liệu tôi có thể biết liệu điều đó có thúc đẩy nó ngay cả một lần lặp và báo cáo lại không.


Phân tích của bạn là chính xác và g <sub> 18 </ sub> là một xấp xỉ tốt.
Đơn giản là nghệ thuật đẹp

length"a"lưu một vài byte và cho phép bạn một byte khác.a
Khuldraeseth na'Barya

4

Mã máy x86 - 100 byte (Được lắp ráp dưới dạng tệp MSDOS .com)

Lưu ý: có thể uốn cong các quy tắc một chút

Chương trình này sẽ tạo ra 2 (65536 * 8 + 32) số điểm sẽ đặt số điểm ở (10 2 524320 -1) / 1000000

Như một bộ đếm, chương trình này sử dụng toàn bộ ngăn xếp (64kiB) cộng với hai thanh ghi 16 bit

Mã lắp ráp:

8A3E61018CD289166101892663018ED331E4BB3A01438A2627
018827A0300130E4FEC4FEC4FEC410E4FEC400E431C95139CC
75FB31D231C931DBCD3F4175F94275F45941750839D4740D59
4174F85131C939D475F9EBDD8B266301A161018ED0C3535858

Hội,, tổ hợp:

ORG 0x100

SECTION .TEXT
            mov bh, [b_ss]
            mov dx, ss
            mov [b_ss], dx
            mov [b_sp], sp
            mov ss, bx
            xor sp, sp
            mov bx, inthackdst
            inc bx
            mov ah, [inthacksrc]
            mov [bx], ah
            mov al, [nine]
            xor ah, ah
            inc ah
            inc ah
            inc ah
inthacksrc: adc ah, ah
            inc ah
            add ah, ah
            xor cx, cx
fillstack:  push cx
nine:       cmp sp, cx
            jnz fillstack
regloop:    xor dx, dx
dxloop:     xor cx, cx
cxloop:     xor bx, bx
inthackdst: int '?'
            inc cx
            jnz cxloop
            inc dx
            jnz dxloop
            pop cx
            inc cx
            jnz restack
popmore:    cmp sp, dx
            jz end
            pop cx
            inc cx
            jz popmore
restack:    push cx
            xor cx, cx
            cmp sp, dx
            jnz restack
            jmp regloop
end:        mov sp, [b_sp]
            mov ax, [b_ss]
            mov ss, ax
            ret

b_ss:       dw 'SX'
b_sp:       db 'X'

Bạn rõ ràng không bao giờ chạy này. Nó ghi đè mã của nó và sụp đổ.
Joshua

4

C

Kích thước tệp là 45 byte.

Chương trình là:

main(){long d='~~~~~~~~';while(--d)printf("%ld",d);}

Và số lượng sản xuất lớn hơn 10 ^ (10 ^ (10 ^ 1.305451600608433)).

Tệp tôi đã chuyển hướng tiêu chuẩn hiện tại là hơn 16 Gb và vẫn đang phát triển.

Chương trình sẽ chấm dứt trong một khoảng thời gian hợp lý nếu tôi có một máy tính tốt hơn.

Điểm của tôi là không thể so sánh với điểm nổi chính xác gấp đôi.


4

GNU Bash, 10 ^ 40964096² / 80 ^ 3 ≈ 10 ↑↑ 2.072820169

C=$(stat -c %s /) sh -c 'dd if=/dev/zero bs=$C$C count=$C$C|tr \\$((C-C)) $SHLVL'

C = 4096 trên bất kỳ hệ thống hợp lý. SHLVL là một số nguyên dương nhỏ (thường là 1 hoặc 2 tùy thuộc vào việc / bin / sh có bash hay không).

Chỉ 64 bit UNIX:

Điểm: ~ 10 ^ (40964096409640964096 * 40964096409640964096) / 88 ^ 3

C=$(stat -c %s /) sh -c 'dd if=/dev/zero bs=$C$C$C$C$C count=$C$C$C$C$C|tr \\$((C-C)) $SHLVL'

SHLVL là mức độ bash như subbash:bash -c 'bash -c "echo \$SHLVL"'
F. Hauri

stat --printfđừng làm việc Hãy thửstat -c %s
F. Hauri

@ F.Hauri: --printf hoạt động với tôi nhưng cũng vậy -c đã cạo một vài byte. Cảm ơn.
Joshua

4

C, 10 ^ 10 ^ 2485766 10 ↑↑ 3.805871804

unsigned a['~'<<'\v'],l='~'<<'\v',i,z;main(){while(*a<~z)for(i=l;printf("%u",~z),i--&&!++a[i];);}

Chúng tôi tạo ra một mảng gồm 258048 số nguyên không dấu. Nó không thể được ký dài vì điều đó làm cho chương trình quá dài. Chúng không được ký bởi vì tôi không muốn sử dụng hành vi không xác định, mã này là C phù hợp (khác với việc không trả về từ main ()) và sẽ biên dịch và chạy trên bất kỳ máy bình thường nào, mặc dù vậy nó sẽ tiếp tục chạy trong một thời gian dài . Kích thước này là lớn nhất chúng ta có thể thể hiện một cách hợp pháp mà không cần sử dụng các ký tự không phải là ascii.

Chúng tôi lặp qua mảng bắt đầu từ phần tử cuối cùng. Chúng tôi in các chữ số của 2^32-1, tăng phần tử và thả vòng lặp nếu phần tử chưa được gói thành 0. Bằng cách này, chúng tôi sẽ lặp lại (2^32 - 1)^254048 = 2^8257536thời gian, in 10 chữ số mỗi lần.

Dưới đây là mã ví dụ cho thấy nguyên tắc trong phạm vi dữ liệu hạn chế hơn:

#include <stdio.h>
unsigned int a[3],l=3,i,f;

int
main(int argc, char *argc){
        while (*a<4) {
        for (i = l; i-- && (a[i] = (a[i] + 1) % 5) == 0;);
            for (f = 0; f < l; f++)
                printf("%lu ", a[f]);
            printf("\n");
        }
}

Kết quả là khoảng 10 ^ 10 ^ 2485766 chia cho một triệu mà vẫn còn khoảng 10 ^ 10 ^ 2485766.


Thực hiện C tốt nhất, cho đến nay. Tại sao sử dụng 5 biến, khi bạn có thể sử dụng một mảng 258048 ?
primo

4

Powershell (2.53e107976 / 72³ = 6.78e107970 10 ↑↑ 1.701853371)

Điều này mất hơn 5 giây để chạy.

-join(-split(gci \ -r -EA:SilentlyContinue|select Length))-replace"[^\d]"

Nó lấy và ghép độ dài byte của mỗi tệp trên ổ đĩa hiện tại của bạn. Regex loại bỏ bất kỳ ký tự không chữ số.


Quy tắc 1 nói không có chữ số được phép, bạn có một 0trong đó.
Kyle Kanos

Chết tiệt, tôi cũng vậy. Có tính nhân vật của tôi.
Thực phẩm điện tử cầm tay

Bạn có thể sử dụng -ea(+'')để giảm kích thước (được ''chuyển đổi thành một số 0, giá trị enum của SilentlyContinue). Bạn có thể sử dụng \Dcho regex thay thế giống như [^\d]. Và bạn chỉ có thể sử dụng %{$_.Length}thay vì select Lengthloại bỏ các tiêu đề cột. Và sau đó, bạn có thể thoát khỏi -split-replacecũng vậy, để lại cho bạn -join(gci \ -ea(+'')-r|%{$_.Length})ngắn hơn 37 ký tự (tôi cũng sắp xếp lại các tham số vì dù sao cũng cần có dấu ngoặc đơn vì +'').
Joey

4

Python 3, điểm = ack (126.126) / 100 ^ 3

g=len('"');i=ord('~');f=lambda m,n:(f(m-g,f(m,n-g))if n else f(m-g,g))if m else n+g
print(f(i,i))

Hàm f là hàm ackermann, mà tôi có đủ không gian để gọi.

Chỉnh sửa: trước đây "other n + 1", vi phạm quy tắc thách thức - danh tiếng cho Nghệ thuật đơn giản đẹp.


Bạn có thể tăng số lượng của bạn bằng cách thay đổi f(m-g,g)thành f(m-g,m).
Đơn giản là nghệ thuật đẹp

hoặc f(m-g,i). Ngoài ra, ở cuối dòng đầu tiên, bạn sử dụng một số. Tôi tin rằng bạn có nghĩa là để sử dụng n+g, trong đó tôi sẽ chỉ ra n+nsẽ lớn hơn.
Nghệ thuật đơn giản đẹp

Bạn có thể lưu một vài byte bằng cách thay đổi len ('"') cho True
Brian Minton

Và sử dụng ord ('^?') (Trong đó ^? Là ký tự DEL, ASCII 127) cho số lớn hơn. EDIT đừng bận tâm, đó không phải là "Có thể in".
Brian Minton

@BrianMinton Ai nói nó phải được in?
Nghệ thuật đơn giản đẹp

4

Ký tự JavaScript 98

m=Math;a=k=(''+m.E).replace('.',"");j=m.PI%(a&-a);for(i=j;i<(m.E<<k<<k<<k<<m.E);i+=j)a+=k;alert(a)

tạo 2.718e + 239622337 10 ↑↑ 2.9232195202

Đối với số điểm chỉ hơn một chút so với 2.718e + 239622331 10 ↑↑ 2.9232195197

đó là lớn nhất tôi có thể làm cho nó mà không bị lỗi trình duyệt.

(console.log (a) sẽ hiển thị cho bạn toàn bộ đầu ra)

Đừng chạy những thứ này:

m=Math;a=k=(''+m.E).replace('.',"");j=m.PI%(a&-a);for(i=j;i<(k<<k<<k<<k<<k<<k<<k);i+=j)a+=k;alert(a)

sẽ xuất 2.718 + e121333054704 10 ↑↑ 3.0189898069 (còn gọi là 2.718 * 10 ^ (1.213 * 10 ^ 12) để so sánh với câu trả lời dài hơn:

phiên bản cực đoan hơn, nếu nó không bị sập trình duyệt của bạn: (80 char)

m=Math;a=k=(''+m.E).replace('.',"");j=m.PI%(a&-a);for(i=j;i<k;i+=j)a+=k;alert(a)

sẽ tạo ra một số có cùng kích thước với e * 10 ^ (10 ^ 19) 10 ↑↑ 3.106786869689

Chỉnh sửa: mã cập nhật giải pháp gốc chỉ được tạo 2.718e + 464


3

Python 3: 98 ký tự, ≈ 10 256

Sử dụng hàm đối số biến:

E=lambda n,*C:E(*([~-n][:n]+[int("%d%d"%(k,k))for k in C]))if C else n;print(E(*range(ord('~'))))

Thực tế, E làm giảm đối số đầu tiên trong khi tăng phần còn lại của các đối số, ngoại trừ việc thay vì đặt -1 trong các đối số, nó sẽ loại bỏ đối số. Vì mỗi chu kỳ đều giảm đối số đầu tiên hoặc giảm số lượng đối số, điều này được đảm bảo chấm dứt. Hàm tăng được sử dụng là int ("% d% d"% (k, k)), cho kết quả giữa k ** 2 + 2 * k và 10 * k ** 2 + k. Mã của tôi không sử dụng ký hiệu * - nhưng không phải là phép nhân. Nó được sử dụng để làm việc với số lượng đối số khác nhau, mà tôi nghĩ nên tuân theo các quy tắc vì điểm rõ ràng của quy tắc là hạn chế các hoạt động cụ thể, chứ không phải các biểu tượng.

Một số ví dụ về cách E lớn nhanh chóng:

E(1,1) = 1111
E(0,1,1) = E(11,11) = (approx) 10^8191
E(1,1,1) = E(1111,1111) = (approx) 10^(10^335)
E(2,1,1) = E(11111111,11111111) = (approx) 10^(10^3344779)

Chỉ có hai trong số đó là có thể chạy được trên máy tính của tôi trong một khoảng thời gian hợp lý.

Sau đó, E được gọi bởi E(*range(ord('~')))- có nghĩa là:

E(0,1,2,3,4,5, ... ,121,122,123,124,125)

Tôi không hoàn toàn chắc chắn nó lớn đến mức nào (Tôi đã cố gắng ước chừng nó không có tác dụng) - nhưng rõ ràng là nó ~ thực sự ~ lớn.

Ví dụ, khoảng mười hai chu kỳ, kết quả là: (về mặt kỹ thuật nhiều hơn một chút)

E(2**27211,2**27211,2**27212,2**27212,2**27212,2**27212,2**27213,2**27213,2**54423,2**54423,2**54423,2**54423,2**54423,2**54423,2**54423,2**54423,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636)

Dự toán kết quả:

Nếu chúng ta xấp xỉ bước tăng dần lambda k: 10 * k**2, hàm có thể được mô tả là

E(n, C₁, C₂, ... Cᵥ) ≈ E(10^(n²/2) ⋅ C₁²ⁿ, 10^(n²/2) ⋅ C₂²ⁿ, ... 10^(n²/2) ⋅ Cᵥ²ⁿ)
                     ≈ E(10^((10^(n²/2) ⋅ C₁²ⁿ)²/2) ⋅ C₂^(2n  ⋅ 10^(n²/2) ⋅ C₁²ⁿ), ... )
                     ≈ E(10^((10^n² ⋅ C₁⁴ⁿ)/2) ⋅ C₂^(2n  ⋅ 10^(n²/2) ⋅ C₁²ⁿ), ... )

Điều có liên quan chúng tôi đang làm ở đây là xây dựng một tòa tháp có sức mạnh mười, vì vậy điểm số cuối cùng có thể xấp xỉ là 10 ↑↑ 256.

Ước tính kết quả tốt hơn (mặc dù một phần):

Điều này sử dụng giống 10 * k**2như các ước tính khác.

E(0, b) = 10 * b**2
E(1, b) = 10 * (10 * b**2)**2 = 10 * 100 * b**4 = 10**3 * b**4
E(2, b) = 10 * (10**3 * b**4)**2 = 10 * (10**6 * b**8) = 10**7 * b**8
E(a, b) = 10**(2**(a+1)-1) * b**(2**(a+1))

Theo ước tính trước đó, nó sẽ là:

E(a, b) = 10**(a**2/a) * b**(2*a)

Giá trị này nhỏ hơn đáng kể so với giá trị thực tế vì nó sử dụng a**2thay vì 2**acho 10 và sử dụng a*2thay vì 2**acho b.


Tôi ước tính kết quả của bạn, cảm thấy tự do không đồng ý.
đã ngừng quay ngược chiều

Tôi phải không đồng ý với kết quả đó. Một lúc trong khi tôi gõ lý luận của tôi.
Cel Skeggs

Chúng tôi đi đây. Như tôi đã nói trong bản cập nhật, ước tính của bạn dường như nhỏ hơn đáng kể so với giá trị thực tế.
Cel Skeggs

Đủ công bằng, nhưng với bất kỳ giá nào, chúng ta cần một ước lượng đệ quy / quy nạp cùng một lúc, không chỉ một bước duy nhất, để đưa câu trả lời này vào danh sách chấm điểm. Tôi chắc chắn điểm của bạn tốt hơn đệ quy , nhưng cũng khá chắc chắn không tốt hơn Ilmari Karonen (dù sao cũng có thể mở rộng, chỉ sử dụng 18 ký tự), vì vậy tôi nghĩ rằng ước tính của tôi là đủ tốt cho mục đích ghi bàn.
đã ngừng quay ngược chiều

Tôi đồng ý. Tôi sẽ xem liệu tôi có thể làm việc nhiều hơn với nó không và ít nhất là đưa ra kết quả thấp hơn chính xác hơn cho kết quả.
Cel Skeggs

3

C (điểm 10 ^ 20 000 000 000 10 ↑↑ 3.005558275)

  • Đầu ra ~ 20 GB
  • 41 ký tự (41 ^ 3 có nghĩa là không có gì)
main(){for(;rand();printf("%d",rand()));}

Mặc dù rand()đầu ra là xác định vì không có chức năng hạt giống.


Nếu bạn không may thì chương trình của bạn dừng lại sau một lần lặp và lệnh gọi rand()là điều kiện kết thúc làm cho nó không mang tính quyết định. Hơn nữa, gọi rand()trong mỗi lần lặp sẽ làm cho nó chậm khủng khiếp. Sử dụng một cái gì đó như LONG_MAXđược xác định trong limits.hthay thế.
klingt.net

Ok tôi lấy non deterministiclại, bởi vì không có hạt giống như bạn đã viết.
klingt.net

1
Làm thế nào về ~' 'thay vì rand(), in với %u? Hai byte ít nguồn hơn và giá trị cao hơn.
MSalters
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.