Tugas
Dalam tantangan ini, tugas Anda adalah menulis tiga program yang membentuk semacam sistem quine-like. Mari kita panggil programnya A
, B
dan C
. Jika salah satu program diberi sumber program lain sebagai input, itu akan menampilkan sumber program ketiga. Sebagai contoh, jika A
diberikan B
sebagai input, itu output C
. Jika program yang diberikan sumber mereka sendiri sebagai masukan, mereka akan output tiga senar "three"
, "mutual"
dan "quines"
(tanpa tanda kutip). Dalam semua kasus, mereka dapat menampilkan satu baris tambahan tambahan. Untuk input lainnya, program dapat melakukan apa saja, termasuk crash.
Contoh
Misalnya, bahwa kode sumber A
, B
dan C
yang aSdf
, ghJk
dan zxcV
. Maka program harus berperilaku sebagai berikut.
Source Input Output
--------------------
aSdf aSdf three
aSdf ghJk zxcV
aSdf zxcV ghJk
ghJk aSdf zxcV
ghJk ghJk mutual
ghJk zxcV aSdf
zxcV aSdf ghJk
zxcV ghJk aSdf
zxcV zxcV quines
Aturan dan penilaian
Solusi A
, B
dan C
dapat berupa fungsi atau program lengkap, tetapi harus sepenuhnya independen: tidak ada kode bersama yang diizinkan.
Celah standar dan aturan Quine berlaku, sehingga program tidak dapat mengakses kode sumber mereka sendiri dengan cara apapun.
Skor Anda adalah jumlah byte gabungan A
, B
dan C
skor yang lebih rendah menjadi lebih baik.
public static void main
bagian di suatu tempat.) Atau hanya Anda tidak dapat menulis fungsi yang disebut oleh ketiganya?Jawaban:
CJam,
16514711410899 byteTerima kasih kepada @ MartinBüttner untuk saran yang membantu menghemat 48 byte!
Cobalah online di juru bahasa CJam .
Verifikasi
Ide
Set {0, 1, 2, 3} adalah grup di bawah operasi ^ (eksklusif biner OR), di mana setiap elemen adalah kebalikannya sendiri.
Jika ketiga program identik kecuali untuk karakter pertama (elemen dari {0, 1, 2, 3} ), kita dapat membedakan dan mencetaknya dengan mudah:
Kita mulai dengan XORing digit di awal kode sumber dan input.
Jika hasilnya dalam 0 , sumber dan input cocok.
Jadi, kami mencetak satu dari tiga kata, yang dipilih oleh digit umum ini.
Jika hasilnya bukan 0 , itu adalah elemen {1, 2, 3} yang tidak ada di sumber maupun di input.
Jadi, kami mencetaknya, diikuti oleh sisa input.
Bagaimana itu bekerja
sumber