Program yang membuat versi lebih besar dari dirinya sendiri (quine-varian)


109

Anda harus menulis sebuah program yang akan menampilkan kode sumber itu

  1. Lebih besar dari program aslinya (berdasarkan karakter)
  2. Akan mencetak program lain yang lebih besar dari dirinya saat dijalankan (yaitu program baru juga merupakan jawaban yang valid untuk tantangan ini)

Ini kode-golf, jadi jawaban tersingkat menang.


4
@ Kevin, Definisi ini bersifat rekursif. Outputnya harus berupa program yang outputnya lebih besar dari dirinya sendiri, dan jawaban untuk pertanyaan ini. Jadi output output harus lebih besar dari output, dan output output harus lebih besar, dll.
ugoren

8
Saya pikir Anda harus mengklarifikasi aturan Anda. Di satu sisi, setiap output kode tambahan oleh program seperti itu "jelas tidak berguna"; di sisi lain, semua kode tambahan dalam output adalah "berguna" dalam hal itu lebih lanjut tujuan menjawab tantangan ini.
Jason C

5
Maaf telah menghancurkan tantangan Anda. :^)
Justin

2
Saya pikir tantangan ini akan jauh lebih baik sebagai kontes popularitas daripada golf kode. Itu akan memungkinkan kreativitas lebih banyak lagi!
corsiKa

30
Tentu saja, program seperti itu harus dikenal sebagai kina.
Jonathan Van Matre

Jawaban:


89

GS2 (8636bd8e) , 0 byte



Ini mencetak satu baris baru, yang mencetak dua baris baru, yang mencetak tiga baris baru, dan lain-lain.

Cobalah online!


3
Bukankah ini secara teknis tidak bersaing karena gs2 lebih baru daripada tantangannya?
DJMcMayhem

24
Komit ini mendahului tantangan satu setengah bulan. Saya baru saja mengujinya, dan berfungsi sebagaimana dimaksud.
Dennis

1
Bagaimana ini bukan celah ???
Mama Fun Roll

14
@MamaFunRoll Kenapa begitu? Ini tidak berbeda dengan pencetakan program Retina yang kosong 1 , pencetakan program Jelly yang kosong 0 , atau pencetakan program Terjebak yang kosong Halo, Dunia! .
Dennis

2
@Cyoce Kebetulan baris baru menampilkan baris baru lain di GS2.
Buah Esolanging

299

H9 + : 1 char

9

Tepat sekali. Satu karakter Keluarkan lirik hingga 99 botol bir , yang merupakan program yang valid. Semua data asing tidak dihitung, tetapi ada banyak data 9di sana.

Output dari program yang dihasilkan adalah lirik hingga 99 botol bir 59 kali.

Fungsi ini memberikan berapa kali lirik dihasilkan jika Anda menjalankan program nkali (jika perhitungan saya benar):

f(n) = 59n-1

32
Program 0 char dalam bahasa tertentu, karena valid, kemungkinan akan menghasilkan 0 karakter. Dan karena 0 * x = 0 untuk setiap nilai hingga x, saya dapat mengklaim bahwa program yang saya hasilkan sebenarnya 999999999999999999 kali lebih besar dari kode sumber.
nitro2k01

39
@JohannesH. Untuk semua masalah (dapat dipecahkan) ada bahasa pemrograman yang memecahkan masalah dalam 0 karakter.
Cruncher

15
Saya masih menggerakkan bahwa kita menamakannya "Teorema Cruncher", kecuali itu sudah ditemukan.
Erty Seidohl

22
Salah satu fitur yang menarik adalah bahwa itu juga akan berisi 2*59^n-2contoh "Halo, dunia!", Karena "h" di "the".
AJMansfield

8
Sepertinya Anda telah dikalahkan.
PyRulez

118

GolfScript, 9 karakter

{.'.~'}.~

Kode ini menghasilkan:

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

yang keluaran:

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

yang keluaran:

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

dan seterusnya.

Saya percaya ini adalah jawaban terpendek dalam bahasa pemrograman Turing-complete "nyata" sejauh ini.

Penjelasan:

Pada dasarnya, kode asli di atas adalah "quine-layer": ini mengeluarkan quine normal diikuti dengan sendirinya.

