Chương trình tạo các phiên bản lớn hơn của chính nó (biến thể quine)


109

Bạn phải viết một chương trình sẽ xuất mã nguồn

  1. Lớn hơn chương trình gốc (nhân vật khôn ngoan)
  2. Sẽ in một chương trình khác lớn hơn chính nó khi chạy (tức là chương trình mới cũng là một câu trả lời hợp lệ cho thử thách này)

Đây là môn đánh gôn, vì vậy câu trả lời ngắn nhất sẽ thắng.


4
@Kevin, Định nghĩa là đệ quy. Đầu ra phải là một chương trình có đầu ra lớn hơn chính nó và là câu trả lời cho câu hỏi này. Vì vậy, đầu ra của đầu ra phải lớn hơn đầu ra và đầu ra của đầu ra phải lớn hơn nữa, v.v.
ugoren

8
Tôi nghĩ bạn nên làm rõ các quy tắc của bạn. Một mặt, bất kỳ đầu ra mã bổ sung nào của một chương trình như vậy là "rõ ràng là vô dụng"; mặt khác, tất cả các mã bổ sung trong đầu ra là "hữu ích" ở chỗ nó phù hợp với mục tiêu trả lời thách thức này.
Jason C

5
Xin lỗi vì đã phá hủy thử thách của bạn. :^)
Justin

2
Tôi nghĩ rằng thử thách này sẽ tốt hơn nhiều so với một cuộc thi phổ biến hơn là một môn đánh gôn. Nó sẽ cho phép sáng tạo hơn rất nhiều!
corsiKa

30
Đương nhiên, một chương trình như vậy nên được gọi là quinine.
Jonathan Van Matre

Câu trả lời:


89

GS2 (8636bd8e) , 0 byte



Điều này in một dòng mới, in hai dòng mới, in ba dòng mới, et cetera.

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


3
Đây có phải là không cạnh tranh về mặt kỹ thuật vì gs2 mới hơn thách thức không?
DJMcMayhem

24
Cam kết này trước thách thức một tháng rưỡi. Tôi chỉ thử nghiệm nó, và nó hoạt động như dự định.
Dennis

1
Làm thế nào đây không phải là một lỗ hổng ???
Mama Fun Roll

14
@MamaFunRoll Tại sao lại như vậy? Điều này không khác với chương trình Retina trống in 1 , chương trình Jelly trống in 0 hoặc chương trình Stuck trống in Hello, World! .
Dennis

2
@Cyoce Điều xảy ra là một dòng mới tạo ra một dòng mới trong GS2.
Trái cây Esolanging

299

H9 + : 1 ký tự

9

Đúng rồi. Một nhân vật. Xuất lời bài hát đến 99 chai bia , đây là một chương trình hợp lệ. Tất cả các dữ liệu không liên quan không được tính, nhưng có rất nhiều 9s trong đó.

Đầu ra của chương trình xuất ra là lời bài hát tới 99 chai bia 59 lần.

Hàm này cho biết số lần lời bài hát được xuất ra nếu bạn chạy nthời gian của chương trình (nếu tính toán của tôi là đúng):

f(n) = 59n-1

32
Một chương trình 0 char trong một ngôn ngữ nhất định, cho rằng nó hợp lệ, sẽ có khả năng xuất 0 ký tự. Và vì 0 * x = 0 cho bất kỳ giá trị hữu hạn x nào, tôi có thể khẳng định rằng chương trình xuất ra của tôi thực sự lớn hơn 9999999999999999 lần so với mã nguồn.
nitro2k01

39
@JohannesH. Đối với tất cả các vấn đề (có thể giải quyết) tồn tại một ngôn ngữ lập trình giải quyết vấn đề trong 0 ký tự.
Cruncher

15
Tôi vẫn di chuyển rằng chúng tôi đặt tên là "Định lý Cruncher", trừ khi nó đã được phát hiện.
Erty Seidohl

22
Một tính năng thú vị là nó cũng sẽ chứa các 2*59^n-2trường hợp "Xin chào, thế giới!", Do chữ "h" trong "the".
AJMansfield

8
Hình như bạn đã bị đánh bại.
PyRulez

118

GolfScript, 9 ký tự

{.'.~'}.~

Mã này xuất ra:

{.'.~'}{.'.~'}.~

