Tugas Anda adalah membuat program yang, ketika dijalankan, mengembalikan dirinya sebagai output (ini dikenal sebagai quine). Namun, quine ini harus, ketika disalin n
kali, mengembalikan quine, tetapi dengan masing-masing karakter digandakan di n
waktu tempat , di mana n
adalah bilangan bulat positif.
Jika program asli Anda adalah Derp
:
Derp -> Derp (must return itself as output to be a quine)
DerpDerp -> DDeerrpp
(the "Derp" is copied twice, so each character in the output has to be copied twice)
DerpDerpDerp -> DDDeeerrrppp
etc. etc.
Ingatlah bahwa Anda diizinkan untuk memiliki spasi putih di program "basis" Anda, tetapi mereka dihitung ketika "menjalin". Katakan program Anda
Derp
{newline}
(Baris baru menandakan jalur baru, dan ada ruang tambahan setelah Derp
). Ketika digandakan menjadi
Derp
Derp
{newline}
Anda harus mengeluarkan
DDeerrpp
{newline}
{newline}
Perlu diingat bahwa ada 2
ruang ekstra setelah DDeerrpp
.
Aturan dan Spesifikasi:
- Program Anda harus mengandung setidaknya dua karakter yang berbeda (yang menyiratkan bahwa kode Anda harus sepanjang minimal 2 byte).
- Aturan quine standar berlaku.
Ini adalah kode-golf , jadi kode terpendek dalam byte menang!
code-golf
quine
source-layout
clismique
sumber
sumber
Jawaban:
Fission , 6 byte
Cobalah online! Coba dua salinan! Coba tiga!
Penjelasan
Ini hanya quine standar Fission . Itu terjadi untuk tantangan ini, karena Fission memiliki titik masuk eksplisit ke dalam program. Secara khusus, dengan menduplikasi program, kami menambahkan yang lain
R
yang menambahkan atom lain (instruksi pointer). Karena kode sumber adalah toroidal, kode efektif yang dijalankan tidak berubah sebaliknya - untuk setiap atom, kode tersebut masih terlihat sama secara lokal. Namun, atom dieksekusi dalam langkah kunci, sehingga hal-hal yang mereka cetak disisipkan dan kami mendapatkan salinan tambahan dari setiap karakter dalam output.Demi kelengkapan, saya hanya akan menegaskan kembali bagaimana program itu sendiri bekerja. Terlepas dari apakah kami mengulangi program atau tidak (misalnya
'!+OR"'!+OR"'!+OR"
), setiap atom melihat kode berikut:The
"
mode cetak matikan tali, sehingga program dimulai dengan mencetak'!+OR
langsung ke stdout, yang semua Quine kecuali kutipan. Kemudian'!
setel massa atom ke kode karakter!
,+
tambahkan, yang memberi"
, danO
cetak sekaligus menghancurkan atom. Program kemudian berakhir, karena tidak ada atom yang tersisa.sumber
Python 2.7,
377310304194191 byte!Ini golf pertama saya, jadi saya tidak berharap itu terlalu bagus. Tapi saya pikir konsep dalam solusi yang saya buat agak lucu, jadi saya tetap mempostingnya.
Memang, ini adalah quine; Anda bisa mencobanya di sini . Itu menyalahgunakan modul memeriksa cukup sulit.
Jika kami mencoba menjalankannya dengan kode sumber x2 yang sama, kami mendapatkan output yang tepat juga; Anda dapat mencobanya di sini . x3, x4, dll. semua berfungsi seperti yang diharapkan.
Tidak digabungkan dengan penjelasan:
sumber
inspect
? (lihat posting meta yang relevan ). Di PPCG, kami memiliki definisi spesifik tentang apa yang membuat quine valid, dan 'membaca sumber' biasanya dianggap curang.import threading,inspect as i
dapatimport threading as T,inspect as i
CJam , 19 byte
Cobalah online!
Bagaimana itu bekerja
sumber
RProgN , 66 byte
Ruang kosong yang signifikan menjadi kematian saya
Dijelaskan
Ya Tuhan aku monster ...
Cobalah online!
sumber
~["[%q]F01+`0=`.{0m}R"]F01+`0=`.{0m}R
secara umum berfungsi dengan baik, ini bukan solusi yang valid, karena tidak ada cara untuk meniru ZSS.Perl 5, 107 byte
Tidak Disatukan:
Cobalah online!
sumber
Python 3 ,
122121112 byteCobalah Online: satu salinan | dua salinan | tiga salinan | empat salinan, dengan verifikasi otomatis
Bagaimana itu bekerja
Ini menggunakan standar Python quine: Menyimpan kode yang ingin Anda jalankan dalam variabel (sebagai string); termasuk beberapa logika dalam string itu untuk mencetak dirinya sendiri, segala sesuatu sebelum itu, dan segala sesuatu setelahnya; kemudian jalankan string itu.
Kode yang dieksekusi melalui string s adalah sebagai berikut.
Baris pertama mengimpor modul atexit tanpa syarat , yang memungkinkan kita untuk mendaftar keluar penangan. Mencoba mengimpor modul yang sama beberapa kali tidak mempengaruhi script dengan cara apa pun. Kemudian ia mencoba untuk menambah variabel n , untuk melacak berapa banyak salinan kode sumber yang dieksekusi.
Baris kedua dieksekusi hanya jika yang pertama berisi kesalahan. Ini akan menjadi kasus dalam iterasi pertama, karena n masih belum ditentukan. Dalam hal ini, kita menginisialisasi n sebagai 1 dan mendaftarkan lambda yang melakukan sihir yang sebenarnya.
Handler keluar terdaftar
akan dipanggil tepat sebelum program selesai. Lambda itu sendiri menciptakan string
"s=%r;exec(s);"%s
-%r
menciptakan representasi string dari argumen yang tepat ( s ), yang meliputi segala sesuatu antara tanda kutip tunggal dan tanda kutip sendiri - kemudian iterates atas karakter. Untuk setiap karakter c , kami cukup mencetak n salinan c . Melewatic*n
sebagai nama argumenend
untukprint
sarana yang ada linefeed akan ditambahkan.sumber
CJam , 14 byte
Cobalah online!
Penjelasan
sumber