Mã tự phát triển codeeee codeeee


41

Viết chương trình (hoặc hàm) (gọi nó là P1), khi chạy, sẽ xuất ra một chương trình P2 khác có cùng ngôn ngữ và dài hơn 1 byte so với P1.

Chương trình P2 khi chạy, nên xuất P3 chương trình thứ 3 dài hơn 1 byte so với P2. P3 phải xuất ra một chương trình P4 dài hơn một byte so với P3, v.v. Tương tự đối với P5, P6, ..., P∞.

Chuỗi chương trình phải đi vô thời hạn hoặc đến một nơi mà trình thông dịch không thể xử lý được nữa (nhưng phải duy trì như một chương trình hợp lệ về mặt lý thuyết trong ngôn ngữ)

Quy tắc

  • Sơ hở tiêu chuẩn bị cấm
  • Tất cả các chương trình trong chuỗi phải ở một ngôn ngữ
  • Không có đầu vào được đưa ra. Đầu ra đi đến giá trị xuất chuẩn hoặc hàm trả về
  • Chương trình phải kết thúc sau một khoảng thời gian. Một chương trình ngừng tạo đầu ra sau một thời điểm nhất định nhưng không bao giờ chấm dứt không đủ điều kiện

Chương trình ngắn nhất P1 tính bằng byte trong mỗi ngôn ngữ sẽ thắng!


2
@ Urous gì ??? Tôi đã không tự thêm thẻ đó ...
iBug 17/03/18

6
@iBug Bất kể, bài nộp có được phép đọc mã nguồn của riêng họ không?
Martin Ender

3
@iBug Thẻ "quine" cấm theo mặc định và nó thường làm cho câu trả lời thú vị hơn khi làm như vậy. Điều đó tùy thuộc vào bạn.
Martin Ender

1
"puts <<2*2,2\nputs <<2*2,2\n\n2"tăng 2 lần ở mỗi lần lặp trong Ruby. Tôi không thể tìm thấy bất cứ điều gì tốt hơn. : - /. Thử thách thú vị!
Eric Duminil 17/03/18

Câu trả lời:


28

JavaScript (ES6), 14 12 byte

-2 byte nhờ @Shaggy

f=_=>"f=_"+f

Đoạn kiểm tra


Mất một giây để nhận ra điều đó. Lén lút!
Xù xì

4
Ai đó có thể vui lòng giải thích, tôi không thể quấn đầu xung quanh nó, làm thế nào để tăng?
htmlcoderexe 17/03/18

2
@htmlcoderexe chuẩn bị "f=_"thêm _trước tên tham số, điều này làm cho nó tăng chiều dài mỗi lần lặp.
Herman L

9

7 , 4 byte ASCII

1603

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

Tôi biết rằng 7 không được mã hóa thông thường trong ASCII, nhưng lần này là mã hóa thuận tiện hơn để chúng tôi thêm 1 byte với mỗi lần chạy chứ không phải 3 bit.

Tôi cũng không chắc liệu điều này có được tính là gian lận hay không. (Thông thường không rõ liệu 7 quine có gian lận hay không, vì nó đi theo đường biên giới theo một số cách.) Bạn có thể đưa ra một lập luận đúng đắn rằng 0mã hóa 6, nhưng nói chung không rõ các ký tự kết quả "đến từ đâu "Trong 7 vì nó có rất nhiều hành vi khá kỳ quái, ngầm.

Chương trình này tự in với phần 1bổ sung và sẽ làm như vậy ngay cả khi bạn nối thêm một số 1s vào nó. Đây là một dấu vết gỡ lỗi nhận xét về 160311:

|| 160311      Initial data ||; initial program 160311
||7 60311      1 command = append 7 to data
|1 0311        6 command = escape from the last | onwards (7 escapes to 1)
|16e77         0311 commands = append 6e77 to data
|16e77 16e77   Implicit (program is empty): copy data past last | to program
|16e777 6e77   1 command = append 7 to data
71603111 e77   6 command = escape from the last | onwards
71603111 e77   e7 command = output in same encoding as the source

(Không còn |lại trong chương trình, vì vậy esẽ ngay lập tức thoát khỏi chương trình như một tác dụng phụ, có nghĩa là 7s cuối cùng không bao giờ chạy).