Dalam GolfScript, setiap blok kode literal (misalnya {foo}), jika dibiarkan tidak terganggu di stack, adalah quine. Jadi, dengan sendirinya, {.'.~'}cukup mengeluarkan sendiri, sama seperti blok kode lainnya.

Di .~akhir kode mengambil blok kode terakhir pada tumpukan, menduplikatnya, dan mengeksekusi salinan. Ketika dieksekusi, kode .'.~'di dalam blok kode menduplikasi item paling atas pada tumpukan (yaitu salinan dirinya sendiri) dan menambahkan string .~.

Pada akhir program, interpreter GolfScript merangkai dan mengeluarkan semua yang ada di stack, yang, dalam hal ini, terdiri dari satu {.'.~'}blok lagi dari pada input, ditambah string .~.

Bonus:

Menambahkan ]sebelum yang pertama .(untuk mengumpulkan semua blok kode pada tumpukan ke dalam array sebelum digandakan) membuatnya bertambah secara eksponensial:

{].'.~'}.~

output:

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

yang keluaran:

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

yang keluaran:

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

dan seterusnya.


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


2
@ nitro2k01 pikiran pertama saya tepatnya: D
Songo

1
Apakah "nyata" dalam tanda kutip karena HQ9 + tidak nyata atau karena GolfScript tidak nyata, atau keduanya?
Roger Pate

1
@thepiercingarrow kode sumber menyerupai ini
Rod

108

Java 7: 0 karakter



Simpan sebagai file Blank.java. Jika Anda menyimpannya sebagai file lain, ganti instance Blankdengan nama file yang sesuai.

Kemudian, jalankan di command line melalui kompilasi pertama, lalu jalankan. Jika kompilasi gagal, hentikan.

Saya mencantumkan ini sebagai Java 7 karena mungkin menampilkan secara berbeda untuk versi Java yang berbeda.

