Anda harus menulis sebuah program yang akan menampilkan kode sumber itu
- Lebih besar dari program aslinya (berdasarkan karakter)
- 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.
code-golf
quine
code-generation
PyRulez
sumber
sumber
:^)
Jawaban:
GS2 (8636bd8e) , 0 byte
Ini mencetak satu baris baru, yang mencetak dua baris baru, yang mencetak tiga baris baru, dan lain-lain.
Cobalah online!
sumber
H9 + : 1 char
Tepat sekali. Satu karakter Keluarkan lirik hingga 99 botol bir , yang merupakan program yang valid. Semua data asing tidak dihitung, tetapi ada banyak data
9
di 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
n
kali (jika perhitungan saya benar):sumber
2*59^n-2
contoh "Halo, dunia!", Karena "h" di "the".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.
sumber
{].'.~'}.~︵ ┻━┻
Java 7: 0 karakter
Simpan sebagai file
Blank.java
. Jika Anda menyimpannya sebagai file lain, ganti instanceBlank
dengan 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):
sumber
stdout
) tidak ada yang benar-benar output.HQ9 +, HQ9 ++ dan similars, 2 karakter
Ini adalah output:
sumber
2^2^n
, di mana program awal adalah generasi 0. Panjangnya berulangm -> m^2
.n
, hasilnya menjadin^n
. Namun, itu salah; ketika panjang kode, panjangn
output adalahn^2
Ruby 27
Versi yang sangat sedikit diubah dari ini ( via ):
Jumlah kali
puts
-line dicetak tumbuh secara eksponensial.sumber
Lambda Calculus - 29
Istilah lambda sederhana
Mengurangi istilah ini dengan satu hasil reduksi beta
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.sumber
Script SH, 9
Tumbuh pada tingkat eksponensial.
Baik dijalankan sebagai
sh whatever.sh
atau setel sebagai dapat dieksekusi.Versi Windows ada di sini .
sumber
dc 11
Cukup sederhana:
Baris pertama diulangi sekali setiap generasi:
Baris terakhir terdiri dari instruksi berikut:
d
menduplikasi nilai terakhir yang diletakkan pada stack (6579792) (sehingga kita mendapatkan satu salinan lagi setiap kali kita menjalankannya),f
mencetak seluruh tumpukan (yang merupakan kumpulan dari angka yang sama) danP
mencetak nomor (6579792) sebagai aliran byte, yang ditampilkan sebagaidfP
.sumber
redcode (solusi rekursif)
Ini adalah kode prajurit termudah yang dapat ditulis dalam kode merah , Imp yang terkenal:
Ketika dijalankan, kode menulis salinan instruksi tunggal di alamat berikutnya dalam memori; lalu jalankan, dll.
sumber
Python 3 - 55
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:
sumber
Smalltalk,
125 6157Versi 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:
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:
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 ...
sumber
Script SH,
1287Simpan file dengan
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
dan jalankan menggunakan
sh [file]
atau atur executable.Alternatif lama dengan 12 karakter :
Ini sebenarnya akan di-output ke file program itu sendiri, tetapi di mana output tidak ditentukan. Mereplikasi dirinya sendiri pada tingkat eksponensial.
sumber
ed
, tidak ingin melihat-lihat halaman manualnya ...JavaScript,
41, 40 karakterPertama kali Anda menjalankannya, output sendiri dengan yang lain
;f()
di akhir. Hasil keluaran selanjutnya dijalankan di setiap sumber "input" yang dicetak dua kali.alert
akan lebih pendek dariconsole.log
tetapi saya tidak menganggap beberapa dialog peringatan sebagai "the" output sementara tampaknya masuk akal untuk memanggil beberapa baris di konsol sebagai output.sumber
"f(f())"
alih - alih"f();f()"
J , 1 byte
Cobalah online!
Kutipan terbuka memberi, jelas, kesalahan kutipan terbuka:
Perhatikan bahwa, berdasarkan sifat J interpreter, kesalahan dicetak ke STDOUT , bukan STDERR.
Ketika kode di atas dijalankan sebagai kode, ia mencetak:
Kemudian
dan seterusnya. Setiap kali kode berjalan, baris kedua diisi dengan empat byte
|
, memenuhi persyaratan tantangan ini.J , varian quine yang tepat, 25 byte
Cobalah online!
Keluaran
Dan kemudian output itu sendiri dua kali, pada baris yang berbeda:
kemudian
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.sumber
Windows .BAT, 25
Tumbuh pada tingkat eksponensial.
Versi SH Setara di sini .
sumber
reticular, 11 byte, tidak bersaing
Ini adalah kerangka kerja standar quine, kecuali tambahan
1
dicetak setelah setiap iterasi.Cobalah online!Beberapa keluaran pertama:
sumber
Microscript II, 6 byte
Tidak bersaing, bahasa menunjukkan tantangan.
Iterasi pertama menambahkan ekstra
qp
ke akhir, dan setiap iterasi berturut-turut menambahkan salinan tambahan dari program asli ini ke awal.sumber
Pesona Rise , 6 byte
Cobalah online!
Yang ini aneh. Yang harus saya lakukan adalah menghapus a
~
dari quine asli yang ditemukan oleh Jo King .Setiap tambahan menjalankan menambahkan yang lain
<
sampai akhir, misalnya:Semuanya tidak melakukan apa-apa.
sumber
EcmaScript 6 (51 byte):
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 ...
sumber
PHP, 38
Ini akan menambahkan titik koma di setiap proses.
sumber
';'
. Maka Anda akan mendapatkan hasil yang lebih lama.<?=fgets(fopen(__FILE__,'r')).';';
?;<?echo fgets(fopen(__FILE__,'r'));
ECMAScript 6 (38 Karakter)
Output yang mana:
Sunting
Anda dapat melakukannya (28 karakter):
Namun itu akan muncul kembali tanpa batas dan tidak pernah mengembalikan apa pun ... tetapi ini dapat diselesaikan dengan melakukan sesuatu seperti ini (42 karakter):
Yang akan menghasilkan:
sumber
+_+ =_=
+1 untuk emotikonGangguan 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 -)))
sumber
`
dan,
?or
, juga:(print -)
Julia, 66 karakter
Output (134 karakter):
Hasil mengeksekusi hasil (268 karakter):
hasil selanjutnya (536 karakter):
Hasil selanjutnya (1072 karakter):
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.
sumber
05AB1E, 15 byte, tidak bersaing
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.
sumber
DD
dapat digantikan olehÐ
.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:
Inilah polanya lagi, dalam format yang dapat disalin dan ditempelkan ke Golly:
Oke, tapi seperti apa bentuknya? Ini terlihat seperti ini:
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).
sumber
BATCH, 26
Tempatkan kode ini di file .bat apa saja dan akan terus dijalankan (dalam loop tak terbatas) dan file akan tumbuh juga.
sumber
%0
adalah perintah yang digunakan untuk menjalankan skrip, yang mungkin tidak memiliki.BAT
ekstensi. Anda dapat menggunakan%~nx0
untuk mendapatkan nama file lengkap dari file batch..bat
dieksekusi. Jika nama filenya adalahexecute.bat
, Anda dapat memasukkan salah satuexecute
atauexecute.bat
. Keduanya akan bekerja..bat
ekstensi untuk mengeksekusi tetapi Anda dapat meninggalkan ekstensi ketika Anda jalankan (ketika anda mengetik perintah tanpa ekstensi, Windows mencoba.com
,.exe
maka.bat
dalam urutan itu). Jika nama file adalahhello.bat
, maka>> %0
akan menulis file bernamahello
, yang bukan yang aslihello.bat
(dan tidak dapat dieksekusi).PYG (6)
Mencetak kode sumbernya sendiri, dipisahkan oleh baris baru. Generasi kedua adalah
Dan seterusnya.
sumber
MINYAK , 83 byte
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.sumber
Tolong, WarDoq! , 1 byte.
Cetakan
Hello, World!
.Karakter selain H adalah kode sumber yang valid (dan aman) (yang mencetak varian Hello World lainnya).
sumber