Sự nhầm lẫn cơ bản về nơi tất cả các ký tự đến từ đó là hầu hết các lệnh trong 7 chỉ tạo dữ liệu khi chạy và sau đó 6cố gắng xây dựng lại một chuỗi các lệnh sẽ tạo ra đoạn dữ liệu đã cho; cái này thường kết thúc gần, nhưng không giống với bản gốc. (Đối với mục đích khai thác, bạn thường viết chương trình 7 theo cách sao cho kết quả gần như giống nhau, thường khác nhau ở phần dẫn hoặc dấu 7.) Vì vậy, ví dụ, 1trong dữ liệu trở thành 716cách dễ nhất để nối 1đến chuỗi dữ liệu hiện tại. Ban đầu chúng tôi đã sản xuất nó với 16, một chuỗi ký tự khác (nhưng tương tự), loại bỏ triệt để một trong những|đánh dấu dữ liệu bắt đầu với. (Tôi đoán có lẽ lập luận tốt nhất rằng đây không phải là một câu hỏi chỉ có nghĩa đen là đầu ra khác với đầu vào!)


9

Haskell , 74 66 byte

BIÊN TẬP:

  • -2 byte bởi H.PWiz bằng cách sử dụng <>, sau đó -6 bằng cách di chuyển (10*)<$>.

Điều này hiện sử dụng <>toán tử mới miễn phí ( Semigroupphép nhân, yêu cầu GHC 8.4 để hoạt động mà không cần nhập.)

main=putStr$fst<>show$(10*)<$>("main=putStr$fst<>show$(10*)<$>",1)

Hãy thử trực tuyến! (Gian lận với nhập khẩu vì TIO chưa có GHC 8.4.)

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

  • main=putStr$ được soạn sẵn để xuất giá trị chuỗi sau.
  • fst<>showlà một hàm lấy một tuple và trả về một chuỗi bao gồm phần tử đầu tiên của tuple được nối với biểu diễn chuỗi của tuple. I E

    (fst<>show)(s,t) = fst(s,t)<>show(s,t) = s++show(s,t)
  • (10*)<$>nhân phần tử cuối cùng của bộ dữ liệu sau với 10, thêm một chữ số 0vào biểu diễn chuỗi của nó.


1
Bạn có thể lưu ít nhất 2 byte với(<>)
H.PWiz

@ H.PWiz Cảm ơn, có thêm một số bằng cách di chuyển (10*)<$>.
Ørjan Johansen

8

C (gcc) , 134 132 byte

Làm lại nhẹ của quine C chính tắc. Kinh khủng kéo dài.

x;*s="x;*s=%c%s%c;main(i){for(i=__LINE__;i--;puts(&x));printf(s,34,s,34);}";main(i){for(i=__LINE__;i--;puts(&x));printf(s,34,s,34);}

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





4

Brainfuck , 420 byte

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

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

Đây là một sửa đổi trên quine BrainFuck "tiêu chuẩn" , với .phần cuối xử lý thêm .một lần lặp.

Bản thân quine mã hóa các ký tự Brainfuck dưới dạng một chồng các chữ số hex: cụ thể, các chữ số hex của c-0x2b, thuận tiện là như sau:

+: 0x00
-: 0x02
[: 0x30
]: 0x32
<: 0x11
>: 0x13
,: 0x01
.: 0x03

Mã hóa bao gồm hai đoạn mã: >++[[>>+[>]++>++[<]<-]>+[>]<+<+++[<]<+]>>->[>]++++>++đẩy mã hóa chính mã hóa và [[<++++++++++++++++>-]<+++++++++.<]đi theo ngăn xếp và in mọi thứ.


3

Bẩn , 9 byte

'"n[!]a!␛

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

'   start and end a string literal
"   push a literal '
n   remove newlines
[!] print the string
a   push the alphabet
!   print the first character
␛   end the program

Nếu việc đọc mã nguồn được cho phép:

Bẩn , 8 byte

Q[!]W33!

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

Giải thích:

Q   push the source code
[!] print each character
W   clear the now-empty stack
33! print an exclaimation mark

Có thể hợp lệ:

Bẩn , 4 byte

Q[‼]

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

Nó in mã nguồn với một dòng mới.
(Và một loạt các khoảng trắng, do một lỗi. Nó hoạt động tương tự mà không có chúng.)

Lưu ý rằng nó chỉ hoạt động trong các bộ ký tự bản xứ, và không phải khi bạn sử dụng UTF8 front-end - vì vậy để thử nó trên TIO bạn cần phải thay thế các nhân vật nó ra giữa []s với , đó là UTF8 tương đương cho những gì nó in .


1
Phiên bản 4 byte chắc chắn không hợp lệ.
Erik the Outgolfer 17/03/18

3

Java 8, 162 146 byte