Beberapa output pertama (di-output ke 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
"Anda harus menulis sebuah program yang akan menampilkan kode sumber yaitu" Outputnya bisa dibilang bukan kode sumber. Dan lebih jauh lagi, tergantung pada definisi output (apakah output harus berasal dari khusus stdout) tidak ada yang benar-benar output.
nitro2k01

43
@ nitro2k01 Saya kutip sama: "Anda harus menulis sebuah program yang akan menampilkan kode sumber ". Apa pun itu adalah kode sumber. Tetapi hanya beberapa hal yang merupakan kode sumber yang valid . Selain itu, tidak ditentukan apa yang dianggap sebagai output, jadi saya diizinkan kebebasan di sana.
Justin

15
@PyRulez Benar. Saya mengeksploitasi aturan Anda. Anda tidak perlu menerima jawaban ini. Ketika saya memposting ini, saya tahu bahwa suatu kontroversi akan mengikuti, lengkap dengan banyak suara naik dan turun. Saya memutuskan bahwa itu akan sia-sia.
Justin

29
Apakah Anda yakin program itu sendiri mencetak hasilnya? Bukankah itu hanya kompiler? Program tidak pernah dikompilasi dan itu sendiri tidak ditafsirkan atau dieksekusi, sehingga tidak dapat menghasilkan output apa pun.
VX

12
@ blabla999 Saya tidak setuju - orang tidak mencoba tantangan ini karena orang lain melakukan sesuatu yang gila. Kami hanya menantang diri sendiri untuk melakukannya dengan cara lain. Seperti dikatakan Mark Rosewater, "Pembatasan menghasilkan kreativitas"
corsiKa

79

HQ9 +, HQ9 ++ dan similars, 2 karakter

QQ

Ini adalah output:

QQQQ

36
Saya melihat ini dan berpikir, "Oh tidak, tidak ada yang bisa mengalahkan ini." Saya mulai mencoba untuk membuat sesuatu, lalu itu mengenai saya. Jadi saya mengirim jawaban.
Justin

1
@Quincunx Bravo, jawaban Anda tervvikasi.
Victor Stafusa

4
@ Quincunx Tidak, saya pikir itu 2^2^n, di mana program awal adalah generasi 0. Panjangnya berulang m -> m^2.
Vortico

3
@Vortico Poin bagus. Meskipun saya mengatakannya salah, maksud saya: Pada panjang kode n, hasilnya menjadi n^n. Namun, itu salah; ketika panjang kode, panjang noutput adalahn^2
Justin

2
Itu lucu meskipun karena bahkan dua iterasi pertama adalah pesaing yang mungkin untuk pertanyaan ini.
PyRulez

29

Ruby 27

Versi yang sangat sedikit diubah dari ini ( via ):

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

Jumlah kali puts-line dicetak tumbuh secara eksponensial.

$ 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
Jawaban yang diilhami oleh Kepala Kaiser
Ben Jackson

25

Lambda Calculus - 29

Istilah lambda sederhana

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

Mengurangi istilah ini dengan satu hasil reduksi beta

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

Dan seterusnya dan seterusnya. Ini adalah varian sederhana pada klasik (λu.u u)(λu.u u)yang merupakan quine dalam kalkulus lambda, aplikasi diri ganda di sini berarti kita mendapatkan dua kali output.


7
Saya berpendapat bahwa dalam kalkulus lambda, "menjalankan" istilah lambda berarti menghitung bentuk normalnya, tidak melakukan pengurangan beta tunggal. Juga, sebuah istilah dapat mengandung beberapa redex, oleh karena itu "mengurangi redex tunggal" adalah operasi yang ambigu.
Petr Pudlák

2
Anda benar, tetapi karena istilah ini tidak memiliki bentuk normal, masuk akal untuk membicarakannya dalam hal pengurangan langkah kecil. Karena lambda kalkulus tidak memiliki evaluasi set yang melekat, saya hanya dapat mendefinisikan "menjalankan" itu untuk mengurangi satu redex tingkat atas redex tunggal dengan nama panggilan semantik tidak?
jozefg

3
Nah, istilah tanpa bentuk normal sesuai dengan program yang tidak berakhir. Dan masalah dengan redex tingkat atas adalah bahwa suatu istilah dapat memiliki dua redex, tidak ada yang menjadi sub-istilah yang lain. Anda dapat memilih beberapa kriteria mana yang harus dikurangi, tetapi saya katakan bahwa Anda sudah sangat jauh dari standar semantik kalkulus lambda. (Pokoknya saya menghargai ide novel Anda.)
Petr Pudlák

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

2
(λx. xx) (λx. xxx) menguranginya dalam satu langkah
Ben Millwood

23

Script SH, 9

cat $0 $0

Tumbuh pada tingkat eksponensial.

Baik dijalankan sebagai sh whatever.sh atau setel sebagai dapat dieksekusi.

Versi Windows ada di sini .


2
Pada saat saya menulis komentar ini, halaman Quine Wiki mengatakan bahwa membaca dari sistem file itu curang.
Lord Ratte

3
@LordRatte Di sisi lain, tantangannya bukanlah menulis quine.
Jason C

20

dc 11

Cukup sederhana:

6579792
dfP

Baris pertama diulangi sekali setiap generasi:

$ dc growing_quine.dc
6579792
6579792
dfP

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

Baris terakhir terdiri dari instruksi berikut: dmenduplikasi nilai terakhir yang diletakkan pada stack (6579792) (sehingga kita mendapatkan satu salinan lagi setiap kali kita menjalankannya), fmencetak seluruh tumpukan (yang merupakan kumpulan dari angka yang sama) dan Pmencetak nomor (6579792) sebagai aliran byte, yang ditampilkan sebagai dfP.


16

redcode (solusi rekursif)

Ini adalah kode prajurit termudah yang dapat ditulis dalam kode merah , Imp yang terkenal:

MOV 0, 1

Ketika dijalankan, kode menulis salinan instruksi tunggal di alamat berikutnya dalam memori; lalu jalankan, dll.


15

Python 3 - 55

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

Ini bisa diperpendek dengan mengganti __ file__ dengan nama file karakter tunggal dan menyimpan file seperti itu, tetapi saya merasa jawaban ini lebih sesuai semangat pertanyaan. Setelah satu iterasi menghasilkan:

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

3
Ini bukan quine. Lihat definisi .
Petr Pudlák

14
@ PetrPudlák Juga tidak ada program dalam pertanyaan ini. Ini adalah masalah varian quine, bukan quining yang ketat.
AJMansfield

6

Smalltalk, 125 61 57

Versi golf terlihat hampir tidak dapat dibaca jadi saya akan jelaskan dulu (dan gunakan pengidentifikasi nyata).

Ini adalah varian dari metode modifikasi diri "aneh-cara-untuk-menghasilkan-stack-overflow".

Metode ini mencetak pesan halo, dan sumbernya saat ini (hanya untuk demonstrasi). Kemudian, kode tersebut dimodifikasi untuk menghasilkan string yang lebih panjang dan diinstal. Akhirnya, kode baru ini disebut secara rekursif.

Untuk melindungi diri saya dari pelarian segera, itu memungkinkan pengguna mengkonfirmasi di setiap siklus.

kompilasi di 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
   ]