đầu ra nào:

{.'.~'}{.'.~'}{.'.~'}.~

đầu ra nào:

{.'.~'}{.'.~'}{.'.~'}{.'.~'}.~

vân vân

Tôi tin rằng đây là câu trả lời ngắn nhất trong một ngôn ngữ lập trình Turing "hoàn chỉnh" cho đến nay.

Giải trình:

Về cơ bản, mã gốc ở trên là "lớp quine": nó tạo ra một quine bình thường theo sau nó.

Trong GolfScript, bất kỳ khối mã nào theo nghĩa đen (ví dụ {foo}), nếu không bị xáo trộn trên ngăn xếp, là một quine. Do đó, tự nó, {.'.~'}chỉ đơn giản là tự xuất ra, giống như bất kỳ khối mã nào khác.

Phần .~cuối của mã lấy khối mã cuối cùng trên ngăn xếp, sao chép nó và thực thi bản sao. Khi được thực thi, mã .'.~'bên trong khối mã sẽ nhân đôi mục trên cùng trên ngăn xếp (tức là bản sao của chính nó) và nối thêm chuỗi .~.

Vào cuối chương trình, trình thông dịch GolfScript sắp xếp chuỗi và xuất mọi thứ trên ngăn xếp, trong trường hợp này, bao gồm một {.'.~'}khối nhiều hơn trong đầu vào, cộng với chuỗi .~.

Thêm:

Thêm một ]trước một .(để thu thập tất cả các khối mã trên ngăn xếp vào một mảng trước khi chúng được sao chép) làm cho nó tăng theo cấp số nhân:

{].'.~'}.~

đầu ra:

{].'.~'}{].'.~'}.~

đầu ra nào:

{].'.~'}{].'.~'}{].'.~'}{].'.~'}.~

đầu ra nào:

{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}.~

vân vân


196
{].'.~'}.~︵ ┻━┻
nitro2k01


2
@ nitro2k01 suy nghĩ đầu tiên của tôi chính xác: D
Songo

1
Là "thực" trong dấu ngoặc kép vì HQ9 + không có thật hoặc vì GolfScript không có thật hoặc cả hai?
Roger Pate

1
@thepiercingarrow mã nguồn giống như thế này
Rod

108

Java 7: 0 ký tự



Lưu dưới dạng tập tin Blank.java. Nếu bạn lưu nó dưới dạng bất kỳ tệp nào khác, hãy thay thế bất kỳ trường hợp nào Blankbằng tên tệp thích hợp.

Sau đó, chạy trong dòng lệnh thông qua biên dịch đầu tiên, sau đó chạy. Nếu biên dịch thất bại, dừng lại.

Tôi liệt kê đây là Java 7 vì nó có thể xuất ra các phiên bản Java khác nhau.

Một vài kết quả đầu ra (xuất ra stderr):

Error: Could not find or load main class Blank
Blank.java:1: error: class, interface, or enum expected
Error: Could not find or load main class Blank
^
Blank.java:1: error: reached end of file while parsing
Error: Could not find or load main class Blank
                                              ^
2 errors
Blank.java:1: error: class, interface, or enum expected
Blank.java:1: error: class, interface, or enum expected
^
Blank.java:1: error:  expected
Blank.java:1: error: class, interface, or enum expected
                          ^
Blank.java:1: error:  expected
Blank.java:1: error: class, interface, or enum expected
                                     ^
Blank.java:1: error: as of release 5, 'enum' is a keyword, and may not be used as an identifier
Blank.java:1: error: class, interface, or enum expected
                                          ^
  (use -source 1.4 or lower to use 'enum' as an identifier)
Blank.java:1: error: = expected
Blank.java:1: error: class, interface, or enum expected
                                               ^
Blank.java:2: error:  expected
Error: Could not find or load main class Blank
     ^
Blank.java:2: error: ';' expected
Error: Could not find or load main class Blank
      ^
Blank.java:2: error: = expected
Error: Could not find or load main class Blank
                      ^
Blank.java:2: error: = expected
Error: Could not find or load main class Blank
                                   ^
Blank.java:2: error:  expected
Error: Could not find or load main class Blank
                                              ^
Blank.java:3: error: = expected
^
^
Blank.java:3: error: ';' expected
^
 ^
