^"
>#001p#"<>:#,_@#1-8*3:-1*57+55-1*79*57:-1:*77**278\-1:*57$p:1: error: declaration expected
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 kita declaration 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 a p
(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, tetapi p
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 a p
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.