mulai pertunjukan dengan mengirimkan "eatMe_alice" ke Obyek apa pun; nol akan dilakukan:

nil eatMe_alice

Varian yang bagus adalah dengan tidak memanggil kode baru secara rekursif, tetapi sebaliknya secara iteratif, dengan melepas penumpukan panggilan dan masuk kembali ke metode baru. Ini memiliki keuntungan karena tidak mengarah ke pengecualian rekursi. Untuk melakukan ini, ganti panggilan rekursif ("self eatMe_alice") dengan:

thisContext resend

Golf:

Jelas, pencetakan dan panggilan sendiri tidak diminta, jadi yang terpendek (untuk golf) adalah dengan menambahkan komentar ke sumber saya sendiri dan mengembalikannya. Sebagai efek samping, itu juga akan diinstal untuk panggilan berikutnya ...

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

5

Script SH, 12 8 7

Simpan file dengan

sed p *

di direktori sendiri, kosongkan dan jalankan dari direktori ini menggunakan sh [file]atau mengatur executable.


Alternatif lama dengan 8 karakter , tetapi tidak perlu direktori sendiri. Simpan file dengan

sed p $0

dan jalankan menggunakan sh [file]atau atur executable.

Alternatif lama dengan 12 karakter :

sed -i- p $0

Ini sebenarnya akan di-output ke file program itu sendiri, tetapi di mana output tidak ditentukan. Mereplikasi dirinya sendiri pada tingkat eksponensial.


1
Anda mungkin masih memiliki kesempatan menggunakan ed, tidak ingin melihat-lihat halaman manualnya ...
Jens Erat

4

JavaScript, 41 , 40 karakter

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

Pertama kali Anda menjalankannya, output sendiri dengan yang lain ;f()di akhir. Hasil keluaran selanjutnya dijalankan di setiap sumber "input" yang dicetak dua kali.

alertakan lebih pendek dari console.logtetapi saya tidak menganggap beberapa dialog peringatan sebagai "the" output sementara tampaknya masuk akal untuk memanggil beberapa baris di konsol sebagai output.


Anda dapat menyimpan satu byte dengan "f(f())"alih - alih"f();f()"
Hedi

Ini sepertinya tidak berhasil bagi saya ...
Destructible Lemon

4

J , 1 byte

'

Cobalah online!

Kutipan terbuka memberi, jelas, kesalahan kutipan terbuka:

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

Perhatikan bahwa, berdasarkan sifat J interpreter, kesalahan dicetak ke STDOUT , bukan STDERR.

Ketika kode di atas dijalankan sebagai kode, ia mencetak:

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

Kemudian

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

dan seterusnya. Setiap kali kode berjalan, baris kedua diisi dengan empat byte|    , memenuhi persyaratan tantangan ini.

J , varian quine yang tepat, 25 byte

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

Cobalah online!

Keluaran

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

Dan kemudian output itu sendiri dua kali, pada baris yang berbeda:

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

kemudian

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

dan seterusnya.

Output pertama adalah varian sederhana standar J quine . Yang ditambahkan ,:~menggabungkan sendiri secara vertikal, di mana array 2D yang dihasilkan dicetak sebagai dua baris dari string yang sama.


3

Windows .BAT, 25

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

Tumbuh pada tingkat eksponensial.

Versi SH Setara di sini .


3

reticular, 11 byte, tidak bersaing

"'34'coo1o;

Ini adalah kerangka kerja standar quine, kecuali tambahan 1dicetak setelah setiap iterasi.Cobalah online!

Beberapa keluaran pertama:

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

3

Microscript II, 6 byte

Tidak bersaing, bahasa menunjukkan tantangan.