Blank.java:4: error: illegal start of type
Blank.java:1: error: reached end of file while parsing
     ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
          ^
Blank.java:4: error: illegal start of type
Blank.java:1: error: reached end of file while parsing
           ^
Blank.java:4: error:  expected
Blank.java:1: error: reached end of file while parsing
            ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
          ^
Blank.java:4: error: illegal start of type
Blank.java:1: error: reached end of file while parsing
           ^
Blank.java:4: error:  expected
Blank.java:1: error: reached end of file while parsing
            ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
              ^
Blank.java:4: error: ';' expected
Blank.java:1: error: reached end of file while parsing
                   ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
                                 ^
Blank.java:4: error:  expected
Blank.java:1: error: reached end of file while parsing
                                        ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
                                         ^
Blank.java:4: error: ';' expected
Blank.java:1: error: reached end of file while parsing
                                              ^
Blank.java:5: error:  expected
Error: Could not find or load main class Blank
     ^
Blank.java:5: error: ';' expected
Error: Could not find or load main class Blank
      ^
Blank.java:5: error: = expected
Error: Could not find or load main class Blank
                      ^
Blank.java:5: error: = expected
Error: Could not find or load main class Blank
                                   ^
Blank.java:5: error:  expected
Error: Could not find or load main class Blank
                                              ^
Blank.java:6: error: = expected
                                              ^
                                              ^
Blank.java:6: error: ';' expected
                                              ^
                                               ^
Blank.java:7: error: reached end of file while parsing
2 errors
        ^
30 errors

23
"Bạn phải viết một chương trình sẽ xuất mã nguồn đó là" Đầu ra được cho là không phải mã nguồn. Và hơn nữa, tùy thuộc vào định nghĩa của đầu ra (cho dù đầu ra phải đến cụ thể từ đâu stdout) không có gì thực sự là đầu ra.
nitro2k01

43
@ nitro2k01 Tôi xin trích dẫn tương tự: "Bạn phải viết một chương trình sẽ xuất mã nguồn ". Bất cứ điều gì là mã nguồn. Nhưng chỉ có một số thứ là mã nguồn hợp lệ . Ngoài ra, nó không được chỉ định những gì được coi là đầu ra, vì vậy tôi được phép tự do ở đó.
Justin

15
@PyRulez Đúng vậy. Tôi khai thác các quy tắc của bạn. Bạn không cần phải chấp nhận câu trả lời này. Khi tôi đăng bài này, tôi biết rằng một cuộc tranh cãi sẽ diễn ra, hoàn thành với nhiều phiếu bầu lên xuống. Tôi quyết định rằng nó sẽ có giá trị, mặc dù.
Justin

29
Bạn có chắc chắn rằng chương trình tự in đầu ra? Không phải đó chỉ là trình biên dịch sao? Chương trình không bao giờ được biên dịch và bản thân nó không được diễn giải hay thực thi, do đó nó không thể tạo ra bất kỳ đầu ra nào.
VX

12
@ blabla999 Tôi không đồng ý - mọi người không thử những thử thách này vì người khác làm điều gì đó điên rồ. Chúng tôi chỉ thử thách bản thân để làm điều đó theo một cách khác. Như Mark Rosewater nói, "Hạn chế sự sáng tạo giống"
corsiKa

79

HQ9 +, HQ9 ++ và similars, 2 ký tự

QQ

Đây là đầu ra:

QQQQ

36
Tôi nhìn thấy điều này và nghĩ "Ồ không, không gì có thể đánh bại điều này." Tôi bắt đầu cố gắng nghĩ ra thứ gì đó, rồi nó đánh tôi. Vì vậy, tôi đã đăng một câu trả lời.
Justin

1
@Quincunx Bravo, nêu lên câu trả lời của bạn.
Victor Stafusa

4
@Quincunx Không, tôi nghĩ đó là 2^2^nnơi chương trình ban đầu là thế hệ 0. Độ dài được lặp lại m -> m^2.
Vortico

3
@Vortico Điểm tốt. Mặc dù tôi đã nói sai, tôi có nghĩa là: Ở độ dài mã n, đầu ra trở thành n^n. Tuy nhiên, đó là sai; khi độ dài mã là n, độ dài của đầu ra làn^2
Justin