v->{String s="v->{String s=%c%s%1$c+1;return s.format(s,34,s).replaceAll(%1$c1+$%1$c,%1$c%1$c);}"+1;return s.format(s,34,s).replaceAll("1+$","");}

Hãy thử trực tuyến.
Hãy thử chương trình đầu ra đầu tiên ; Hãy thử chương trình đầu ra thứ hai ; Hãy thử chương trình đầu ra thứ ba .

Giải trình:

v->{                       // Method with empty unused parameter and String return-type
  String s="v->{String s=%c%s%1$c+1;return s.format(s,34,s).replaceAll(%1$c1+$%1$c,%1$c%1$c);}"
                           //  The unformatted source code
           +1;             //  Plus a random digit (1 in this case)
  return s.format(s,34,s)  //  Create the quine
          .replaceAll("1+$","");}
                           //  Then remove any trailing 1s

-part:

  • String schứa mã nguồn chưa được định dạng.
  • %sđược sử dụng để nhập Chuỗi này vào chính nó với s.format(...).
  • %c, %1$c34được sử dụng để định dạng dấu nháy kép.
  • s.format(s,34,s) đặt tất cả lại với nhau

Phần thử thách:

  • +1 thêm 1 cho cả chương trình không được định dạng và định dạng.
  • .replaceAll("1+$","");}: Bởi vì chúng tôi chỉ muốn tăng số byte của chương trình lên một thay vì hai, nên chúng tôi xóa mọi dấu 1 trước khi quay lại.



2

GolfScript , 9 byte

{'.~1'}.~

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

CJam , 9 byte

{"_~1"}_~

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

Tôi đang đăng cả hai giải pháp này trong cùng một câu trả lời, vì chúng chỉ là những biến thể tầm thường của nhau và hoạt động theo cùng một cách. Cả hai đều dựa trên câu hỏi chung về GolfScript {'.~'}.~(hoặc {"_~"}_~trong CJam), được mô tả chi tiết hơn, ví dụ như trong câu trả lời trước đây của tôi.

Sự khác biệt duy nhất là biến thể này nối thêm một 1byte vào cuối đầu ra của nó. Khi điều đó xảy ra, bất kỳ chuỗi 1s (hoặc bất kỳ số nguyên nào khác không có số 0 đứng đầu) đều là một câu hỏi tầm thường trong cả GolfScript và CJam, do đó, bất kỳ chuỗi nào đã có ở cuối đoạn mã trên sẽ chỉ được sao chép nguyên văn vào đầu ra. Do GolfScript (và CJam) sử dụng các số nguyên có độ dài tùy ý, nên điều này sẽ hoạt động cho các chương trình dài tùy ý, ít nhất là miễn là máy tính chạy mã có đủ bộ nhớ để lưu trữ.


2

Tùy viên , 76 72 61 byte

Print!Format[x:="Print!Format[x:=%s,Repr[x+sp]]",Repr[x+sp]]

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

Quine tiêu chuẩn thêm một khoảng trắng vào cuối xsau mỗi lần lặp.

Vài lần lặp đầu tiên:

Print!Format[x:="Print!Format[x:=%s,Repr[x+sp]]",Repr[x+sp]]

Print!Format[x:="Print!Format[x:=%s,Repr[x+sp]] ",Repr[x+sp]]

Print!Format[x:="Print!Format[x:=%s,Repr[x+sp]]  ",Repr[x+sp]]

Vân vân.

Tùy viên, 72 byte

y:=1Print!Format[x:="y:=%sPrint!Format[x:=%s,y*10,Repr!x]",y*10,Repr!x]

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

Đây chỉ đơn giản là một biến thể của quine định dạng chuẩn, với một biến yđược đặt thành 10*ysau mỗi lần lặp

Một vài lần lặp đầu tiên:

y:=1Print!Format[x:="y:=%sPrint!Format[x:=%s,y*10,Repr!x]",y*10,Repr!x]

y:=10Print!Format[x:="y:=%sPrint!Format[x:=%s,y*10,Repr!x]",y*10,Repr!x]

y:=100Print!Format[x:="y:=%sPrint!Format[x:=%s,y*10,Repr!x]",y*10,Repr!x]

Vân vân.



1

Haskell , 88 byte

main=putStr$snd(span(<'m')s)++show s;s='#':"main=putStr$snd(span(<'m')s)++show s;s='#':"

Hãy thử trực tuyến! Phát triển bằng cách thêm vào #chuỗi dữ liệu.


Bạn có thể tiết kiệm một chút bằng cách nhập shownhiều hơn chỉ là một chuỗi và sử dụng khớp mẫu. Hãy thử trực tuyến!
Ørjan Johansen