"qp"qp

Iterasi pertama menambahkan ekstra qpke akhir, dan setiap iterasi berturut-turut menambahkan salinan tambahan dari program asli ini ke awal.



2

EcmaScript 6 (51 byte):

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

Ini menghasilkan versi yang lebih panjang dari dirinya sendiri, yang dapat menghasilkan versi yang lebih panjang dari dirinya sendiri, yang dapat menghasilkan versi yang lebih panjang dari dirinya sendiri, dll ...


2

PHP, 38

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

Ini akan menambahkan titik koma di setiap proses.


Apakah kode titik koma tidak berguna?
Justin

3
@ Quincunx Mereka benar, Anda benar. Namun, apa yang Anda anggap kode yang berguna?
ComFreek

Mungkin Anda bisa dimasukkan ke dalam ';'. Maka Anda akan mendapatkan hasil yang lebih lama.
Justin

1
mengapa tidak <?=fgets(fopen(__FILE__,'r')).';';?
Ismael Miguel

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

2

ECMAScript 6 (38 Karakter)

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

Output yang mana:

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

Sunting

Anda dapat melakukannya (28 karakter):

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

Namun itu akan muncul kembali tanpa batas dan tidak pernah mengembalikan apa pun ... tetapi ini dapat diselesaikan dengan melakukan sesuatu seperti ini (42 karakter):

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

Yang akan menghasilkan:

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

3
+_+ =_=+1 untuk emotikon
TuxCrafting

2

Gangguan Umum, 16 Karakter

(print `(or ,-))

Memang, ini hanya interaktif, tetapi bisa merujuk formulir tingkat atas saat ini mungkin merupakan cara terbaik untuk meminimalkan program non-sepele yang memenuhi spesifikasi.

Yang benar-benar menarik adalah yang paling cepat meledak. Mungkin kira-kira seperti itu

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


+1 Untuk Common Lisp. Sepertinya saya bisa melewati `dan ,?
daniero

@daniero Tanpa kutipan, itu hanya mencetak program aslinya, tidak pernah tumbuh. Pada titik itu, Anda juga dapat menghilangkan or, juga:(print -)
Stuart Olsen

2

Julia, 66 karakter

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

Output (134 karakter):

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);

Hasil mengeksekusi hasil (268 karakter):

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);

hasil selanjutnya (536 karakter):

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);

Hasil selanjutnya (1072 karakter):

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);

Saya harap ini sesuai aturan.

Ini menghasilkan output yang lebih besar, dan output itu sendiri adalah kode sumber yang valid yang menghasilkan output yang lebih besar lagi.


Akankah output, ketika dijalankan, menghasilkan entri yang valid?
PyRulez

Dalam contoh pertama outputnya adalah kode yang valid. Ini adalah string literal yang berisi 5 periode. Dalam contoh kedua, memasukkan julia prompt itu sendiri tidak akan melakukan apa pun. Saya hanya berpikir bahwa memberikan repl sebenarnya karakter baris baru dengan menekan enter menghasilkan output yang lebih panjang daripada input.
ML

Akankah "....." menghasilkan versi yang lebih besar dari dirinya sendiri?
PyRulez

Ah, sekarang saya mengerti. Saya hanya memperhatikan itu harus bersifat rekursif ... waktu untuk memperbaiki solusi saya. Terima kasih atas petunjuknya.
ML

1
Saya kira kodenya sesuai dengan aturan sekarang.
ML

2

05AB1E, 15 byte, tidak bersaing

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

Cobalah online!

Cetakan 0"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý,
yang dicetak 0"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý,
dll.


Kedua contoh DDdapat digantikan oleh Ð.
Emigna

1
Mengapa tidak bersaing?
MD XF

2

Evoloop, persegi panjang 9 × 9 (81 sel)

The Evoloop otomat seluler disertakan dengan Waduh mendukung pola yang mereplikasi diri mereka dalam "Quine-seperti" cara. Secara khusus, masing-masing pola ini mengandung "program"; sebuah pola mereproduksi dirinya sendiri dengan terlebih dahulu menjalankan program (yang menciptakan "tubuh" anak perempuan), dan kemudian dengan menyalin program ke anak perempuan.