2
Mặc dù đó là buồn cười bởi vì ngay cả hai lần lặp đầu tiên là ứng cử viên có thể cho câu hỏi này.
PyRulez

29

Hồng 27

Một phiên bản sửa đổi rất ít của điều này ( thông qua ):

puts <<3*3,3
puts <<3*3,3
3

Số lần putsin -line được in tăng theo cấp số nhân.

$ ruby quine.rb | ruby | ruby
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
3

$ ruby quine.rb | ruby | ruby | ruby | ruby | ruby | ruby | ruby | wc -l
    3283

17
Câu trả lời lấy cảm hứng từ các tù trưởng Kaiser
Ben Jackson

25

Giải tích Lambda - 29

Một thuật ngữ lambda đơn giản

(λu.(u u)(u u))(λu.(u u)(u u))

Giảm thuật ngữ này bằng một sản lượng giảm beta

((λu.(u u)(u u))(λu.(u u)(u u)))((λu.(u u)(u u))(λu.(u u)(u u)))

Và vân vân. Đây là một biến thể đơn giản trên cổ điển (λu.u u)(λu.u u), đó là một nguyên tắc trong phép tính lambda, ứng dụng tự gấp đôi ở đây có nghĩa là chúng ta nhận được gấp đôi sản lượng.


7
Tôi cho rằng trong phép tính lambda, "chạy" một thuật ngữ lambda có nghĩa là tính toán dạng bình thường của nó, không thực hiện một lần giảm beta nào. Ngoài ra, một thuật ngữ có thể chứa nhiều redexes, do đó "giảm một redex duy nhất" là một hoạt động mơ hồ.
Petr Pudlák

2
Bạn nói đúng, nhưng vì thuật ngữ này không có hình thức bình thường, nên nói về vấn đề này theo cách giảm bước nhỏ là điều hợp lý. Vì tính toán lambda thiếu bất kỳ đánh giá tập hợp vốn có nào, tôi chỉ có thể định nghĩa "chạy" nó để giảm một redex cấp cao nhất duy nhất với ngữ nghĩa gọi bằng tên không?
jozefg

3
Vâng, các điều khoản không có hình thức bình thường tương ứng với các chương trình không kết thúc. Và vấn đề với redex cấp cao nhất là một thuật ngữ có thể có hai redex, không phải là một thuật ngữ phụ của một thuật ngữ khác. Bạn có thể chọn một số tiêu chí cần giảm, nhưng tôi nói rằng sau đó bạn đang đi rất xa so với ngữ nghĩa tính toán lambda tiêu chuẩn. (Dù sao tôi cũng đánh giá cao ý tưởng tiểu thuyết của bạn.)
Petr Pudlák

2
(x.xxx) (x.xxx): 20
Fabio F.

2
(λx. Xx) (λx. Xxx) giảm xuống chỉ trong một bước
Ben Millwood

23

Kịch bản SH, 9

cat $0 $0

Sinh trưởng với tốc độ theo cấp số nhân.

Hoặc là chạy sh whatever.shhoặc đặt nó là thực thi.

Phiên bản Windows có ở đây .


2
Tại thời điểm tôi viết bình luận này, trang Quine Wiki nói rằng việc đọc từ hệ thống tập tin là gian lận.
Lord Ratte

3
@LordRatte Mặt khác, thách thức không phải là viết một câu đố.
Jason C

20

đc 11

Khá đơn giản:

6579792
dfP

Dòng đầu tiên được lặp lại một lần mỗi thế hệ:

$ dc growing_quine.dc
6579792
6579792
dfP

$ dc growing_quine.dc | dc | dc 
6579792
6579792
6579792
6579792
dfP

Dòng cuối cùng bao gồm các hướng dẫn sau: dsao chép giá trị cuối cùng được đặt vào ngăn xếp (6579792) (để chúng tôi có thêm một bản sao mỗi lần chúng tôi chạy nó), fin toàn bộ ngăn xếp (là một bó cùng số đó) và Pin số (6579792) ra dưới dạng luồng byte, hiển thị dưới dạng dfP.


16

redcode (giải pháp đệ quy)

Đây là mã của chiến binh dễ ghi nhất trong mã đỏ , Imp nổi tiếng:

MOV 0, 1

Khi được thực thi, mã viết một bản sao của lệnh đơn của nó tại địa chỉ tiếp theo trong bộ nhớ; sau đó thực thi nó, v.v.


