Misalkan Anda memiliki 2 bahasa, A
dan B
. String s
adalah semiquine di A
dan B
jika memenuhi kondisi berikut:
s
adalah quine dalam bahasaA
.s
adalah polyglot di dalamA
danB
.- Output dari menjalankan
s
sebagaiB
program adalah string yang berbedas'
, yang merupakan quine inB
.
Tujuan dari tantangan ini adalah untuk menulis semiquine dalam dua bahasa yang berbeda. Ini adalah kode-golf , sehingga kode terpendek menang, dengan jawaban paling awal digunakan sebagai tiebreak.
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.)
Selain itu, kode sumber Anda tidak boleh murni terdiri dari literal (apakah itu string literal, literal numerik, dll.) Dan / atau NOP. Misalnya, `12
adalah polyglot dalam Jelly dan Pyth, tetapi dalam Jelly itu adalah NOP dan numerik literal, jadi itu tidak valid.
Setiap output yang tidak dapat ditekan (seperti pemberitahuan hak cipta, pesan startup / shutdown, atau feed garis trailing) dapat diabaikan dalam output demi validitas quine.
Aturan untuk Polyglots
Dua bahasa yang digunakan harus berbeda. Khususnya:
- Itu tidak boleh versi yang berbeda dari bahasa yang sama (misalnya Python 2 vs Python 3).
- Itu tidak harus dialek berbeda dari bahasa yang sama (misalnya Pascal vs Delphi).
- Satu bahasa mungkin bukan subset dari yang lain (misalnya C vs C ++ 1 ).
- Satu bahasa mungkin bukan turunan sepele dari yang lain (misalnya Matlab vs Oktaf 2 , brainfuck vs boolfuck vs TinyBF vs ShadyAsFuck vs semua turunan brainfuck sepele lainnya).
Aturan Lain-Lain
- Anda mungkin tidak menerima input dari STDIN (atau sumber lainnya). Jika bahasa pilihan Anda harus mengambil input, maka input tersebut harus kosong (string kosong, disalurkan dari
/dev/null
, dll.), Atau output dari program tidak boleh bergantung pada input. - Untuk tantangan ini, Anda harus menulis program yang lengkap. Membutuhkan kode tambahan untuk menjalankan solusi tidak diizinkan (seperti menetapkan dan memanggil fungsi lambda yang ditentukan dalam solusi).
1: Ya saya tahu bahwa C sebenarnya bukan subset dari C ++. Cukup dekat untuk dianggap satu untuk tujuan polyglots, jadi saya menghitungnya untuk tantangan ini.
2: Seperti poin 1 di atas, meskipun Oktaf secara teknis tidak 100% kompatibel dengan Matlab, ia dirancang agar kompatibel, dan cukup dekat sehingga memungkinkan polyglot Matlab / Oktaf akan meremehkan tantangan.