Tugas Anda sederhana: Tulis program yang dapat dijalankan dalam dua bahasa. Itu harus quine normal (mencetak kode sumbernya sendiri) dalam bahasa 1, dan harus menjadi quine kesalahan (menghasilkan pesan kesalahan yang identik dengan kode sumbernya sendiri) dalam bahasa 2.
Ini adalah kode-golf , sehingga pengiriman terpendek yang valid (dalam byte) menang.
Aturan:
- Bahasa mungkin serupa secara sewenang-wenang. Superset / versi serupa / dialek serupa tidak dianulir.
- Aturan kueri kesalahan sama dengan yang ada di Buat Kueri Kesalahan! .
code-golf
quine
polyglot
error-message
Buah Esolanging
sumber
sumber
Jawaban:
Befunge-93 (FBBI) / C (tcc) , 93 + 62 = 155 byte
Cobalah online !: Befunge-93 , C
Terima kasih kepada randomdude999 untuk mencatat bahwa nama file memerlukan kutipan yang cocok untuk bekerja.
Harus disimpan di bawah nama file
^"\n>#001p#"<>:#,_@#1-8*3:-1*57+55-1*79*57:-1:*77**278\-1:*57$p
, di mana\n
baris baru. Karena itu, TIO untuk C tidak berjalan persis seperti yang dimaksudkan. Diuji untuk bekerja di Lubuntu.Penjelasan (C):
Program gagal dikompilasi, dan tcc dengan senang hati mengeluarkan nama file sebagai bagian dari pesan kesalahannya. Ada beberapa kesalahan kompilasi yang bisa Anda dapatkan, berdasarkan pada awal kode.
^
pada awalnya memberi kitadeclaration expected
, yang pendek dan tidak mengandung karakter bermasalah seperti"
. Di sisi lain, pengembang gcc dan dentang sangat pesimis dan mereka memilih untuk menghasilkan beberapa kesalahan sekaligus, yang tidak terlalu baik, jadi kami tidak menggunakan kompiler mereka.Penjelasan (Befunge-93):
Befunge nyaman untuk quines karena kodenya juga dapat digunakan sebagai data karakter, berkat
"
perintah, yang mengubah mode string. Pada awalnya, kami melakukan beberapa operasi stack yang tidak berguna, kemudian mengeluarkan ap
(menempatkan perintah) yang menempatkan karakter NUL di (0, 1). Kemudian kami merefleksikan penunjuk instruksi ke kiri dan mulai membaca semuanya sebagai string. Ini harus dilakukan ke kiri, karena sifat LIFO stack. Setelah membungkus dan mencapai"
karakter lagi, string berakhir. Perhatikan bahwa karakter NUL menggantikan$
karakter, membuat pembatas di tengah-tengah string. Kami kemudian mendorong 3 angka ke stack dan melompati NUL (karena sayangnya hang interpreter ketika dijalankan sebagai instruksi). Bagian statis dari pesan kesalahan harus dieksekusi di sini. Sebagian besar karakternya adalah no-ops, tetapip
perintah tersebut menggunakan tiga argumen (maka dari itu kami mendorong 3 angka, jika tidak, bagian dari string akan dimakan di sini), dan:
&1
karakter mendorong total 4 nilai ke stack, yang kami lawan dengan instruksi ap
dan$
(pop and discard). Kemudian, beberapa aritmatika dilakukan untuk mendorong kode ASCII^"\n>#001p#"
dan akhirnya sebuah loop mencetak semua nilai pada stack sebagai karakter hingga menemukan karakter NUL dan berakhir.sumber
/
. Saya tidak bisa mengujinya sendiri sekarang.<define>:1: error: missing terminating " character
.Applesoft BASIC / Commodore LCD BASIC , 13 byte
Di Apple] [emulator, tekan RESETtombol untuk masuk ke mode BASIC.
Dalam emulator LCD Commodore, tekan RightArrowEnteruntuk masuk ke aplikasi BASIC.
Di keduanya, jangan mengetikkan
?SYNTAX ERROR
semua huruf besar, karena huruf besar secara otomatis.sumber