15

Con trăn 3 - 55

print(open(__file__).read())
f=lambda:print('f()')
f()

Điều này có thể được thực hiện ngắn hơn bằng cách thay thế __ file__ bằng một tên tệp ký tự duy nhất và lưu tệp như vậy, nhưng tôi cảm thấy câu trả lời này phù hợp hơn với tinh thần của câu hỏi. Sau một lần lặp, nó xuất ra:

print(open(__file__).read())
f=lambda:print('f()')
f()
f()

3
Đây không phải là một câu đố. Xem định nghĩa .
Petr Pudlák

14
@ PetrPudlák Cũng không có chương trình nào trong câu hỏi này. Đây là một vấn đề biến thể quine, không nghiêm ngặt.
AJMansfield

6

Smalltalk, 125 61 57

Phiên bản golf trông gần như không thể đọc được vì vậy tôi sẽ giải thích trước (và sử dụng số nhận dạng thực).

Đây là một biến thể của phương pháp tự sửa đổi "kỳ lạ nhất theo cách sản xuất-một-chồng-tràn".

Phương thức in ra một thông điệp xin chào và nguồn hiện tại của nó (chỉ dành cho trình diễn). Sau đó, mã được sửa đổi để xuất ra một chuỗi dài hơn và được cài đặt. Cuối cùng, mã mới được gọi là đệ quy.

Để bảo vệ bản thân khỏi sự trốn chạy ngay lập tức, nó cho phép người dùng xác nhận trong mỗi chu kỳ.

biên dịch trong Object:

eatMe_alice
   |msg mySource|

   mySource := thisContext method source.

   '**** Hello Alice' printCR.
   '  ---- my current code is:' printCR.
   mySource printCR.
   '  ---------------' printCR.

   (UserConfirmation confirm:'Again? ') ifTrue:[
       Object compile:
            (mySource
                copyReplaceString:'Hello ','Alice'
                withString:'Hello ','Alice !').
       self eatMe_alice
   ]

bắt đầu chương trình bằng cách gửi "eatMe_alice" tới bất kỳ Đối tượng nào; nil sẽ làm:

nil eatMe_alice

Một biến thể tốt đẹp là không gọi mã mới theo cách đệ quy, mà thay vào đó, lặp đi lặp lại, bằng cách thư giãn ngăn xếp cuộc gọi và nhập lại vào phương thức mới. Điều này có lợi thế là không dẫn đến ngoại lệ đệ quy. Để thực hiện việc này, thay thế cuộc gọi đệ quy ("self eatMe_alice") bằng:

thisContext resend

Chơi gôn

Rõ ràng, in ấn và tự gọi điện không được yêu cầu, vì vậy, ngắn nhất (đối với golf) chỉ đơn giản là thêm một nhận xét vào nguồn của riêng tôi và trả lại nó. Là một tác dụng phụ, nó cũng được cài đặt cho cuộc gọi tiếp theo ...

x|s|Object compile:(s:=thisContext method source,'""').^s

5

Kịch bản SH, 12 8 7

Lưu trữ một tập tin với

sed p *

trong thư mục riêng, trống và chạy từ thư mục này bằng cách sử dụng sh [file]hoặc thiết lập thực thi.


Thay thế cũ với 8 ký tự , nhưng không cần thư mục riêng. Lưu trữ một tập tin với

sed p $0

và chạy bằng cách sử dụng sh [file]hoặc thiết lập thực thi.

Thay thế cũ với 12 ký tự :

sed -i- p $0

Điều này thực sự sẽ xuất ra tệp chương trình, nhưng nơi đầu ra không được chỉ định. Tái tạo chính nó với tốc độ theo cấp số nhân.


1
Bạn vẫn có thể có cơ hội sử dụng ed, không muốn xem qua trang người đàn ông của nó ...
Jens Erat

4

JavaScript, 41 , 40 ký tự

function f(){console.log(f+"f(f())")}f()

Lần đầu tiên bạn chạy nó, nó sẽ tự xuất ra cái khác ;f()ở cuối. Các lần chạy tiếp theo của kết quả đầu ra trong mỗi nguồn "đầu vào" được in hai lần.