@ ØrjanJohansen Đẹp! Ngoại trừ tiêu chuẩn cơ bản Haskell, đây là một cách tiếp cận hoàn toàn khác, vì vậy hãy tự mình đăng nó.
Laikoni 17/03/18

OK, nếu bạn nghĩ như vậy.
Ørjan Johansen

1

Stax , 20 18 byte

"34s+cTZL"34s+cTZL

Chạy và gỡ lỗi nó

Tạo một khoảng trắng thừa trước dấu ngoặc kép thứ 2 mỗi lần lặp.

Giải trình

Sử dụng chương trình "34s+cTZL "34s+cTZLđể giải thích.

"34s+cTZL "34s+cTZL
"34s+cTZL "            String literal
           34s+        Prepend a double quote, Now the string is `"34s+cTZL `
               cT      Copy and trim trailing spaces
                 Z     Put a 0 under the top of stack
                       Stack now (from top to bottom): `["34s+cTZL,0,"34s+cTZL ]`
                  L    Collect all elements on stack, from bottom to top
                       Implicit output, 0 is converted to space.


1

Bùa mê , 6 byte

"'<S@>

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

Điều này thật kỳ lạ. Tất cả những gì tôi phải làm là xóa một ~từ câu hỏi ban đầu được tìm thấy bởi Jo King .

Mỗi lần chạy bổ sung sẽ nối thêm một lần nữa <vào cuối, ví dụ:

"'<S@><<<<<<<<<

Tất cả đều không làm gì cả.

Bản sao trực tiếp của câu trả lời này về một thách thức liên quan. Nó chỉ xảy ra để tăng thêm 1 byte mỗi lần lặp (đối số mạnh mẽ cho thách thức này là một bản sao của điều đó hoặc ngược lại).



0

Kỳ quan , 33 byte

f\ @(-> ol) ["f\ ";f;";f1";#0];f1

Một biến thể thú vị trên quine bình thường nối thêm 1 sau mỗi lần lặp.

Tiến trình:

f\ @(-> ol) ["f\ ";f;";f1";#0];f1
f\ @(-> ol) ["f\ ";f;";f1";#0];f11
f\ @(-> ol) ["f\ ";f;";f1";#0];f111
...

Giải trình

f\ @                               #. Sets f to a function that does the following:
    (-> ol) [                      #.   Output each:
             "f\ ";                #.     String for declaration of f
                   f;              #.     Formatted representation of f's function
                     ";f1";        #.     String for call of f
                           #0      #.     Argument passed into f
                             ];f1  #. Call f with 1 as the argument

Một trong những phần thú vị của câu hỏi này là Wonder có thể hoạt động với số lượng chính xác tùy ý, vì vậy tiến trình sẽ không bị phá vỡ sau một số lượng nhất định.


0

ColdFusion, 277 byte

<cfset u=Chr(34)><cfset q="<cfset u=Chr(34)><cfset q=%s%s%s><cfoutput>%screateObject(%sjava%s,%sjava.lang.String%s).format(q,[u,q,u,Chr(35),u,u,u,u,Chr(35)])%s</cfoutput>
"><cfoutput>#createObject("java","java.lang.String").format(q,[u,q,u,Chr(35),u,u,u,u,Chr(35)])#</cfoutput>

Đây là một sửa đổi nhỏ của quine ColdFusion của tôi , bổ sung một dòng mới mỗi lần thêm vào.

Đã thử nghiệm cục bộ trên lucee-express-5.2.6.60


0

Batch Windows, 38 36 byte

echo|set/p"=q">q&copy/b/y %0+q %0
::

Mã này tạo một tệp có tên "q", chứa chữ 'q', sau đó nối nó vào tệp gốc. Lưu ý rằng "::" là bí danh cho "rem" không yêu cầu thêm dung lượng.

Đã lưu 2 byte nhờ user3493001.



0

T-SQL , 175 byte

DECLARE @ VARCHAR(MAX)='DECLARE @ VARCHAR(MAX)=*SET @=TRIM(REPLACE(@,0x2a,CHAR(39)+@+CHAR(32)+CHAR(39)))PRINT @'SET @=TRIM(REPLACE(@,0x2a,CHAR(39)+@+CHAR(32)+CHAR(39)))PRINT @

Đầu tiên tôi đã viết một câu hỏi SQL, sau đó tôi đã sửa đổi nó để thêm một khoảng trắng (phần nào lấy cảm hứng từ câu trả lời này ).



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.