Tantangan
Dalam tantangan ini, Anda menentukan bahasa sumber S
dan bahasa target T
. Tugas Anda adalah menulis program berikut P
dalam bahasa ini S
. Jika program yang valid Q
dalam bahasa T
diberikan sebagai input P
, itu akan menampilkan program yang valid R
dalam bahasa T
yang tidak memerlukan input dan output Q(R)
, yaitu, program yang Q
diterapkan pada kode sumber R
. Selain itu , Anda harus mempresentasikan dalam jawaban Anda program contoh nontrivial Q
(semakin menarik, semakin baik, meskipun Anda tidak mendapat poin untuk ini), program yang dihasilkan R
, dan output dari R
. Ini kode-golf, jadi kode terpendek untuk P
menang.
Dengan kata lain, ini adalah tantangan tentang menulis "konstruktor quine universal" yang dapat membuat jenis quines umum yang sewenang-wenang.
Klarifikasi
- Sumber dan bahasa target Anda mungkin identik.
- Program
P
harus mengambil satu string sebagai input (dari STDIN atau yang setara), dan output satu string (ke STDOUT atau setara), sebagaimana seharusnya setiap program outputR
. - Program input
Q
juga harus mengubah string menjadi string lain, tetapi bentuknya lebih fleksibel: mereka dapat berupa fungsi string-ke-string, potongan kode yang memodifikasi variabel dengan nama tertentu, potongan yang memodifikasi tumpukan data jika bahasa target Anda memiliki satu, dll. Anda juga dapat membatasi lebih jauh bentukQ
dengan menyatakan bahwa, misalnya, mereka mungkin tidak mengandung komentar apa pun. Namun, Anda harus dapat mengimplementasikan fungsi string-ke-string yang dapat dikomputasi sebagai program inputQ
, dan Anda harus secara eksplisit menyatakan bagaimana mereka berfungsi dan kendala apa lagi yang Anda tempatkan pada mereka. - Program keluaran
R
harus benar-benar quine (digeneralisasi), jadi ia tidak boleh membaca input apa pun (input pengguna, file, dll.) KecualiQ
melakukannya. - Celah standar tidak diijinkan.
Sebuah contoh
Misalkan saya memilih Python sebagai bahasa sumber saya, dan Haskell sebagai bahasa target saya, dan saya selanjutnya mengharuskan program input harus definisi satu-baris dari suatu String -> String
fungsi bernama f
. Jika saya memberikan program string-reversing
f x = reverse x
sebagai input ke program Python saya P
, itu akan menampilkan kode sumber program Haskell lain R
. Program ini mencetak untuk STDOUT kode sumber R
, tetapi dibalik. Jika P
diberikan fungsi identitas
f x = x
sebagai input, program output R
adalah quine.