alertsẽ ngắn hơn console.lognhưng tôi không coi nhiều hộp thoại cảnh báo là đầu ra "trong khi có vẻ hợp lý khi gọi nhiều dòng trong bàn điều khiển là đầu ra.


Bạn có thể lưu một byte "f(f())"thay vì"f();f()"
Hedi

Điều này dường như không hiệu quả với tôi ...
Lemon

4

J , 1 byte

'

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

Rõ ràng, trích dẫn mở cho lỗi rõ ràng:

|open quote
|   '
|   ^
|[-1] /home/runner/.code.tio

Lưu ý rằng, theo bản chất của trình thông dịch J, các lỗi được in thành STDOUT , không phải STDERR.

Khi ở trên được chạy dưới dạng mã, nó sẽ in:

|open quote
|   |   '
|       ^
|[-2] /home/runner/.code.tio

Sau đó

|open quote
|   |   |   '
|           ^
|[-2] /home/runner/.code.tio

vân vân Mỗi khi mã chạy, dòng thứ hai được đệm trái với bốn byte |   , đáp ứng yêu cầu của thử thách này.

J , biến thể quine thích hợp, 25 byte

echo,~'echo,:~(,quote)'''

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

Đầu ra

echo,:~(,quote)'echo,:~(,quote)'

Và sau đó nó tự xuất ra hai lần, trên các dòng riêng biệt:

echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'

sau đó

echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'

vân vân

Đầu ra đầu tiên là một biến thể đơn giản của quine J tiêu chuẩn . Phần bổ sung được ,:~nối chính nó theo chiều dọc, trong đó mảng 2D kết quả được in thành hai hàng của cùng một chuỗi.


3

Windows .BAT, 25

@COPY %~nx0+%~nx0 CON>NUL

Sinh trưởng với tốc độ theo cấp số nhân.

Phiên bản SH tương đương tại đây .


3

mặt lưới, 11 byte, không biên dịch

"'34'coo1o;

Đây là khung quine tiêu chuẩn, ngoại trừ một phần bổ sung 1được in sau mỗi lần lặp. Hãy thử trực tuyến!

Đầu ra đầu tiên:

"'34'coo1o;
"'34'coo1o;1
"'34'coo1o;11
"'34'coo1o;111

3

Kính hiển vi II, 6 byte

Không biên dịch, ngôn ngữ hoãn thách thức.

"qp"qp

Lặp lại đầu tiên thêm một phần bổ sung qpvào cuối và mỗi lần lặp kế tiếp sẽ thêm một bản sao bổ sung của chương trình gốc này vào đầu.



2

EcmaScript 6 (51 byte):

(_=x=>'(_='+_+Array(x++).join(','+_)+')('+x+')')(2)

Nó tạo ra một phiên bản dài hơn của chính nó, có thể tạo ra một phiên bản dài hơn của chính nó, có thể tạo ra một phiên bản dài hơn của chính nó, v.v ...


2

PHP, 38

<?echo fgets(fopen(__FILE__,'r')).';';

Nó sẽ thêm một dấu chấm phẩy ở mỗi lần chạy.


Là dấu chấm phẩy vô dụng?
Justin

3
@Quincunx Họ là, bạn nói đúng. Tuy nhiên, những gì bạn sẽ xem xét mã hữu ích?
ComFalet

Có lẽ bạn có thể đưa vào ';'. Sau đó, bạn sẽ nhận được đầu ra dài hơn.
Justin

1
tại sao không <?=fgets(fopen(__FILE__,'r')).';';?
Ismael Miguel

1
;<?echo fgets(fopen(__FILE__,'r'));
jimmy23013

2

ECMAScript 6 (38 ký tự)

(f=_=>'(f='+f+')();(f='+f+')();')();

Đầu ra nào:

(f=_=>'(f='+f+')();(f='+f+')();')();(f=_=>'(f='+f+')();(f='+f+')();')();

Biên tập

Bạn có thể làm (28 ký tự):

(f=_=>'(f='+f+')();'+f())();

Tuy nhiên, nó sẽ lặp lại vô tận và không bao giờ trả lại bất cứ điều gì ... nhưng điều này có thể được giải quyết bằng cách làm một cái gì đó như thế này (42 ký tự):