Hal di atas berlaku untuk otomat seluler "Langton's Loops" yang lebih terkenal serta Evoloop, tetapi Evoloop memiliki perbedaan yang menarik, yaitu mudah untuk membuat pola yang tumbuh di setiap generasi berikutnya.

(Menurut saya, jauh lebih menarik adalah kenyataan bahwa Evoloop adalah otomat seluler sederhana yang berisi pola yang mereproduksi diri mereka sendiri dan berevolusi dengan cara yang sangat hidup! Saya pikir satu-satunya automata seluler yang dikenal yang melakukan ini adalah Evoloop dan turunannya. Namun, kekurangan Evoloop adalah bahwa ada satu genom "terbaik" tertentu; evolusi pada akhirnya selalu menyatu dengan genom yang satu ini.)

Sekarang, ada dua kekurangan pada pengiriman ini. Salah satunya adalah tidak jelas apa "output" dari otomat seluler. Tetapi saya berpikir bahwa otomat yang dapat bereproduksi sendiri "cukup dekat" untuk menjadi seekor quine; tentu tidak kalah menarik! Kelemahan lainnya adalah bahwa pola-pola ini tidak hanya membuat salinan tunggal dari diri mereka sendiri; setiap salinan dari pola asli mencoba untuk membuat salinan yang tak terhingga banyaknya dari dirinya sendiri, dan salinan ini akhirnya berinteraksi satu sama lain dengan cara yang merusak. Jadi, saya pikir saya sudah memenuhi persyaratan tantangan ini dalam semangat, tetapi tidak dalam surat.

Tanpa basa-basi lagi, polanya adalah:

022222220
270170172
212222202
202000212
272000272
212000202
202222212
271041032
022222250

Inilah polanya lagi, dalam format yang dapat disalin dan ditempelkan ke 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
!

Oke, tapi seperti apa bentuknya? Ini terlihat seperti ini:

Pola dalam otomat seluler yang menciptakan salinan dirinya sendiri yang semakin besar.

Dalam animasi di atas, Anda dapat melihat pola awal membuat anak perempuan yang lebih besar, yang menciptakan cucu perempuan yang lebih besar, kemudian cicit perempuan yang lebih besar, dan akhirnya cicit perempuan yang lebih besar yang mulai membangun cucu ketiga yang lebih besar lagi. cucu perempuan. Jika Anda menjalankan pola ini untuk waktu yang lama, itu akan terus seperti ini selamanya (atau mungkin mereka pada akhirnya akan dikalahkan oleh organisme berevolusi, yang mampu mereproduksi lebih cepat; saya tidak yakin).


1

BATCH, 26

Tempatkan kode ini di file .bat apa saja dan akan terus dijalankan (dalam loop tak terbatas) dan file akan tumbuh juga.

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

Ini tidak berfungsi, %0adalah perintah yang digunakan untuk menjalankan skrip, yang mungkin tidak memiliki .BATekstensi. Anda dapat menggunakan %~nx0untuk mendapatkan nama file lengkap dari file batch.
Jason C

@JasonC AFAIK, tidak perlu .batdieksekusi. Jika nama filenya adalah execute.bat, Anda dapat memasukkan salah satu executeatau execute.bat. Keduanya akan bekerja.
ub3rst4r

File itu sendiri perlu memiliki .batekstensi untuk mengeksekusi tetapi Anda dapat meninggalkan ekstensi ketika Anda jalankan (ketika anda mengetik perintah tanpa ekstensi, Windows mencoba .com, .exemaka .batdalam urutan itu). Jika nama file adalah hello.bat, maka >> %0akan menulis file bernama hello, yang bukan yang asli hello.bat(dan tidak dapat dieksekusi).
Jason C

1

PYG (6)

P(Q,Q)

Mencetak kode sumbernya sendiri, dipisahkan oleh baris baru. Generasi kedua adalah

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

Dan seterusnya.


1

MINYAK , 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

Pertama mencetak dua baris dengan nol di dalamnya, dan kemudian membandingkan setiap baris dengan baris 1, jika mereka sama (yang merupakan kasus ketika file habis), kami mencetak apa yang ada di sel 26. Output yang dihasilkan akan terlihat sama, kecuali dengan tambahan 33, yang tidak melakukan apa-apa. Lain kali, baris lain akan ditambahkan, dan seterusnya.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.