Xuất ra một bản sao googol của một chuỗi


63

Tôi thích xem các chương trình không yêu cầu bất kỳ đầu vào nào, in một bản sao googol của một số chuỗi không trống, không ít hơn, không nhiều hơn, và sau đó dừng lại. Một googol được định nghĩa là 10 ^ 100, nghĩa là 1 theo sau là một trăm 0 'trong số thập phân.

Ví dụ đầu ra:

111111111111111111111111111111111111111111111111111111111111111111111111...

hoặc là

Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
...

Chuỗi cũng có thể hoàn toàn bao gồm không gian màu trắng hoặc biểu tượng đặc biệt. Ngoại lệ duy nhất đối với các bản sao giống hệt của một chuỗi cố định là nếu ngôn ngữ của bạn trang trí đầu ra theo một cách nào đó không thể ngăn chặn được, nhưng có thể bị xóa một cách tầm thường trong tập lệnh bao bọc, như thêm một số dòng cho mỗi dòng. Kịch bản bao bọc trong các trường hợp như vậy không cần phải được cung cấp.

Bạn có thể cho rằng máy tính của bạn sẽ không bao giờ hết thời gian, nhưng ngoài ra, chương trình của bạn phải có nhu cầu tài nguyên hợp lý. Ngoài ra, bạn phải tôn trọng mọi hạn chế mà ngôn ngữ lập trình bạn chọn đặt ra, ví dụ, bạn không thể vượt quá giá trị tối đa được phép cho các loại số nguyên của nó và không cần nhiều hơn 4 GB bộ nhớ.

Nói cách khác, về nguyên tắc , chương trình nên có thể kiểm tra được bằng cách chạy nó trên máy tính của bạn. Nhưng vì mức độ của con số này, bạn sẽ phải chứng minh rằng số lượng bản sao của chuỗi mà nó xuất ra chính xác là 10 ^ 100 và chương trình dừng lại sau đó. Dừng có thể thoát hoặc tạm dừng hoặc thậm chí chấm dứt do lỗi, nhưng nếu vậy, lỗi không được tạo ra bất kỳ đầu ra nào không thể dễ dàng tách ra khỏi đầu ra của chương trình.

Đây là , vì vậy giải pháp có ít byte nhất sẽ thắng.

Giải pháp ví dụ (C, chưa được mã hóa, 3768 byte)

#include <stdio.h>

int main() {
  int a00, a01, a02, a03, ..., a99;
  for(a00 = 0; a00 < 10; a00++)
  for(a01 = 0; a01 < 10; a01++)
  for(a02 = 0; a02 < 10; a02++)
  for(a03 = 0; a03 < 10; a03++)
  ...
  for(a99 = 0; a99 < 10; a99++)
    puts("1");
  return 0;
}

10
Hãy xem xét hộp cát lần đầu tiên vào lần tới.
con mèo

9
Khi bạn đăng một câu hỏi mới, trước tiên bạn được yêu cầu đăng nó trong hộp cát .
flawr

1
@KritixiLithos Thật thú vị với ý tưởng đó nhưng tôi không thể nhanh chóng đưa ra giải pháp mẫu. Hãy thoải mái thực hiện phần tiếp theo :-)
The Vee

3
@closevoter Bạn có chắc cái này quá rộng không? Ý thức thông thường sẽ tự động thu hẹp điều này từ "in một chuỗi không trống 10 ^ 100 lần" thành "in một ký tự 10 ^ 100 lần".
dorukayhan

Câu trả lời:


34

Thạch , 6 4 byte

³Ȯ*¡

Đây là một liên kết niladic (đối số hàm w / o) in 10 200 bản sao của chuỗi 100 , nghĩa là nó in 10 100 bản sao của chuỗi bao gồm 10 100 bản sao của chuỗi 100 .

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

Lưu ý rằng trình thông dịch trực tuyến cắt đầu ra ở mức 100 KB vì lý do thực tế. Mã này cũng hoạt động như một chương trình đầy đủ, nhưng do đầu ra ngầm định, chương trình đó in một bản sao quá nhiều.

Làm thế nào nó hoạt động

³Ȯ*¡  Niladic link. No arguments.

³     Set the left argument and initial return value to 100.
 Ȯ    Print the current return value.
  *   Compute 100 ** 100 = 1e200.
   ¡  Call Ȯ 1e200 times. 

3
Chà ... Wow ... In các 10^100bản sao của đầu ra ban đầu ( 10^100bản sao của một chuỗi) sẽ đưa nó đi xa một chút , thậm chí cho cả hai byte. Bạn đã gửi cái này đến thử thách "điểm số là sản lượng / thời lượng chương trình, chiến thắng cao nhất" chưa?
wizzwizz4

1
Không chắc chắn về thách thức mà bạn đề cập đến (chúng tôi đã có một vài loại này), nhưng dù sao thì 3e200 có thể không cạnh tranh.
Dennis

2
@ wizzwizz4 Nếu bạn có thể thể hiện số của mình theo ký hiệu chuẩn thì có lẽ nó quá nhỏ.
orlp

1
"Rơi xuống" = thất bại / sụp đổ
Loren Pechtel

4
@LorenPechtel Jelly được triển khai bằng Python, xử lý các số nguyên 665 bit một cách dễ dàng.
Dennis

60

Fuzzy Octo Guacamole, 13 12 11 10 byte

9+ddpp![g] 

Giải trình:

9+ddpp![g]
9+           # push 9 and increment, giving 10
  dd         # duplicate, twice. now you have [10,10,10]
    pp       # raise a 10 to the 10th power, then raise that to the 10th again. That ends up being 10^100.
      ![ ]   # for loop, `!` sets the counter to the top of stack
        g    # prints an ASCII art goat. 