(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(3);

Sẽ xuất ra:

(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(3);(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(2);(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(1);

3
+_+ =_=+1 cho biểu tượng cảm xúc
TuxCrafting

2

Lisp thông thường, 16 ký tự

(print `(or ,-))

Cấp, nó chỉ tương tác, nhưng có thể tham chiếu biểu mẫu cấp cao nhất hiện tại có lẽ là cách tốt nhất để giảm thiểu một chương trình không tầm thường đáp ứng đặc điểm kỹ thuật.

Những gì sẽ thực sự thú vị là những gì thổi lên nhanh nhất. Có lẽ một cái gì đó như

(print `(progn ,@(loop repeat (length -) collect -)))


+1 Đối với Lisp thông thường. Có vẻ như tôi có thể bỏ qua `,?
daniero

@daniero Không có trích dẫn, nó chỉ in chương trình gốc, không bao giờ phát triển. Tại thời điểm đó, bạn cũng có thể bỏ qua or:(print -)
Stuart Olsen

2

Julia, 66 ký tự

x="print(\"x=\$(repr(x))\\n\$x;\"^2)";print("x=$(repr(x))\n$x;"^2)

Đầu ra (134 ký tự):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

Kết quả thực hiện kết quả (268 ký tự):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

kết quả tiếp theo (536 ký tự):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

Kết quả tiếp theo (1072 ký tự):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

Tôi hy vọng điều này là theo các quy tắc.

Nó tạo ra đầu ra lớn hơn và chính đầu ra là mã nguồn hợp lệ tạo ra đầu ra lớn hơn một lần nữa.


Đầu ra, khi chạy, sẽ tạo ra một mục hợp lệ?
PyRulez

Trong ví dụ đầu tiên, đầu ra là mã hợp lệ. Đó là một chuỗi ký tự chứa 5 tiết. Trong ví dụ thứ hai, việc nhập dấu nhắc julia sẽ không làm gì cả. Tôi chỉ nghĩ rằng chỉ cần cung cấp thay thế thực sự một ký tự dòng mới bằng cách nhấn enter sẽ tạo ra đầu ra dài hơn đầu vào.
ML

"....." sẽ tạo ra một phiên bản lớn hơn của chính nó?
PyRulez

À, giờ thì tôi đã hiểu. Tôi chỉ nhận thấy rằng nó phải được đệ quy ... thời gian để sửa giải pháp của tôi. Cảm ơn đã gợi ý.
ML

1
Tôi đoán mã là theo các quy tắc bây giờ.
ML

2

05AB1E, 15 byte, không lọc

0"DÐ34çý"DÐ34çý

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

In 0"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý,
mà in 0"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý,
vv


Cả hai trường hợp DDcó thể được thay thế bởi Ð.
Emigna

1
Tại sao không cấu hình?
MD XF

2

Evoloop, hình chữ nhật 9 × 9 (81 ô)

Máy tự động di động Evoloop đi kèm với Golly hỗ trợ các mẫu tự sao chép theo cách "giống như quine". Cụ thể, mỗi mẫu này chứa một "chương trình"; một mô hình tự tái tạo bằng cách trước tiên thực hiện chương trình (tạo ra "cơ thể" của con gái), và sau đó bằng cách sao chép chương trình vào con gái.

Những điều trên áp dụng cho thiết bị tự động di động "Langton's Loops" nổi tiếng hơn cũng như Evoloop, nhưng Evoloop có một điểm khác biệt thú vị, đó là dễ dàng tạo ra một mô hình phát triển trong mỗi thế hệ kế tiếp.

( Theo tôi, thú vị hơn nhiều , đó là sự thật rằng Evoloop là một máy tự động di động đơn giản có chứa các mô hình tự sinh sản và phát triển theo cách rất giống cuộc sống! Tôi nghĩ rằng máy tự động di động duy nhất được biết đến là Evoloop và hậu duệ của nó Tuy nhiên, một thiếu sót của Evoloop là có một bộ gen "tốt nhất" đặc biệt, sự tiến hóa cuối cùng luôn hội tụ đến bộ gen này.)

Bây giờ, có hai thiếu sót cho trình này. Một là không rõ "đầu ra" của thiết bị tự động di động là gì. Nhưng tôi nghĩ rằng một máy tự động tự tái tạo là "đủ gần" để trở thành một quine; Nó chắc chắn không kém phần thú vị! Một thiếu sót khác là những mẫu này không chỉ tạo ra một bản sao của chính chúng; mỗi bản sao của mẫu ban đầu cố gắng tạo ra vô số bản sao của chính nó và các bản sao này cuối cùng tương tác với nhau theo cách phá hoại. Vì vậy, tôi nghĩ rằng tôi đã đáp ứng các yêu cầu của thử thách này về mặt tinh thần, nhưng không phải bằng thư.

Nếu không có thêm rắc rối, mô hình là:

022222220
270170172
212222202
202000212
272000272
212000202
202222212
271041032
022222250

Đây là mẫu một lần nữa, trong một định dạng có thể được sao chép và dán vào Golly:

x = 9, y = 9, rule = Evoloop
.7B$BG.AG.AGB$BA5B.B$B.B3.BAB$BGB3.BGB$BAB3.B.B$B.5BAB$BGA.DA.CB$.6BE
!

Được rồi, nhưng nó trông như thế nào? Nó trông như thế này:

Một mô hình trong một máy tự động di động tạo ra các bản sao ngày càng lớn của chính nó.

Trong hình ảnh động ở trên, bạn có thể thấy mô hình ban đầu tạo ra một cô con gái lớn hơn, tạo ra một cháu gái lớn hơn, sau đó là cháu gái lớn hơn, và cuối cùng là một cháu gái lớn thậm chí còn lớn hơn bắt đầu xây dựng một cháu gái lớn thứ ba thậm chí còn lớn hơn cháu gái. Nếu bạn chạy mô hình này trong một thời gian dài, nó sẽ tiếp tục như thế này mãi mãi (hoặc có lẽ cuối cùng chúng sẽ bị các sinh vật tiến hóa vượt qua, có khả năng sinh sản nhanh hơn nhiều; tôi không chắc chắn).


1

PIN, 26

Đặt mã này vào bất kỳ tệp .bat nào và nó sẽ tiếp tục thực thi (trong một vòng lặp vô hạn) và tệp cũng sẽ phát triển.

echo echo %0 ^>^> %0 >> %0

Điều này không thực sự hiệu quả, %0là lệnh được sử dụng để gọi tập lệnh, có thể không có .BATphần mở rộng. Bạn có thể sử dụng %~nx0để có được tên tệp đầy đủ của tệp bó.
Jason C

@JasonC AFAIK, nó không cần phải .batđược thực thi. Nếu tên tệp là execute.bat, bạn có thể nhập executehoặc execute.bat. Cả hai sẽ làm việc.
ub3rst4r

Các tập tin bản thân cần phải có một .batphần mở rộng để thực hiện nhưng bạn có thể để mở rộng ra khi bạn thực hiện nó (khi bạn gõ một lệnh không có phần mở rộng, Windows sẽ cố gắng .com, .exethì .battheo thứ tự đó). Nếu tên tệp là hello.bat, thì >> %0sẽ ghi một tệp có tên hello, không phải là bản gốc hello.bat(và không thể được thực thi).
Jason C

1

PYG (6)

P(Q,Q)

In mã nguồn riêng của nó, được phân tách bằng dòng mới. Thế hệ thứ hai sẽ là

P(Q,Q)
P(Q,Q)

và kể từ đó trở đi.


1

DẦU , 83 byte

0
0
1
1
1
4
1
11
4
1
11
1
2
2
1
12
18
10
18
1
32
22
1
18
26
4
26
8
18
11
6
17
4
26

Đầu tiên, nó in hai dòng có số 0 trong đó và sau đó so sánh mỗi dòng với dòng 1, nếu chúng bằng nhau (đó là trường hợp khi tệp bị cạn kiệt), chúng tôi sẽ in những gì trong ô 26. Kết quả đầu ra sẽ trông giống tương tự, ngoại trừ với một bổ sung 33, mà không làm gì cả. Lần tới, một dòng khác sẽ được thêm vào, v.v.


1

Giúp tôi với, WarDoq! , 1 byte.

H

In Hello, World!.

Các ký tự khác ngoài H là mã nguồn hợp lệ (và an toàn) (in các biến thể khác của Hello World).


Cũng hoạt động trong (các biến thể của) HQ9 +.
Máy

@CalculatorFeline trong HQ9 + điều này sẽ không tiếp tục phát triển.
Martin Ender
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.