(Terinspirasi oleh komentar ini pada pertanyaan lama.)
Latar Belakang
Sebuah Quine kesalahan (juga dikenal sebagai "Quine Kimian") adalah sebuah program yang, ketika dikompilasi atau menjalankan, menyebabkan compiler / interpreter / runtime untuk mencetak pesan kesalahan yang memiliki teks identik dengan program itu sendiri, dan tidak ada lagi. Untuk keperluan tantangan ini, kami mendefinisikan "kesalahan" secara luas, untuk memasukkan peringatan juga.
Tugas
Dalam tantangan ini, kami sedang mencari quine yang juga merupakan quine kesalahan. Ketika dijalankan, program harus mencetak kode sumbernya sendiri secara normal (mis. Bukan sebagai pesan kesalahan / peringatan); ini harus quine yang tepat (yaitu beberapa bagian dari program harus menyandikan bagian yang berbeda dari output). Selain itu, mengkompilasi dan menjalankan program juga harus menyebabkan kode sumber program - dan tidak ada yang lain - yang akan dicetak sebagai pesan kesalahan atau peringatan oleh implementasi. (Perhatikan bahwa ini berarti Anda tidak akan dapat menggunakan kesalahan waktu kompilasi, dalam bahasa yang mencegah program untuk mengeksekusi secara normal.) Jadi dengan kata lain, kode sumber program akan dicetak dua kali, sekali melalui setiap metode.
Klarifikasi
- Dalam kebanyakan kasus, akan jelas apa yang merupakan dan bukan pesan kesalahan / peringatan; kami tidak membedakan antara keduanya di sini. Dalam kasus yang ambigu, tentukan pesan kesalahan / peringatan sebagai teks apa pun yang dihasilkan oleh implementasi: 1. sebagai konsekuensi dari sesuatu selain mengeksekusi perintah (atau apa pun yang setara terdekat dalam bahasa); atau 2. itu bukan bagian dari input ke perintah yang menghasilkannya sebagai output.
- Bagian kesalahan / peringatan dari quine tidak perlu menjadi quine yang tepat (meskipun dalam kebanyakan kasus itu adalah kebetulan, karena sebagian besar pesan kesalahan dan peringatan mengandung sejumlah besar teks tetap).
- Ini dapat diterima untuk program untuk menghasilkan beberapa kesalahan / peringatan, yang membentuk sumber program ketika disatukan. Tidak dapat menerima kesalahan / peringatan keluaran yang tidak muncul di sumber.
- Tidak seperti dalam banyak tantangan, saklar yang diberikan kepada kompiler, dan nama file program, cenderung sangat relevan dalam tantangan ini. Mengingat bahwa tantangannya tidak mungkin terjadi sebaliknya, saya bersedia menjadi fleksibel di sini, walaupun jika Anda menjalankan implementasinya dengan cara yang tidak biasa, ingat bahwa aturan PPCG mengenakan penalti byte untuk melakukannya (sama dengan jumlah karakter tambahan yang Anda perlu menambahkan pada baris perintah melalui cara "normal" terpendek untuk menjalankan program), dan dengan demikian Anda harus menentukan ukuran penalti dalam posting Anda. (Misalnya, jika penerjemah yang Anda gunakan membaca program dari file, dan tidak memiliki batasan khusus pada nama file, cara normal terpendek untuk menjalankan program adalah dari file dengan nama file 1 karakter; dengan demikian,
- Versi kompiler / juru bahasa yang Anda gunakan mungkin relevan, jadi sebagai bagian dari kiriman Anda, harap sebutkan kompiler atau juru bahasa tertentu tempat program Anda bekerja, dan versi mana yang diperlukan. (Misalnya, pengiriman C mungkin menyatakan "C (gcc 6.2.0)" di header.)
- Perhatikan bahwa tugas ini mungkin tidak dimungkinkan dalam semua bahasa. Dalam bahasa di mana itu, metode termudah kemungkinan akan menemukan pesan kesalahan atau peringatan yang memungkinkan untuk menyesuaikan beberapa bagian teks (melalui mengubah nama sesuatu yang dikutip dalam pesan; nama file adalah pilihan umum di sini, tetapi bukan satu-satunya). Saya akan sangat terkesan (dan terkejut) jika seseorang menemukan cara untuk melakukan ini hanya menggunakan pesan kesalahan dan peringatan yang teksnya sudah diperbaiki.
Kondisi kemenangan
Ini adalah tantangan kode-golf , jadi entri dianggap lebih baik jika memiliki jumlah byte yang lebih kecil. Dengan demikian, begitu program Anda berfungsi, Anda ingin mengoptimalkannya untuk menurunkan jumlah byte sejauh mungkin. (Namun, jangan berkecil hati jika sudah ada entri yang lebih pendek, terutama jika itu dalam bahasa yang berbeda; yang benar-benar kita cari di sini adalah untuk mempersingkat algoritma atau ide tertentu di balik program sebanyak mungkin, tetapi melihat banyak solusi dalam bahasa yang berbeda atau yang mengandalkan prinsip yang berbeda selalu bermanfaat.)