Mẫu dê được in:

                  ___.
                 //  \\
                ((   ""
                 \\__,
                /6 (%)\,
               (__/:";,;\--____----_
                ;; :";,:";`;,";,;";`,`_
                  ;:,;;";";,;":,";";,-Y\
                   ;,;,;";";,;":;";"; Z/
                   / ;,";";,;";,;";;"
                  / / |";/~~~~~\";;"
                 ( K  | |      || |
                  \_\ | |      || |
                   \Z | |      || |
                      L_|      LL_|
                      LW/      LLW/

2
Phải mất một lúc tôi mới hiểu được cái đầu dê. Nó không dễ nhận ra.
mbomb007

Các gaot đã cho tôi nghệ thuật ASCII, hỏi anh ta về nó.
Rɪᴋᴇʀ

9
Tôi không có ý tưởng những gì bạn đang nói về. +1.
djechlin

15
@djechlin Downgoat yêu cầu tôi thêm một nội dung để in một con dê. Tôi bắt buộc.
Rɪᴋᴇʀ

21

Python, 28 byte

-1 byte nhờ Jonathan Allan!

Con trăn 2:

i=10**100
while i:print;i-=1

Python 3 (30 byte):

i=10**100
while i:print();i-=1

2
i=10**100dòng mới while i:print();i-=1lưu một byte. Tiết kiệm thêm hai bằng cách sử dụng Python 2 vớiwhile i:print;i-=1
Jonathan Allan

@Jonathan ALLan cảm ơn vì byte -1. Đối với giải pháp Python 2, tôi sẽ để lại cho bạn đăng :)
FlipTack

Câu trả lời đầu tiên tốt đẹp! :)
Daniel

Python thực sự có thể lưu trữ 10 đến 100 trong một số nguyên?
Arturo Torres Sánchez

7
@ ArturoTorresSánchez yep, không có giới hạn trên về kích thước int trong python :)
FlipTack

18

Haskell, 28 byte

main=putStr$[1..10^100]>>"1"

Ghép 10 ^ 100 bản sao của chuỗi "1"và in nó.


Việc nối chuỗi có được thực hiện trước khi bắt đầu in không? Nếu vậy tôi sẽ nghĩ điều này phá vỡ quy tắc về "không quá 4 GB bộ nhớ" ...
daniero

8
@daniero: nhờ vào sự lười biếng của Haskell bắt đầu in ngay lập tức. Trên máy tính của tôi, chương trình cần ít hơn 2 MB bộ nhớ (bao gồm cả hệ thống thời gian chạy RTS).
nimi

s=[1..10^100]>>"1"một định dạng câu trả lời được phép?
dùng253751

Số nguyên vô hạn? Nếu không, nó rơi vào ngày 10 ^ 100
Loren Pechtel

@immibis: thử thách nói "in", thường có nghĩa là "in ra thiết bị xuất chuẩn". stừ ví dụ của bạn không in - hoặc nếu bạn sử dụng REPL bao quanh 1với ". Tôi đoán chỉ cần putStr$[1..10^100]>>"1"không có main=nó sẽ ổn, nhưng tôi muốn gửi một chương trình đầy đủ.
nimi

17

Brainfuck, 480 188 114 106 98 byte

Chỉ vì nó cần phải được thực hiện.

Giả sử các ô 8 bit có gói. In 250 255 NUL byte, tức là 10 100 lần 10 155 lần 25 255 byte NUL.

>>>>>>-[[->>>+<<<]------>>>-]<<<[<<<]+[+[>>>]<<<->+[<[+>-]>[-<<<<->+>>------>>]<<<<]>>-[<<<].>>>-]

Giải trình:

>>>>>> là cần thiết để lại một chút không gian làm việc.

- tạo ra 255.

[[->>>+<<<]------>>>-] biến điều này thành 255 bản sao của giá trị 250, đưa ra một băng trông giống như:

0 0 0 0 0 0 250 0 0 250 0 0 ... 250 0 0 [0]

<<<[<<<]+ di chuyển con trỏ dữ liệu trở lại và hoàn thành dữ liệu ban đầu:

0 0 0 [1] 0 0 250 0 0 250 0 0 ...

Sau đó đến vòng lặp: [+...-]ban đầu đặt 1 thành 2, được đặt lại thành 1 ở cuối vòng lặp. Vòng lặp chấm dứt khi thân vòng đã đặt 2 thành 1.

Bây giờ, các số 2 250 250 250 ... 250 đại diện cho một bộ đếm, trong cơ sở 250, với mỗi số một lớn hơn chữ số mà nó đại diện.

  • [>>>]<<<di chuyển tất cả các bên phải. Vì mỗi chữ số được biểu thị bằng một số khác không, điều này là không đáng kể.

  • ->+[<[+>-]>[-<<<<->+>>------>>]<<<<]>>-giảm bộ đếm xuống 1. Bắt đầu với chữ số cuối: chữ số bị giảm. Nếu nó vẫn tích cực, chúng tôi đã hoàn thành. Nếu nó biến thành 0, đặt nó thành 250 và tiếp tục với chữ số trước đó.

  • [<<<].>>>di chuyển con trỏ trở lại trước chữ số bên trái nhất và đây là thời điểm tốt để in một byte NUL. Sau đó đặt lại vị trí chính xác cho chữ số bên trái nhất, để xem chúng ta đã hoàn thành chưa.

Để xác minh tính đúng đắn, thay đổi ban đầu -để +in 250 1 NUL byte, ++với giá 250 2 vv


16

C, 51 byte

Hàm g()gọi hàm đệ quy f()đến độ sâu 99.

Không bao gồm dòng mới không cần thiết được thêm vào giữa f()g()cho rõ ràng.

f(n,i){for(i=10;i--;)n?f(n-1):puts("");}
g(){f(99);}

//call like this
main(){g();}

In dòng mới 1E100.

Tuyên bố ilà tham số thứ hai f()không được bảo đảm để hoạt động trong tất cả các phiên bản C. Đã thử nghiệm trên máy của tôi (GCC trên CygWin) và trên ideone.com (tôi tin rằng chúng cũng chạy GCC), nhưng không rõ ràng cho đến f (99) lý do!


1
Điều đó có tuân thủ giới hạn bộ nhớ 4 GiB không?
Dennis

3
@Dennis Nên làm, nó chỉ lưu trữ độ sâu 99 đệ quy của f, n và i trên ngăn xếp, xung quanh thực tế là C có thể xử lý một số thập phân 100 chữ số. Tôi sẽ ước tính tối đa khoảng 20 byte cho mỗi phiên bản f()khoảng 1980 byte. Việc putsbỏ các dòng mới vào API và API sẽ xuất ra và xóa bộ đệm khi cần thiết.
Cấp sông St

3
Đã thử nghiệm cục bộ và việc sử dụng bộ nhớ thậm chí không vượt qua 1 MiB.
Dennis

Tuyên bố của tôi là tham số thứ hai của f () không được bảo đảm để làm việc trong tất cả các phiên bản của C. : Nó có thể phá vỡ với một chồng-args gọi hội nghị nơi callee bật args từ ngăn xếp (hoặc nếu fviết để ngăn xếp không gian mà người gọi wasn 't mong đợi nó). clang không cảnh báo về "quá ít đối số trong lệnh gọi 'f'", -std=c89-std=c99vì vậy, định nghĩa này hoạt động như một tuyên bố với một số lượng đối số cụ thể. Nhưng tôi quên mất; Tôi nghĩ điều đó có nghĩa là trình biên dịch biết hàm mong đợi 2 arg và sẽ luôn chừa khoảng trống cho arg thứ 2.
Peter Cordes

1
@FelixDombek cộng đồng đã quyết định một thời gian trước rằng "chương trình" có nghĩa là bạn có thể viết chương trình hoặc chức năng trừ khi "chương trình đầy đủ" được chỉ định rõ ràng. meta.codegolf.stackexchange.com/a/6912/15599 . Vì vậy, trình của tôi bao gồm gvà chức năng trợ giúp của nó f. mainsẽ lâu hơn Có một vài chức năng đệ trình khác ở đây, nếu bạn xem qua.
Cấp sông St

14

Mã máy hàng hóa VIC 20 (40 byte)

... ở đây hiển thị dưới dạng thập lục phân:

1040   A9[64]A2 00 9D 68 10 E8  E0[32]D0 F8 A9 00 9D 68
1050   10 A9[31]20 D2 FF A2 00  A9[64]DE 68 10 30 08 D0
1060   F0 9D 68 10 E8 D0 F3 60

(Bắt đầu sử dụng SYS 4160:)

Ý nghĩa của các byte trong ngoặc

  • 0x64 (xảy ra hai lần) là cơ sở (100); (giá trị từ 2 đến 127 sẽ hoạt động)
  • 0x32 là số mũ (50) (mọi giá trị khác không (1-255) sẽ hoạt động)
  • Lưu ý rằng 100 ^ 50 = 10 ^ 100; chạy chương trình 100 ^ 50 lần sẽ tiết kiệm RAM hơn so với thực hiện 10 ^ 100 lần
  • 0x31 là ký tự ASCII sẽ được in

và tại thời điểm không cần quá 4 G B bộ nhớ.

Đây có phải là một lỗi đánh máy?

Chúng ta có năm 1981.

Một máy tính gia đình thông thường có RAM từ 1 đến 16 K B! Và bạn sẽ khó tìm thấy những người mẫu chuyên nghiệp có 1 M B trở lên.

(Ok. Chỉ là một trò đùa.)

Nói cách khác, về nguyên tắc chương trình nên có thể kiểm tra được bằng cách chạy nó trên máy tính của bạn. Nhưng vì mức độ của con số này, bạn sẽ phải chứng minh rằng số lượng bản sao của chuỗi mà nó xuất ra chính xác là 10 ^ 100 và chương trình dừng lại sau đó.

Chương trình đã được thử nghiệm với các cơ sở và số mũ khác. Tôi không có nghi ngờ rằng nó cũng sẽ làm việc với 100 và 50.

Ít nhất là nó không sụp đổ với những con số này (nhưng cũng không chấm dứt trong thời gian có thể đo được).

Kích thước bộ nhớ đủ cho số mũ 50 và 100 nhỏ hơn 127 nên cơ sở 100 không phải là vấn đề.

Ý tưởng cơ bản

Có một bộ đếm 50 chữ số được tính trong hệ thống 100. Byte 0x01-0x64 đại diện cho các chữ số 0-99. Byte đầu tiên trong bộ đếm là chữ số thấp nhất. Byte cuối cùng trong bộ đếm (chữ số cao nhất) được theo sau bởi một byte có giá trị 0x00.

Bộ đếm có giá trị ban đầu 100 ^ 50.

Một vòng lặp bên ngoài đang ghi một byte vào "kênh hiện tại" ("đầu ra tiêu chuẩn" trên các hệ thống hiện đại; thường là màn hình) và sau đó làm giảm bộ đếm.

Việc giảm được thực hiện bởi một vòng lặp bên trong: Nó giảm một chữ số và trong trường hợp dòng chảy từ 1 đến 99, nó chuyển sang chữ số tiếp theo. Nếu byte 0x00 ở cuối bộ đếm bị giảm thì chương trình dừng lại.

Mã lắp ráp là

    ; Some constants
    base=10
    exponent=100
    character=0x32

    ; Initialize the content of the counter to 100^50
    ; (Fill the first 50 bytes with the value 100)
    lda  #base
    ldx  #0
initLoop:
    sta  counter,x
    inx
    cpx  #exponent
    bne  initLoop
    ; (The terminating 0 at the end of the counter)
    lda  #0
    sta  counter,x

    ; Now do the actual job
outerLoop:
    ; Output a character
    lda  #character
    jsr  (0xFFD2)
    ; Prepare for the inner loop
    ldx  #0
    lda  #base
innerLoop:
    ; Decrement one digit
    dec  counter,x
    ; Result is negative -> must have been the terminating
    ; NUL byte -> Exit
    bmi  progEnd
    ; Result is not zero -> Print the next byte
    bne  outerLoop
    ; Result is zero -> Was 0x01 before -> As 0x01 represents
    ; digit 0 this is an underflow -> set the digit to
    ; "exponent" (100) again (which represents digit 99)
    sta  counter,x
    ; Go to the next digit and...
    inx
    ; ... repeat the inner loop (decrement next digit)
    ; (Note that this conditional branch is ALWAYS taken)
    bne  innerLoop

progEnd:
    rts

counter:
    ; The memory used by the counter is here...

BIÊN TẬP

Chương trình này cũng chạy trên Commodore C64!


Tôi đã mượn ý tưởng đệ quy của @ LevelRiverSt cho việc triển khai mã máy x86-64 của tôi , xuất hiện ở 30B (sử dụng putchar từ libc để in). Tôi đã xem xét một bộ đếm vòng lặp chính xác mở rộng và nó cũng hoạt động trong x86. (Và tương tự có thể được khởi tạo khá rẻ). Có lẽ tôi sẽ thử nó vào lúc nào đó ...
Peter Cordes

1
LOL wow, tôi .... <golf clap> ... Tôi đã không thấy 6502 lắp ráp trong ... tốt, một thời gian dài.
Alex Howansky

12

Nút, 89 byte

for(i="0".repeat(100)+1;+i;i=i.replace(/0*./,x=>"9".repeat(x.length-1)+~-x))console.log()

Đầu ra 10 100 dòng mới. (Về mặt lý thuyết, nghĩa là; kiểm tra bằng cách thay thế 100bằng 1đầu ra 10 1 dòng mới thay thế.)

Này hoạt động bằng cách thiết lập ivào chuỗi

00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001

(100 số không và 1; một googol đã đảo ngược), sau đó liên tục "trừ 1" bằng biểu thức thay thế và xuất ra một dòng mới cho đến khi chuỗi là tất cả các số không.

Một cổng của câu trả lời C ++ sẽ là 49 byte:

(f=n=>{for(i=10;i--;)n?f(n-1):console.log()})(99)

1
Đây là thiên tài! Đó là hoặc bạn là một chuyên gia tại Retina, không nhất thiết loại trừ "thiên tài" ...
Patrick Roberts

7

05AB1E , 6 byte

Tn°F1?

Giải trình

Tn°    # push 10^100
   F   # 10^100 times do
    1? # print 1

5
@MartinRosenau: May mắn thay 05AB1E sử dụng số nguyên python 3 không có giới hạn.
Emigna

1
@JanDvorak: Theo tài liệu Python 3 , không còn giới hạn về giá trị của số nguyên .
Emigna

1
@JanDvorak: Thật vậy. Tôi đã sử dụng một số con số khá lớn mà không có vấn đề gì (mặc dù không lớn lắm). Chúng tôi chỉ cần xử lý 1e100 ở đây và python hoàn toàn có thể xử lý điều đó :)
Emigna

1
@JanDvorak Kích thước tối đa của số nguyên Python chỉ phụ thuộc vào dung lượng bộ nhớ khả dụng.
Mego

4
Tôi đã đạt đến giới hạn trước khi cố gắng làm xáo trộn một con số dài. Máy tôi đang sử dụng có thể xử lý các số lớn hơn 10 ^ 3000 trước khi tràn số nguyên.
Esolanging Fruit

6

Ruby, 20 byte

(10**100).times{p 1}

In 1 theo sau là dòng mới 1E100 lần.

1E100 không hoạt động vì nó ước lượng cho một float, không phải là một số nguyên chính xác tùy ý.


Bạn có thể loại bỏ dấu ngoặc đơn?
OldBunny2800

1
Các phương thức số @ OldBunny2800 được ưu tiên hơn các nhà khai thác, do đó, nó sẽ được hiểu là10**(100.times{p 1})
Level River St

1
Đối với những người tò mò, 1E100.to_iđánh giá tới 10000000000000000159028911097599180468360808563945281389781327557747838772170381060813469985856815104 trên máy tính của tôi.
Andrew Grimm

6

/// , 36 ký tự ASCII (4 ký tự riêng biệt)

/t./.ttttt//.t/t\..........//t//t...

Xuất ra .ký tự 3 * 10 ^ 125 lần, nghĩa là nó xuất ra chuỗi bao gồm 3 * 10 ^ 25 lần lặp lại của .ký tự, 10 ^ 100 lần.

Giải trình:

  1. /t./.ttttt/: Thay thế t.bằng .ttttttrong suốt phần còn lại của chương trình, lặp lại cho đến khi không còn trường hợp nào t.. Điều này thay thế t...bằng ...tiếp theo là 125 ts.
  2. /.t/t\........../: Thay thế .tbằng t..........trong suốt phần còn lại của chương trình, lặp lại cho đến khi không còn trường hợp nào .t. Điều này diễn ra ...sau 125 tgiây và biến nó thành 125 tgiây sau đó là 10 ^ 125 lần xuất hiện ....
  3. /t//: Hủy bỏ tất cả ts còn lại .
  4. t...: Điều này được thay thế bằng 3 * 10 ^ 125 .s. Đầu ra chúng.

Bây giờ, xuất ra 10 ^ 100 lần lặp lại 3 * 10 ^ 25 lần lặp lại của một thứ gì đó giống như gian lận. Chương trình này xuất .ký tự chính xác 10 ^ 100 lần, sử dụng 45 ký tự ASCII:

/T/tttttttttt//.t/t..........//t//.TTTTTTTTTT

Giải thích về điều này:

  1. /T/tttttttttt/: Thay thế Tbằng tttttttttttrong suốt phần còn lại của chương trình. Điều này thay thế TTTTTTTTTTvới 100 lần lặp lại t.
  2. /.t/t........../: Thay thế .tbằng t..........trong suốt phần còn lại của chương trình. Điều này diễn ra .sau 100 tgiây và biến nó thành 100 tgiây sau đó là 10 ^ 100 .giây.
  3. /t//: Hủy bỏ tất cả ts còn lại .
  4. .TTTTTTTTTT: Điều này được thay thế bằng 10 ^ 100 .s. Đầu ra chúng.

Cuối cùng, đây là một chương trình thỏa hiệp, tạo ra .ký tự 2 * 10 ^ 100 lần, sử dụng 40 ký tự:

/t./.tttttttttt//.t/t\..........//t//t..

6

Befunge 93, 33 byte

1>01g0`#@!# _01v
d^.1 **52p10-1g<

Thật không may, Befunge không có chức năng quyền lực, vì vậy hầu như tất cả các mã đó là việc tôi thực hiện chức năng quyền lực. Tôi vẫn đang làm việc này.

Giải trình:

1 > 01g 0` #@!# _ 01g 1- 01p 25** 1. v
d ^                                  <

1: Bắt đầu với 1ở trên cùng bên trái để khi chúng tôi nhân lên, chúng tôi không nhận được 0mọi lúc.

01g: lấy ký tự ở vị trí (0, 1) d, có mã ASCII là 100.

0`: xem giá trị được lưu trữ trong (0, 1) lớn hơn 0; giá trị này sẽ thay đổi.

#@!# _: Hợp lý không !theo giá trị chúng tôi nhận được từ bước cuối cùng (0 hoặc 1), do đó nếu là 1, bây giờ chúng tôi có 0 và chúng tôi Lưu ý rằng điều đó #có nghĩa là bạn bỏ qua ký tự tiếp theo trong mã.

01g 1- 01p: Lấy lại giá trị được lưu trong (0, 1), trừ 1 từ nó và lưu giá trị mới này tại (0, 1)

25**: nhân giá trị trên cùng của ngăn xếp với 10

1.: in 1mỗi lần vòng lặp này

1 được in (trên lý thuyết) lần googol, nhưng nó nhanh chóng chạy ra khỏi trang mà tôi đã thử nghiệm này.

Bạn có thể chạy mã Befunge 93 tại đây . Vì một số lý do, giá trị hàng đầu của ngăn xếp là 1.0000000000000006e+100khi cần 1.0e+100. Tôi không biết nó 6đến từ đâu, nhưng tôi không nghĩ nó nên ở đó và đó có thể là một số lỗi làm tròn hoặc một cái gì đó tương tự.


4

ABCR , 56 byte

++++++++++AAAAAAAAAA7a*A!(x4bBBBBBBBBBB7b+B@(xa(Ax5b(Box

Tarpits Turing rất thú vị, đặc biệt là khi chúng không có phép nhân hoặc số mũ dễ dàng. Mặt khác, tôi chỉ cần sử dụng hai trong số ba hàng đợi!

Giải trình:

++++++++++                                             Set register to 10
          AAAAAAAAAA                                   Queue 10 to queue A 10 times
                    7a*A!(x                            Sum up all of queue A by:
                    7     x                             While the register is truthy:
                     a*                                 Dequeue two elements of A, sum them...
                       A                                ...and queue the result back to A.
                        !(                              If there's only one element left,
                                                        i.e. !(A.len - 1),
                                                        break from the loop.  A now has 100, our exponent.

                             4                        While A's front is truthy:
                              bBBBBBBBBBB              Clone the front of B 10 (our base) times.  (The first iteration fills it up with ten 1s)
                                         7b+B@(x       Sum up all of queue B like we did with A
                                                a(A    Decrement a (so that the loop actually ends. Runs 101 times like it should) x   

                                                       B now contains 10^100 only.

                                                   5b(B x   10^100 times:
                                                       o     print the front of queue A (0)

4

Mẻ 574 242 byte

@echo off
set t=for /l %%a in (2,1,33554432)do call:
set f=for /l %%a in (2,1,9765625)do call:
%t%a
:a
%t%b
:b
%t%c
:c
%t%d
:d
%f%e
:e
%f%f
:f
%f%g
:g
%f%h
:h
%f%i
:i
%f%j
:j
%f%k
:k
%f%l
:l
%f%m
:m
%f%n
:n
echo

Mỗi vòng lặp rơi qua do đó thực hiện một lần lặp bổ sung. Vòng lặp được giới hạn ở ~ 2³² do giới hạn số nguyên 32 bit. Bốn vòng đầu tiên mỗi vòng đếm 2²⁵ với tổng số 2¹⁰⁰ trong khi mười vòng còn lại mỗi vòng có 5 với tổng số 5.

Chỉnh sửa: Đã lưu 58% không thể tưởng tượng được nhờ @ ConorO'Brien.



1
@ ConorO'Brien Chờ đã, bạn có thể làm điều đó? Tôi không bao giờ biết!
Neil

4

TI-Basic, 20 byte

Nói thẳng ra. Chỉ có tám dòng được hiển thị cùng một lúc và các dòng trước đó không ở trong bộ nhớ. Vì ᴇ100không được hỗ trợ, chúng tôi phải lặp từ -ᴇ99đến 9ᴇ99. Sau đó, nếu I!=0, hiển thị chuỗi (mà, nhân tiện, là 3). Bằng cách này, chúng tôi in nó chính xác ᴇ100lần.

For(I,-ᴇ99,9ᴇ99:If I:Disp 3:End

Bạn có chắc chắn biến "I" đủ chính xác để lưu 99 chữ số không?
Martin Rosenau

Được rồi, vâng, tôi nên đủ để giữ điều đó, mặc dù nó sẽ chỉ hiển thị tối đa 14 nếu sử dụng "Phân phối", nhưng chúng tôi không thực sự xuất nó, chỉ kiểm tra xem nó có bằng không không. Ngoài ra, bạn nói đúng về biểu tượng, nhưng tôi đoán bạn sẽ hiểu ý tôi là gì. Tôi sẽ sao chép nó vào bài viết của tôi bây giờ.
Timtech

Tôi chưa bao giờ gặp phải một phiên bản BASIC với số nguyên vô hạn nhưng điều đó thậm chí không quan trọng vì vòng lặp của bạn không thực hiện gần đủ số lần.
Loren Pechtel

1
Umm yea, không có số nguyên vô hạn ở đây. Số nguyên phải nằm trong khoảng + -10 ^ 100
Timtech

4

Chức năng mã máy x86-64, 30 byte.

Sử dụng logic đệ quy tương tự như câu trả lời C của @Level River St . (Độ sâu đệ quy tối đa = 100)

Sử dụng puts(3)chức năng từ libc, mà các tệp thực thi thông thường được liên kết với dù sao đi nữa. Nó có thể gọi được bằng cách sử dụng Hệ thống V86I x86-64, tức là từ C trên Linux hoặc OS X, và không ghi đè bất kỳ thanh ghi nào mà nó không được yêu cầu.


objdump -drwC -Mintel đầu ra, nhận xét với lời giải thích

0000000000400340 <g>:  ## wrapper function
  400340:       6a 64                   push   0x64
  400342:       5f                      pop    rdi       ; mov edi, 100  in 3 bytes instead of 5
  ; tailcall f by falling into it.

0000000000400343 <f>:  ## the recursive function
  400343:       ff cf                   dec    edi
  400345:       97                      xchg   edi,eax
  400346:       6a 0a                   push   0xa
  400348:       5f                      pop    rdi       ; mov edi, 10
  400349:       0f 8c d1 ff ff ff       jl     400320 <putchar>   # conditional tailcall
; if we don't tailcall, then eax=--n = arg for next recursion depth, and edi = 10 = '\n'

  40034f:       89 f9                   mov    ecx,edi   ; loop count = the ASCII code for newline; saves us one byte


0000000000400351 <f.loop>:
  400351:       50                      push   rax       ; save local state
  400352:       51                      push   rcx
  400353:       97                      xchg   edi,eax   ; arg goes in rdi
  400354:       e8 ea ff ff ff          call   400343 <f>
  400359:       59                      pop    rcx       ; and restore it after recursing
  40035a:       58                      pop    rax
  40035b:       e2 f4                   loop   400351 <f.loop>
  40035d:       c3                      ret    
# the function ends here

000000000040035e <_start>:

0x040035e - 0x0400340 = 30 bytes

# not counted: a caller that passes argc-1 to f() instead of calling g
000000000040035e <_start>:
  40035e:       8b 3c 24                mov    edi,DWORD PTR [rsp]
  400361:       ff cf                   dec    edi
  400363:       e8 db ff ff ff          call   400343 <f>
  400368:       e8 c3 ff ff ff          call   400330 <exit@plt>    # flush I/O buffers, which the _exit system call (eax=60) doesn't do.

Được xây dựng với yasm -felf64 -Worphan-labels -gdwarf2 golf-googol.asm && gcc -nostartfiles -o golf-googol golf-googol.o . Tôi có thể đăng nguồn NASM ban đầu, nhưng điều đó có vẻ như lộn xộn vì các hướng dẫn asm có ngay trong phần tháo gỡ.

putchar@plt là ít hơn 128 byte từ jl , vì vậy tôi có thể đã sử dụng bước nhảy ngắn 2 byte thay vì bước nhảy gần 6 byte, nhưng điều đó chỉ đúng trong một chương trình thực thi nhỏ, không phải là một phần của chương trình lớn hơn. Vì vậy, tôi không nghĩ rằng tôi có thể biện minh cho việc không tính quy mô của việc thực hiện libc nếu tôi cũng tận dụng mã hóa jcc ngắn để tiếp cận nó.

Mỗi cấp độ đệ quy sử dụng 24B không gian ngăn xếp (2 lần đẩy và địa chỉ trả lại được đẩy bằng CALL). Mọi độ sâu khác sẽ gọi putcharvới ngăn xếp chỉ được căn chỉnh bởi 8, không phải 16, do đó, điều này vi phạm ABI. Việc triển khai stdio sử dụng các cửa hàng được căn chỉnh để làm đổ các thanh ghi xmm vào ngăn xếp sẽ bị lỗi. Nhưng glibc putcharkhông làm điều đó, viết vào một đường ống với bộ đệm đầy đủ hoặc viết vào một thiết bị đầu cuối với bộ đệm dòng. Đã thử nghiệm trên Ubuntu 15.10. Điều này có thể được khắc phục bằng một lần đẩy / bật giả trong .loop, để bù cho ngăn xếp thêm 8 lần nữa trước cuộc gọi đệ quy.


Bằng chứng là nó in đúng số dòng mới:

   # with a version that uses argc-1  (i.e. the shell's $i)  instead of a fixed 100
$ for i in {0..8}; do echo -n "$i: "; ./golf-googol $(seq $i) |wc -c; done
0: 1
1: 10
2: 100
3: 1000
4: 10000
5: 100000
6: 1000000
7: 10000000
8: 100000000
... output = 10^n newlines every time.

Phiên bản đầu tiên của tôi là 43B và được sử dụng puts()trên bộ đệm gồm 9 dòng mới (và chấm dứt 0 byte), do đó, sẽ đặt thêm số 10. Trường hợp cơ sở đệ quy đó thậm chí còn gần hơn với cảm hứng C.

Bao thanh toán 10 ^ 100 một cách khác nhau có thể đã rút ngắn bộ đệm, có thể giảm xuống còn 4 dòng mới, tiết kiệm 5 byte, nhưng sử dụng putchar thì tốt hơn nhiều. Nó chỉ cần một số nguyên arg, không phải là một con trỏ và không có bộ đệm nào cả. Tiêu chuẩn C cho phép triển khai trong đó có macro putc(val, stdout), nhưng trong glibc, nó tồn tại như một chức năng thực sự mà bạn có thể gọi từ asm.

Chỉ in một dòng mới cho mỗi cuộc gọi thay vì 10 chỉ có nghĩa là chúng ta cần tăng độ sâu đệ quy tối đa thêm 1, để có thêm một hệ số 10 dòng mới. Vì cả 99 và 100 đều có thể được biểu diễn bằng 8 bit ngay lập tức push 100được ký hiệu, vẫn chỉ là 2 byte.

Thậm chí tốt hơn, có 10trong một thanh ghi hoạt động như cả một dòng mới và bộ đếm vòng lặp, tiết kiệm một byte.

Ý tưởng để lưu byte

Phiên bản 32 bit có thể tiết kiệm một byte cho dec edi, nhưng quy ước gọi stack-args (đối với các hàm thư viện như putchar) làm cho công việc gọi đuôi dễ dàng hơn và có thể sẽ cần nhiều byte hơn ở nhiều nơi hơn. Tôi có thể sử dụng một quy ước register-arg cho riêng tư f(), chỉ được gọi bởi g(), nhưng sau đó tôi không thể gọi putar (vì f () và putchar () sẽ có số lượng stack-args khác nhau).

Có thể có f () duy trì trạng thái của người gọi, thay vì thực hiện lưu / khôi phục trong trình gọi. Tuy nhiên, điều đó có thể rất tệ bởi vì có lẽ nó cần phải tách riêng ở mỗi bên của chi nhánh và không tương thích với việc cắt đuôi. Tôi đã thử nó nhưng không tìm thấy bất kỳ khoản tiết kiệm.

Giữ một bộ đếm vòng lặp trên ngăn xếp (thay vì đẩy / bật RCx trong vòng lặp) cũng không giúp được gì. Đó là 1B tồi tệ hơn với phiên bản được sử dụng, và có lẽ còn thua lỗ hơn với phiên bản này thiết lập RCx rẻ hơn.


2
Hoan hô cho câu trả lời lắp ráp! :)

4

PHP, 44 byte

for($i=bcpow(10,1e2);$i=bcsub($i,print 1););

Đoạn mã này sẽ xuất ra số 1lần googol. Nó sẽ không hết bộ nhớ, nhưng nó rất chậm. Tôi đang sử dụng BCMath để có thể xử lý các số nguyên dài.

Hiệu suất tốt hơn một chút, nhưng không nhỏ (74 byte):

for($m=bcpow(10,100);$m;$m=bcsub($m,$a))echo str_repeat(a,$a=min(4e9,$m));

Sẽ xuất ra thư agoogol lần. Nó sẽ tiêu thụ gần 4GB bộ nhớ, xuất ra khoảng 4e9 ký tự cùng một lúc.


nếu chỉ một 'a' mất gần 4GB, thì 'aaa' sẽ làm gì? Nó sẽ mất nhiều mã hơn, nhưng với ob_flush (); bạn có thể đi xa hơn
Martijn

Uhm, nó không phải là một a, nó là một chuỗi 4 * 10 ^ 9 as. Không có cách nào để không vượt quá 4GB nếu bạn sẽ đặt gấp 3 lần số ađó vào đó. Ob_flush không liên quan gì đến nó, điểm của ví dụ thứ hai là xuất ra các chuỗi lớn cùng một lúc thay vì xuất ra một lượng nhỏ ký tự mỗi lần, điều này dẫn đến chương trình chạy nhanh hơn một chút, với chi phí sử dụng bộ nhớ nhiều hơn.
chocochaos

Theo như tôi biết "> =" không thể xử lý các số nguyên lớn, bạn nên sử dụng bccomp
Crypto

Bạn đã đúng, nó không cho kết quả chính xác khi so sánh chuỗi. Tôi sẽ sửa nó trong một phút.
chocochaos

Chỉnh sửa với một giải pháp hơi khác nhưng hiệu quả :)
chocochaos



3

Vợt 36 byte

(for((i(expt 10 100)))(display "1"))

Đầu ra:

1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...

3

JAISBaL , 4 byte

˖Q

Chrome không thể đọc tất cả các biểu tượng và tôi không chắc chắn về các trình duyệt khác, vì vậy đây là một hình ảnh:

Giải trình:

# \# enable verbose parsing #\
10^100       \# [0] push 10^100 onto the stack #\
for          \# [1] start for loop #\
    space    \# [2] print a space #\

Khá đơn giản .... chỉ cần in một không gian googol. Ba hướng dẫn, nhưng hằng số googol là hai byte.

(Viết trong phiên bản 3.0.5)


Đây là 6 byte UTF-8. Bạn đang sử dụng mã hóa nào?
Conor O'Brien

"byte" không liên kết với nó ...
Socratic Phoenix

Gah xin lỗi Tôi có một usercript làm cho các liên kết trông giống như văn bản thông thường.
Conor O'Brien

Ồ, tôi không biết điều đó là có thể, được thôi :)
Socratic Phoenix

@ ConorO'Brien umm, tại sao?
Cyoce

3

JavaScript ES6, 85 83 byte

Đã lưu 2 byte nhờ vào ETHproductions!

eval([...Array(i=100)].map(_=>`for($${--i}=0;$${i}++<10;)`).join``+"console.log()")

Điều này in 1e100 dòng mới.

Phần bên trong tạo ra chương trình này, sau đó được đánh giá.

for($0=0;$0++<10;)for($1=0;$1++<10;)for($2=0;$2++<10;)for($3=0;$3++<10;)for($4=0;$4++<10;)for($5=0;$5++<10;)for($6=0;$6++<10;)for($7=0;$7++<10;)for($8=0;$8++<10;)for($9=0;$9++<10;)for($10=0;$10++<10;)for($11=0;$11++<10;)for($12=0;$12++<10;)for($13=0;$13++<10;)for($14=0;$14++<10;)for($15=0;$15++<10;)for($16=0;$16++<10;)for($17=0;$17++<10;)for($18=0;$18++<10;)for($19=0;$19++<10;)for($20=0;$20++<10;)for($21=0;$21++<10;)for($22=0;$22++<10;)for($23=0;$23++<10;)for($24=0;$24++<10;)for($25=0;$25++<10;)for($26=0;$26++<10;)for($27=0;$27++<10;)for($28=0;$28++<10;)for($29=0;$29++<10;)for($30=0;$30++<10;)for($31=0;$31++<10;)for($32=0;$32++<10;)for($33=0;$33++<10;)for($34=0;$34++<10;)for($35=0;$35++<10;)for($36=0;$36++<10;)for($37=0;$37++<10;)for($38=0;$38++<10;)for($39=0;$39++<10;)for($40=0;$40++<10;)for($41=0;$41++<10;)for($42=0;$42++<10;)for($43=0;$43++<10;)for($44=0;$44++<10;)for($45=0;$45++<10;)for($46=0;$46++<10;)for($47=0;$47++<10;)for($48=0;$48++<10;)for($49=0;$49++<10;)for($50=0;$50++<10;)for($51=0;$51++<10;)for($52=0;$52++<10;)for($53=0;$53++<10;)for($54=0;$54++<10;)for($55=0;$55++<10;)for($56=0;$56++<10;)for($57=0;$57++<10;)for($58=0;$58++<10;)for($59=0;$59++<10;)for($60=0;$60++<10;)for($61=0;$61++<10;)for($62=0;$62++<10;)for($63=0;$63++<10;)for($64=0;$64++<10;)for($65=0;$65++<10;)for($66=0;$66++<10;)for($67=0;$67++<10;)for($68=0;$68++<10;)for($69=0;$69++<10;)for($70=0;$70++<10;)for($71=0;$71++<10;)for($72=0;$72++<10;)for($73=0;$73++<10;)for($74=0;$74++<10;)for($75=0;$75++<10;)for($76=0;$76++<10;)for($77=0;$77++<10;)for($78=0;$78++<10;)for($79=0;$79++<10;)for($80=0;$80++<10;)for($81=0;$81++<10;)for($82=0;$82++<10;)for($83=0;$83++<10;)for($84=0;$84++<10;)for($85=0;$85++<10;)for($86=0;$86++<10;)for($87=0;$87++<10;)for($88=0;$88++<10;)for($89=0;$89++<10;)for($90=0;$90++<10;)for($91=0;$91++<10;)for($92=0;$92++<10;)for($93=0;$93++<10;)for($94=0;$94++<10;)for($95=0;$95++<10;)for($96=0;$96++<10;)for($97=0;$97++<10;)for($98=0;$98++<10;)for($99=0;$99++<10;)console.log()

Bây giờ, để chứng minh tính chính xác, chúng tôi sẽ sử dụng một số cảm ứng. Hãy thay thế ban đầu 100 cho các giá trị khác, quát N . Tôi khẳng định rằng việc chèn N sẽ mang lại 10 N dòng mới. Chúng ta hãy đưa ra kết quả của việc này wc -l, trong đó đếm số lượng dòng mới trong đầu vào. Chúng tôi sẽ sử dụng tập lệnh tương đương nhưng được sửa đổi này có đầu vào N :

eval([...Array(+process.argv[2])].map(_=>`for($${i}=0;$${i++}++<10;)`,i=0).join``+"console.log()")

Bây giờ, đây là một số đầu ra:

C:\Users\Conor O'Brien\Documents\Programming
λ node googol.es6 1 | wc -l
10

C:\Users\Conor O'Brien\Documents\Programming
λ node googol.es6 2 | wc -l
100

C:\Users\Conor O'Brien\Documents\Programming
λ node googol.es6 3 | wc -l
1000

C:\Users\Conor O'Brien\Documents\Programming
λ node googol.es6 4 | wc -l
10000

Chúng ta có thể thấy rằng điều này biến đổi N đầu vào cho các giá trị nhỏ thành 10 N dòng mới.

Đây là một ví dụ đầu ra cho N = 1:

C:\Users\Conor O'Brien\Documents\Programming
λ node googol.es6 1











C:\Users\Conor O'Brien\Documents\Programming
λ

Đẹp. Lưu một vài byte vớieval([...Array(i=100)].map(_=>`for($${--i}=0;$${i}++<10;)`).join``+"console.log()")
ETHproductions

@ETHản xuất cảm ơn! : D
Conor O'Brien

PS tôi đếm 83 byte;)
ETHproductions

Một ví dụ khác ở đây . Không chắc nó có hữu ích với bất kỳ ai khác không, nhưng tôi không chắc nó hoạt động như thế nào và đã viết một hàm bao bọc cho chức năng eval'd để chơi. Bạn có thể thấy rõ chương trình đếm đến 10 ^ n, trong đó n là số vòng lặp được đánh giá. Tôi đặt một điều kiện trở lại để nó phá vỡ tốt trước khi googol; thay đổi biến được sử dụng trong điều kiện đó để đếm qua các mức vòng lặp khác nhau. Ngoài ra, một nitpick: mẫu mã thứ hai của bạn cho thấy vòng lặp bên ngoài là $ 0, giảm xuống còn $ 99; nó nên được đảo ngược, với $ 99 là vòng lặp bên ngoài.
MichaelS

@MichaelS đúng. Tôi sẽ thay đổi nó cơ hội tiếp theo tôi nhận được.
Conor O'Brien

3

Toán học, 48 30 25 byte

For[n=1,n++<Echo@1*^100,]

Đầu ra:

>> 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>> 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>> 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>> 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>> 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
etc.

Không thể kiểm tra ngay bây giờ, nhưng làm thế nào For[n=0,n++<10^100,Echo[]]?
Martin Ender

Tôi sẽ xem xét phần đầu >>của đầu ra. Chúng được in nếu bạn sử dụng Echotrên bàn điều khiển.
Martin Ender

@MartinEnder Rất tiếc, đã sửa
LegionMammal978

Làm thế nào về Echo@0&~Array~10^100;21 byte?
Greg Martin

3

Fortran 95, dạng tự do, đệ quy, 117 byte

Program M
Call R(99)
END
Recursive Subroutine R(L)
IF(L)3,1,1
1 DO 2 I=1,10
2 Call R(L-1)
RETURN
3 PRINT*,0
END

In một dòng googol chứa

          0

Fortran 90, đệ quy, 149 byte

     CallR(99)
     END
     RecursiveSubroutineR(L)
     IF(L)3,1,1
   1 DO2I=1,10
   2 CallR(L-1)
     RETURN
   3 PRINT*,0
     END     

Gọi đệ quy 100 vòng lặp lồng nhau, mỗi vòng lặp 10 lần, tạo ra chính xác một googol. Tất cả N, L và bộ đếm vòng lặp đều khớp với số nguyên có kích thước byte.

Đã kiểm tra bằng cách thay thế 99 bằng 1, 2, 3, 4, 5 và lưu ý rằng trong mỗi trường hợp, số dòng kết quả từ "wc" có n + 1 số không.

Fortran II, IV, 66 hoặc 77, 231 byte:

      N=2*10**9
      DO1I0=1,5**10
      DO1I=1,N
      DO1J=1,N
      DO1K=1,N
      DO1L=1,N
      DO1M=1,N
      DO1I1=1,N
      DO1J1=1,N
      DO1K1=1,N
      DO1L1=1,N
      DO1M1=1,N
1     PRINT2
2     FORMAT(X)
      END

In một googol của dòng mới.

Tất cả các chương trình này sẽ chạy trên máy 32 bit; thực tế, các phiên bản đệ quy sẽ chỉ hoạt động tốt trên máy 16 bit. Người ta có thể sử dụng ít vòng lặp hơn trong phiên bản brute-force bằng cách chạy trên Cray cũ với số nguyên 60 bit. Ở đây, mười vòng lặp lồng nhau 2 * 10 ^ 9 trong một vòng 5 ^ 10 (9765625) bằng 10 ^ 100 tổng số lần lặp.

Không có phiên bản nào sử dụng bất kỳ bộ nhớ nào để nói về ngoại trừ chính mã đối tượng, bộ đếm, một bản sao của chuỗi đầu ra và, trong phiên bản đệ quy, ngăn xếp trả về 100 cấp.

Kiểm tra các yếu tố bằng cách so sánh

bc<<<2000000000\^10*5\^10
bc<<<10\^100

3

Trình mô phỏng máy Turing, 1082 byte

0 * 6 r 1
1 * E r 2
2 * C r 3
3 * 1 r 4
4 * B r 5
5 * C r 6
6 * F r 7
7 * 4 r 8
8 * 6 r 9
9 * 8 r A
A * 8 r B
B * 3 r C
C * 0 r D
D * 9 r E
E * G r F
F * H r G
G * 8 r H
H * 0 r I
I * 6 r J
J * H r K
K * 9 r L
L * 3 r M
M * 2 r N
N * A r O
O * D r P
P * C r Q
Q * C r R
R * 4 r S
S * 4 r T
T * E r U
U * E r V
V * G r W
W * 6 r X
X * D r Y
Y * E r Z
Z * 0 r a
a * F r b
b * E r c
c * 9 r d
d * F r e
e * A r f
f * H r g
g * D r h
h * E r i
i * 6 r j
j * 6 r k
k * D r l
l * G r m
m * H r n
n * 1 r o
o * 0 r p
p * 8 r q
q * C r r
r * 9 r s
s * G r t
t * 3 r u
u * 6 r v
v * 2 r w
w * 3 r x
x * E r y
y * 0 r z
z * 4 r +
+ * 5 r /
/ * A r =
= * 0 r -
- * H r \
\ * 7 r !
! * A r @
@ * 9 r #
# * 5 r $
$ * A r %
% * B r ^
^ * 5 r &
& * 9 r ?
? * 4 r (
( * C r )
) * E r `
` * 9 r ~
~ * 9 r _
_ * A * .
. 0 I l *
. 1 0 r <
. 2 1 r <
. 3 2 r <
. 4 3 r <
. 5 4 r <
. 6 5 r <
. 7 6 r <
. 8 7 r <
. 9 8 r <
. A 9 r <
. B A r <
. C B r <
. D C r <
. E D r <
. F E r <
. G F r <
. H G r <
. I H r <
. _ * r ]
< _ * r >
< * * r *
> _ = l [
> * * r *
[ _ * l .
[ * * l *
] _ * * halt
] * _ r *

Mô phỏng máy Turing

Tôi không biết nếu điều này được tính là đầu ra chính xác, vì nó có 82 không gian hàng đầu.

Tôi không biết điều này có tôn trọng giới hạn 4 GB hay không, vì vậy, nếu không, thì nó không cạnh tranh và chỉ để trưng bày. Đầu ra là 1e100 byte, do đó nên được khấu trừ khỏi số byte bộ nhớ. Số byte cuối cùng là 82 byte.

Đây là một lời giải thích:

80 dòng mã đầu tiên là 80 trạng thái khác nhau tạo ra số vòng lặp cơ sở-19 16EC1BCF4688309GH806H932ADCC44EEG6DE0FE9FAHDE66DGH108C9G3623E045A0H7A95AB594CE99A .

19 dòng mã tiếp theo là trạng thái bộ đếm, làm giảm số đếm mỗi khi ký tự được in.

6 dòng tiếp theo là trạng thái máy in, nối thêm một =.

Cuối cùng, 2 dòng cuối cùng là trạng thái sạch hơn, cần thiết để đảm bảo đầu ra duy nhất là =====...=====. Không gian hàng đầu / dấu không được tính là đầu ra, vì chúng là tác dụng phụ không thể tránh khỏi.

Chương trình sau đó tạm dừng.

1 Tôi đã làm toán cho điều đó.


2

Bình, 7 byte

Mới (Cạnh tranh)

V^T*TTG

Giải trình

G=The alphabet
Repeat 10^(10*10) times
    print(G)

7 byte (không cạnh tranh)

*G^T*TT

Giải trình

G=The alphabet
G*(10^(10*10))==G*10^100

1
Điều này không tuân thủ giới hạn khắc phục 4 GiB.
Dennis

@Dennis Tôi đã sửa nó
Dignissimus - Spammy

Không phải là một lời khuyên chơi gôn, nhưng tôi không nghĩ *TTlà ngắn hơn một đồng bằng 100.
Erik the Outgolfer

2

Python 3, 32 byte

for i in range(10**100):print()

Giải pháp thay thế, 33 byte:

[print()for i in range(10**100)]

Trong Python 2 đây là một câu trả lời đặc biệt tuyệt vời.

1
Không nhiều lắm, @Lembik. Trong Python 2, range(10**100)tạo một danh sách các số [1, 2, 3, 4, ...], kết quả là OverflowError: range() result has too many items. Điều này sẽ hoạt động trong Python 2 với một lệnh gọi xrange()thay thế và hoạt động trong Python 3 kể từ khi xrange()được đổi tên thành range()và bản gốc range()tạo ra một danh sách không được dùng nữa.
James Murphy

2
@JamesMurphyb Vâng, tôi biết điều đó. Tôi đã cố gắng để hài hước về tính không chính xác của câu trả lời codegolf.

1
Lấy làm tiếc. Tôi gặp khó khăn khi đọc sự hài hước trong rất nhiều bình luận SE.
James Murphy

2

Java, 198 179 155 byte

import java.math.*;class a{void A(a[]x){for(BigInteger b=BigInteger.ZERO;!(b=b.add(BigInteger.ONE)).equals(BigInteger.TEN.pow(100));)System.out.print(x);}}

In ( x== null? null: Một chuỗi bắt đầu bằng [La;@hoặc một cái gì đó tương tự) 10 100 lần trong thời gian O (mãi mãi).


3
Bạn có một class, nhưng không có public static void main(String[]a)phương pháp. Đối với các mẹo chơi gôn: bạn có thể thay thế new BigInteger("0"), new BigInteger("1")new BigInteger("10")bằng BigInteger.ZERO, BigInteger.ONEBigInteger.TEN; bạn có thể thay thế import java.math.BigInteger;bằng import java.math.*;.
Kevin Cruijssen

1
Không cần nhập khẩu: một cái gì đó tương tự như thế này sẽ hoạt động:java.math.BigInteger b=null;for(b=b.ZERO;!(b=b.add(b.ONE)).equals(b.TEN.pow(100);)System.out.print(x);
Olivier Grégoire

@ OlivierGrégoire Điều đó mang lại cho tôi một NullReferenceException, có thể vì bnó là null.
Xanderhall

@Xanderhall có lẽ bạn đã thử điều này trong C # (vì bạn đã nói NRE chứ không phải NPE). Tôi không thể kiểm tra phiên bản Java ngay bây giờ vì vậy tôi không thể nói sai. Trong mọi trường hợp, tôi đã nói "nên làm việc", không phải "sẽ làm việc". Ý tưởng cần thực hiện là bạn có thể có các cuộc gọi phương thức tĩnh trên các tham chiếu thể hiện, thậm chí là các cuộc gọi null.
Olivier Grégoire

@ OlivierGrégoire Tôi đã thử nó trong Java. Tôi không mã trong C #.
Xanderhall

2

Java, 153 byte

import java.math.*;interface M{static void main(String[]a){for(BigInteger i=BigInteger.ZERO;!i.add(i.ONE).equals(i.TEN.pow(100));)System.out.print(1);}}

Đầu ra: 1e100 1 giây

Tôi biết có một câu trả lời Java khác cũng khá gần. Của tôi có một chính và vẫn còn ngắn hơn mặc dù.

Đây là lần đầu tiên chơi gôn của tôi. Lời khuyên đánh giá cao.


Điều này có thể được đánh gôn tới 117 byte bằng cách sử dụng lambda. Bạn vẫn cần bao gồm nhập khẩu, tuy nhiên. import java.math.*;()->{for(BigInteger i=BigInteger.ZERO;!i.add(i.ONE).equals(i.TEN.pow(100));)System.out.print(1);};
Shaun Wild

@Bas VềAlanTuring Thật ra tôi javacsẽ không để tôi biên dịch cái này.
Niclas M

Cập nhật Java của bạn sau đó. Ngoài ra, đây không phải là mã biên dịch hoàn chỉnh. Chỉ cần tối thiểu trần cho phép cho một mục.
Shaun Wild

@Bas VềAlanTuring Có Java 8. Tôi đoán các chức năng không được OP cho phép.
Niclas M

Mã tôi đã cung cấp cho bạn không phải là một chương trình hoàn chỉnh .. Đó chỉ là những gì bắt buộc phải là một câu trả lời CG hợp lệ.
Shaun Wild

2

Bình thường, 8 7 byte

V^T100G

Liên kết

Giải pháp được thử nghiệm với đầu ra nhỏ, nhưng nó sẽ in abcdefghijklmnopqrstuvwxyz1e100 lần.

Vì một số lý do, điều pnày là không cần thiết, như 31343 (Maltysen) nói .


Tại sao p cần thiết?
Maltysen

@Maltysen Tôi nghĩ vì giới hạn 4 GB.
Erik the Outgolfer

Tại sao? Cuz của bộ đệm? Điều đó không tự động tuôn ra?
Maltysen

@Maltysen Tôi không biết, trình thông dịch trực tuyến không có chức năng đầu ra ngay lập tức. Nó có thể tuôn ra, nó có thể không ...
Erik the Outgolfer

Nó hoạt động tại địa phương mà không cóp
Maltysen
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.