Metaquine adalah program yang bukan quine, tetapi yang outputnya, ketika dijalankan sebagai program dalam bahasa yang sama, adalah quine.
Tujuan dari tantangan ini adalah untuk menulis metaquine. Ini adalah kode-golf , sehingga kode terpendek menang, dengan jawaban paling awal digunakan sebagai tiebreak. Perhatikan bahwa hanya program lengkap yang dapat diterima, karena definisi quine.
Aturan untuk Quines
Hanya quine sejati yang diterima. Artinya, Anda perlu mencetak seluruh kode sumber kata demi kata ke STDOUT, tanpa :
- membaca kode sumber Anda, secara langsung atau tidak langsung.
- mengandalkan lingkungan REPL yang hanya mengevaluasi dan mencetak setiap ekspresi yang Anda berikan.
- mengandalkan fitur bahasa yang hanya mencetak sumber dalam kasus tertentu.
- menggunakan pesan kesalahan atau STDERR untuk menulis semua atau sebagian quine. (Anda dapat menulis sesuatu ke STDERR atau menghasilkan peringatan / kesalahan non-fatal selama STDOUT adalah quine yang valid dan pesan kesalahan bukan bagian dari itu.)
- kode sumber yang murni terdiri dari literal (apakah itu string literal, literal numerik, dll.) dan / atau NOP.
Setiap output yang tidak dapat ditekan (seperti pemberitahuan hak cipta, pesan startup / shutdown, atau feed garis trailing) dapat diabaikan dalam output demi validitas quine.
Contoh
Mengabaikan aturan yang melarang program literal saja dan quining bawaan, ini akan menjadi metaquine di Seriously:
"Q"
Program ini terdiri dari string tunggal literal "Q"
, yang dicetak secara implisit pada output. Ketika output ( Q
) dijalankan, itu adalah quine ( Q
adalah fungsi quine bawaan).
T
adalah jawaban Pyth 1 byte yang mudah.Jawaban:
CJam, 6 byte
Cetakan
yang merupakan quine terpendek yang tepat di CJam.
Uji di sini.
Penjelasan
Kedua program bekerja persis sama, karena linefeed di dalam quine yang tepat adalah no-op dan hanya disertakan karena lebih mahal untuk menghapusnya dari output. Cara kerja program:
Catatan Samping
Bekerja sama di GolfScript sebagai
yang mencetak
dengan linefeed line, yang pada gilirannya adalah salah satu quines yang paling pendek diketahui.
sumber
Pyth,
1211109 byteMerobohkan satu byte lagi berkat @ Pietu1998.
Ini mencetak
yang merupakan quine di Pyth. Anda dapat mencobanya di sini .
sumber
jN B".[9N
atau.[9N"jN B
. (jN B"jN B
adalah quine sejati lainnya di 9: fungsi identitas dwipecah belah dan bergabung dengan"
.)Fission , 6 byte
Cetakan
Yang merupakan quine Fisi terpendek . Ini bekerja karena perubahan siklik program membuat outputnya sama sekali tidak terpengaruh.
Cobalah online!
sumber
Javascript ES6, 21 byte
Sepele.
sumber
Python 2, 29 byte
Ternyata quine python pendek yang terkenal dengan mudah diubah menjadi metaquine :)
Dan, karena kita tidak perlu khawatir tentang mencocokkan baris baru, metaquine sebenarnya lebih pendek!
sumber
Japt,
1513 byteUji secara online!
Output program ini
yang merupakan quine terpendek yang diketahui di Japt.
Bagaimana itu bekerja
Versi yang tidak bersaing, 11 byte
Saya baru saja menambahkan
é
, perintah "rotate". Begitusekarang menjadi quine yang valid.
sumber
Ruby,
2523Menghasilkan quine Ruby HEREdoc klasik
Solusi lama
Menghasilkan dirinya sendiri kecuali dengan tanda kutip tunggal diganti dengan tanda kutip ganda.
sumber
JavaScript, 50 byte
Berdasarkan quine JS non-sumber-membaca terpendek yang dikenal manusia , tetapi 8 byte lebih baik pendek. Cetakan
yang merupakan quine.
sumber
Ikan (> <>), 17 byte
Ini berfungsi menggunakan quine ikan klasik
"r00g!;oooooooo|
tetapi menambahkan{
yang menggeser seluruh tumpukan ke kiri sehingga program asli bukan quine, tetapi outputnya, saat dijalankan, adalah.Output:
yang merupakan ikan quine!
sumber
Jelly , 3 byte (tidak bersaing)
Sayangnya, atom yang dibutuhkan kira-kira 2 minggu lebih muda dari tantangan.
Metaquine
Cobalah online!
Bagaimana itu bekerja
Quine
Cobalah online!
Bagaimana itu bekerja
Karena yang kedua
Ṙ
mencetak dua karakter pertama (”Ṙ
), ini adalah quine yang tepat menurut definisi kami.sumber
Octopen-Baru, 22 byte
** Jawaban tidak bersaing
Output Ruby
Output yang mana
見
. Yang merupakan quine di Octopen-Baru!sumber
7 , 2 byte, tantangan tanggal bahasa
Program ini berukuran dua byte, dan dapat ditafsirkan dalam beberapa cara; sebagai hex dump:
sebagai codepage 437:
atau, paling mudah, dalam oktal (yang 7 digunakan secara asli):
Cobalah online!
Cara kerjanya sangat sederhana: ini adalah quine 7 standar dengan elemen no-op stack yang disisipkan di antara kedua bagian, untuk membuatnya berbeda (dalam konteks ini,
7
memisahkan elemen tumpukan). (Saya juga bisa memasukkannya di awal723723
,. Saya tidak bisa menafsirkannya di akhir karena trailing 7s seperti trailing whitespace, dan diabaikan dalam encoding yang dikemas, sehingga tidak akan ada bedanya dengan program keluaran. )Kebetulan, program ini adalah palindrom dalam heksadesimal, tapi itu kebanyakan hanya kebetulan.
sumber
Underload, 11 byte
Cukup mudah. Mencetak
(:aSS):aSS
, yang merupakan quine Underload standar.sumber
Brachylog , 12 byte
Cobalah online!
Salah satu dari 132 variasi metaquine dengan panjang yang sama pada quine I yang diterjemahkan dari quine Fatalize's Brachylog v1 (non-cheat). Saya benar-benar menulis program (non-golf, dan keseluruhan konyol) untuk mencetak semuanya:
Cobalah online!
Ada dua bagian dari Quine asli yang bisa diganti inconsequentially:
;?
bisa diubah kegj
ataujḍ
, dan₁
dapat diubah ke₃
,₅
atau₇
. Jika kita menyimpan atau mengubahnya di luar string literal dengan satu cara dan di dalam string literal dengan cara yang berbeda, maka output tidak akan cocok dengan sumbernya, karena varian apa pun yang ada di dalam string literal akan dicetak baik di dalam maupun di luarnya , menghasilkan quine yang bukan program awal dijalankan.;?
,,gj
danjḍ
dapat dipertukarkan karena ketiganya memasangkan string literal dengan dirinya sendiri: karena tata letak program, variabel input?
disatukan dengan string, jadi;?
pasangkan string dengan dirinya sendiri; terlepas dari tata letak,gj
bungkus string dalam daftar yang kemudian digabungkan dengan dirinya sendiri; jugajḍ
menggabungkan string ke dirinya sendiri kemudian membaginya menjadi dua.w
Subskrip bernomor ganjil dapat dipertukarkan karena, meskipun awalnyaw
hanya bisa mengambil 0 atau 1, dengan 0 mencetak input kew
dan 1 mencetak elemen pertama diformat dengan yang kedua, persediaan subskrip untukw
telah tumbuh menjadi sesuatu yang secara eksternal berfungsi sebagai bitfield: bit rendah dari subskrip mengkode apakah itu langsung atau diformat, bit tengah mengkodekan apakah variabel output berasalw
tidak dibatasi atau diatur ke input, dan bit tinggi mengkodekan apakah pencetakan dilakukan segera atau jika itu ditunda sampai akhir program sehingga dapat mengalami backtracking. (Subskrip tersebut adalah kontribusi saya yang pertama dan sejauh ini terbesar bagi Brachylog.) Karena quine dan metaquine tidak menggunakan variabel output dan tidak mundur, keempat subskrip ganjil adalah setara.sumber
Befunge-93, 22 byte
Saya hanya mengambil quine standar, memasukkannya ke dalam tanda kutip, membaliknya (jadi dimuat di tumpukan dengan benar), dan kemudian menambahkan tumpukan-cetak di bagian akhir.
Ini 8 karakter ditambahkan ke quine normal, jadi sangat mungkin ada solusi yang lebih baik.
sumber
Turtlèd , 52 byte (tidak bersaing)
1 kurang dari quine asli
Bekerja dengan cara yang sama, kecuali bahwa ia tidak memiliki karakter pada akhirnya, ketika dijalankan, ia akan memiliki karakter pada akhirnya, yang tidak mempengaruhi output, karena ia menulis # ke #. Perhatikan outputnya sedikit berbeda dengan quine yang saya buat untuk tantangan quine, tetapi kerjanya sama: "tulis #, yang merupakan karakter terakhirnya sendiri, seperti quine yang saya buat. Lihat penjelasannya di sana .
sumber
Lua, 45 byte
Kode quine bukan milikku.
akan menghasilkan
yang merupakan quine. Senang
;
adalah opsional di Lua.sumber
Pushy , 7 byte
Non-bersaing karena bahasa memposting tantangan.
Ini adalah standar quine, tetapi dengan baris baru dihapus. Baris baru tidak berarti apa-apa di Pushy, tetapi pemisah standar operator cetak, dan oleh karena itu diperlukan untuk quine yang sebenarnya.
Cobalah online! Output ini:
Yang merupakan quine Pushy terpendek - sebuah penjelasan tentang cara kerjanya dapat ditemukan di sini .
Atau,
H5-34_"
bekerja untuk jumlah byte yang sama.sumber
Busa , 14 byte
Ini mencetak quine Busa kedua yang dapat ditemukan di sini . Ini sebenarnya lebih pendek karena
.
akan selalu menempatkan spasi di antara setiap elemen, tetapi bilah di token ketiga memungkinkan saya untuk menghilangkan spasi sebelum itu.sumber
Sekam , 6 byte
Cobalah online!
Mencetak quine Husk standar
S+s"S+s"
.Quine menjelaskan:
sumber