Tulis sebuah program yang, ketika dijalankan dalam bahasa yang berbeda, menghasilkan permutasi byte yang berbeda dari kode dalam setiap bahasa. Kode sumber yang tepat dihitung sebagai satu permutasi.
Di sini "bahasa yang berbeda" dapat berupa versi yang berbeda (Py 2 dan Py 3) atau bendera standar yang berbeda. Output berbeda yang memaksa versi berbeda.
Aturan quine yang tepat berlaku untuk program dalam setiap bahasa. Skor Anda dihitung sebagai (Language count)^6/(Code length in bytes)
, dengan skor yang lebih tinggi lebih baik.
Sampel:
Jika kode Anda AAB
dan berjalan dalam tiga bahasa berbeda kembali ABA
, AAB
dan AAB
, maka nilainya adalah 2^6/3
(hanya satu dari dua yang AAB
dihitung). Tidak apa-apa jika ABA
tidak ada artinya.
AAB
dicetakAAB
dalam bahasa-1 danABA
dalam bahasa-2, saya berasumsi bahwa itu harus quine yang tepat ketika dilihat sebagai program bahasa-1, dan tidak ada batasan lebih lanjut yang melibatkan penafsirannya sebagai program bahasa-2. Apakah itu benar?Jawaban:
Befunge-98 , > <> , Gol> <> , Fission , Wumpus , Kardinal , Beeswax dan Alice Score: 8 6 /88 = 2978,909
Cobalah di Befunge! Coba di> <>! Cobalah di Gol> <>! Cobalah dalam Fisi! Cobalah di Wumpus! Cobalah di Cardinal! Cobalah dalam lilin lebah! Cobalah di Alice!
Verifikasi!
Banyak bahasa 2D, semuanya menyalahgunakan string pembungkus literal. Perbedaan dalam output adalah sebagai berikut:
> <>, Gol> <> dan Befunge-98 semua mencetak kode mundur (kecuali untuk
"
), dengan tiga karakter terakhir di posisi yang berbedaR*"
,,O"*
dan"R*
masing - masing. Lilin lebah juga memiliki kode mundur, tetapi tiga karakter terakhir diselingi di bagian pertama dari output. Alice sebagian besar mundur, kecuali untuk semua karakter yang lolos ('
,\
dan"
) pindah ke depan sebagai gantinya.Wumpus adalah satu-satunya quine yang sebenarnya, Fission menempatkan
"
di akhir kode alih-alih awal, dan Cardinal menempatkan"
antara0
dan5
dekat awal.Bukti permutasi yang berbeda
Penjelasan:
Befunge-98:
> <> dan Gol> <>:
Sejujurnya, saya tidak berbuat banyak di sini. Satu-satunya perbedaan antara eksekusi kedua bahasa ini adalah
@
perintah, yang memutar tiga nilai teratas tumpukan dengan cara berbeda untuk setiap bahasa.Pembelahan:
Wumpus:
Kardinal:
Lilin Lebah:
Alice:
sumber
Perl 5 , Ruby , JavaScript (Chrome), PHP , Python 2 , Python 3 , 1206 bytes, mencetak 6 6 /1206 = 38,6865671641791
Validasi Perl, Ruby, PHP, Python 2 dan Python 3 online!
Catatan : menjalankan program di atas di konsol Inspektur di Chrome (yang muncul untuk mendukung argumen posisi
console.log
) mengembalikan program yang benar.Penjelasan
Ini ternyata jauh lebih lama dari yang saya harapkan dan saya membuat hidup saya sedikit lebih sulit juga, jadi saya cenderung terus mengotak-atiknya. Saya juga ingin menambahkan lebih banyak bahasa, tetapi saya perlu menemukan sesuatu yang tidak masalah
$
sigil ...Ini cukup banyak format Quine standar dimana perhitungan kutipan untuk digunakan sedikit berbeda untuk setiap bahasa: di Ruby
%q&
digunakan, PHP menggunakan'
, JavaScript (Node.js) memanfaatkan`
dan Perl 5 Memanfaatkanq(
...)
. Karena hanya tanda kutip yang berubah, sisa dari program ini masih dapat dieksekusi dan sintaks yang valid dalam setiap bahasa. Python 2 dan 3 dililit program sebelumnya menggunakan"""
untuk Python 2 dan'''
untuk Python 3.Resultan program Perl dan Ruby tidak quines standar, tambahan
q
/%q
s ditambahkan setiap iterasi, namun kembali program pertama dengan benar.Hasilnya adalah:
eval($_=q&
...q&);printf($x=q&
...q&,
...);//#'%`'%`'%`'%`''''''''''''"""
...eval($_=%q&
...%q&);printf($x=%q&
...%q&,
...);//#`'`'`'`'''''''''''''"""
...eval($_=`
...`);printf($x=`
...`,
...);//#%q&'%q&'%q&'%q&'''''''''''''"""
...eval($_='
...');printf($x='
...',
...);//#`q&%`q&%`q&%`q&%''''''''''''"""
......
_="""
...""";
...q="""
...''''''''''''""";print(_.format(Q,_,q[0:-12]+R,"%"))
...
_='''
...''';
...q='''
...""""""""""""''';print(_.format(Q,_,q[0:-12]+R,"%"))
Saya sudah sering mengerjakan ulang ini, saya harap saya tidak melewatkan kunci apa pun di sini. Saya masih memiliki cara untuk pergi ke mana saja di dekat skor Jo King ...
sumber
Jelly , dan M , 2 6 /14 = 4,57
Cobalah di Jelly!
Coba di M!
Ɗṙ@ȮṾ1“Ɗṙ@ȮṾ1”
dalam Jelly1Ɗṙ@ȮṾ“1Ɗṙ@ȮṾ”
dalam M.sumber
Quine
di PHP?Python 2 dan Python 3 , 2 6 /61 = 1,05
Cobalah dengan Python 2!
Cobalah dengan Python 3!
Disimpan 12 byte berkat Jo King.
Cetakan Python 2
Cetakan Python 3
Ini menggunakan fakta yang
1/2
ada.5
di Python 3 dan0
Python 2.sumber
Bash / GolfScript, 72 byte, skor 2 6 /72 = 8/9 (~ 0,888 ...)
Berisi satu ruang trailing tunggal pada dua baris pertama.
Cobalah online di Bash.
Cobalah online di GolfScript.
Cukup modifikasi jawaban @ jimmy23013 untuk tantangan " Write a Polyquine " . Modifikasi yang dilakukan adalah menghapus ruang trailing setelah baris ketiga, dan berubah
\n"+@n.;
menjadi\n "+@n;
.Bash akan mencetak baris 1 dan 2 seperti ini:
Dan GolfScript akan mencetak baris 1 dan 2 seperti ini:
Di sini, program dasar, keluaran Bash, dan keluaran GolfScript masing-masing dengan baris baru diganti dengan
\n
:sumber