Tantangan ini mirip dengan Can You Meta Quine?
Quine adalah program yang menghasilkan dirinya sendiri di STDOUT. Tantangan ini adalah untuk menghasilkan program A yang ketika dijalankan menghasilkan program B pada STDOUT. Program B saat dijalankan menghasilkan program A pada STDOUT. Program A dan B harus ditulis dalam (dan dijalankan dalam) bahasa yang sama. Pertanyaan terkait membatasi A! = B. Itu terlihat terlalu mudah. Jadi untuk pertanyaan ini, kami bersikeras bahwa A dan B adalah barang antik, menggunakan aturan berikut:
- Program A dan B tidak boleh menggunakan karakter yang sama, simpan untuk spasi putih dan pemisah pernyataan, dan karakter tanda baca.
- Program A dan B masing-masing harus mengandung setidaknya satu karakter yang bukan spasi putih atau pemisah pernyataan, atau karakter tanda baca.
- Untuk keperluan aturan 1 dan 2, istilah 'spasi putih' tidak termasuk simbol atau urutan simbol yang dengan sendirinya merupakan pernyataan, operator atau simbol yang ditafsirkan (sebagai lawan dari pemisah). Oleh karena itu dalam bahasa Whitespace, tidak ada spasi putih.
- Pemisah pernyataan adalah elemen sintaksis yang secara konvensional digunakan dalam bahasa untuk memisahkan pernyataan. Ini akan termasuk baris baru dalam python, atau titik koma di Jawa, perl atau C.
- Karakter tanda baca adalah karakter ASCII yang bukan spasi putih atau dalam kelas karakter kata POSIX (yaitu garis bawah bukan tanda baca untuk tujuan ini) - yaitu
ispunct()
akan mengembalikan true, dan bukan_
. - Program A ketika dijalankan harus menghasilkan program (Program B) pada STDOUT-nya, yang ketika dijalankan pada gilirannya menghasilkan Program A.
- Program A dan B harus dalam bahasa pemrograman yang sama.
- Bahasa pemrograman yang digunakan harus benar-benar bahasa pemrograman. Kecuali Anda membuat kasus yang baik sebaliknya, saya akan menyarankan itu harus Turing lengkap.
- Setidaknya satu dari A dan B harus menjalankan setidaknya satu pernyataan dalam bahasa tersebut.
Ini adalah kode golf, jadi jawaban tersingkat menang, skor menjadi panjang program A dalam byte (yaitu panjang program B tidak relevan).
A
dana
dianggap sebagai "karakter" yang berbeda?Jawaban:
GolfScript, 13 byte
Outputnya adalah
yang menghasilkan program awal.
Hitungan byte menyertakan LF yang tertinggal, karena output dari output akan mengandungnya.
Cobalah online.
Bagaimana itu bekerja
GolfScript mencetak konten stack setelah penghentian.
sumber
Programs A and B may not use any of the same characters, save for whitespace and statement separators, and punctuation characters.
1
dan2
merupakan tanda baca.Pascal (731 karakter)
Program A:
Output program B:
Program keluaran A.
sumber
ROT13 ( tidak bersaing lagi setelah pembaruan aturan )
Tidak yakin apakah ini dianggap sebagai bahasa, tapi saya jelas tidak menebusnya. Biasanya jawaban untuk utilitas tertentu seperti
sed
diterima juga. Namun, ini panggilan penilaian, jadi jika tidak masuk hitungan saya akan menghapusnya (adakah diskusi meta di suatu tempat tentang apa yang dianggap sebagai bahasa? Edit: Ada sekarang )Siklus antara
A
danN
:sumber
STDIN
, tidak menjalankan program. Jika Anda berdebat bahwa ini adalah program panjang nol, yang gagal untuk memenuhi aturan 2. Program (dengansed
) adalah apa yang berlalu dised -e
. Jika ini dapat diterima, makacat
akan menjadi quine, dantac
akan menjadi quine dan kuno. Namun, tidak ada yang menghasilkan sumber untukcat
,tac
atau dalam hal inirot13
.rot13
sebagai bahasa pemrograman tampaknya tidak memenuhi definisi wajar 'bahasa pemrograman', dan tidak menafsirkan apa pun. Saya akan mengubah pertanyaan untuk membuatnya lebih jelas.