Dalam waktu saya di PPCG, saya perhatikan bahwa masalah quine dan masalah polyglot cukup populer. Juga, meta-solusi untuk masalah, yaitu skrip yang menghasilkan program yang merupakan solusi untuk masalah, cenderung mendapatkan banyak umpan balik positif dari masyarakat. Karena itu, saya telah menciptakan tantangan ini, yang mengimplementasikan ketiga ide ini.
Tugas Anda kemudian, pembaca dan penggemar kode-golf , adalah membuat sesingkat mungkin sebuah skrip yang dapat berjalan dalam dua bahasa A dan B untuk menghasilkan quines untuk A dan B. Ketika program Anda dijalankan dalam bahasa A, itu harus menghasilkan program yang merupakan quine dalam bahasa B tetapi tidak dalam bahasa A dan sebaliknya. Bahasa A dan B dapat menjadi versi yang berbeda dari bahasa yang sama, asalkan Anda ingat bahwa quine yang dihasilkan seharusnya hanya berfungsi di salah satu versi.
Ingatlah bahwa celah standar harus dianggap tertutup dan hanya quine yang diperbolehkan.
Semoga berhasil, karakter paling sedikit menang!
Jawaban:
CJam 0.6.6 dev / GolfScript,
151412 byteTerima kasih kepada @ jimmy23013 untuk bermain golf 2 byte!
Istirahat akan diperbarui.
Verifikasi
Karena pengiriman melibatkan spasi putih yang signifikan, yang terbaik adalah membandingkan hexdumps.
CJam
CJam mencetak
"`0$~"0$~
dan linefeed tambahan. Cobalah online!Program yang dihasilkan dicetak
"`0$~"0$~
dengan linefeed baris tambahan di GolfScript ( Coba online! ), Tetapi tanpa linefeed di CJam ( Coba online! ).Bagaimana metaquine bekerja
Cara kerja quine
Tidak seperti GolfScript, CJam tidak mencetak linefeed Trailing secara default, jadi ini bukan quine di CJam.
GolfScript
GolfScript mencetak
"`0$~"0$~
, tanpa tertinggal spasi. Cobalah online!Program yang dihasilkan mencetak
"`0$~"0$~
tanpa tertinggal spasi di CJam ( Coba online! ), Tetapi GolfScript menambahkan linefeed ( Coba online! ).Bagaimana metaquine bekerja
Cara kerja quine
Tidak seperti CJam, GolfScript akan menambahkan linefeed ke isi stack, jadi ini bukan quine di GolfScript.
sumber
"0$p"0$~a:n;
.a:n
, tetapi menggunakanp
tidak terpikir oleh saya.CJam / Fission, 22 byte
Cobalah di CJam. Cobalah dalam Fisi.
Di CJam, ini mencetak quine Fission standar :
Coba kueri Fisi.
Dalam Fission, ini mencetak
"
varian-tanpa-quine standar CJam:Coba quine CJam.
Ini juga berfungsi untuk 22 byte (mencetak quines yang sama):
Penjelasan
Di CJam:
Jadi pada akhir program, tumpukan berisi string
"'!+OR"
dan karakter"
, yang keduanya dicetak secara implisit.Dalam Fission, aliran program dimulai
R
dengan atom yang berjalan dengan benar.'"
hanya mengubah massa atom)
,,5
dan-
diabaikan karena berbagai alasan. Kemudian atom memasuki mode cetak di"
dan cetak{'_'~}_~
.;
menghancurkan atom dan menghentikan program.sumber
{'_'~}
Clojure / Common Lisp, 274 bytes
Beberapa spasi ditambahkan untuk dibaca
Pada dasarnya mendefinisikan makro yang mengembalikan quine di Clojure. Clojure membutuhkan parameter untuk definisi makro yang disediakan sebagai vektor (
[]
) sedangkan Common Lisp (untungnya) mengabaikannya. Setelah itu kami berbeda 2 bahasa dengan mengevaluasi'()
yang sama dengannil
dan dengan demikian falsey dalam Common Lisp dantrue
dalam Clojure. Kemudian kami melakukan manipulasi string menggunakan Clojure yang Common Lisp bahkan tidak mencoba untuk mengevaluasi seperti yang terjadi diif
cabang lain . Clojure di sisi lain mencoba untuk memeriksa apakah cabang lain setidaknya benar sebelum mengeksekusi sehingga harus digunakan dieval
sana untuk keduanya benar di Clojure dan menghasilkan string yang benar di Common Lisp.Catatan: hanya mengembalikan dua string yang berbeda mungkin lebih pendek tetapi kemudian tidak akan berbeda dengan tantangan polyglot tentang menghasilkan string yang berbeda dalam bahasa yang berbeda. ¯ \ _ (ツ) _ / ¯
Clojure sumber asli berjalan: https://ideone.com/SiQhPf
Sumber asli Lisp biasa dijalankan: https://ideone.com/huLcty
Keluaran Clojure:
((LAMBDA (S) (PRINT (LIST S (LIST 'QUOTE S)))) '(LAMBDA (S) (PRINT (LIST S (LIST 'QUOTE S)))))
Output Lisp umum:
((fn [s] (print (list s (list (quote quote) s)))) (quote (fn [s] (print (list s (list (quote quote) s))))))
Output Clojure berjalan di Common Lisp: https://ideone.com/T1DF7H
Begitu juga sebaliknya: https://ideone.com/Fezayq
sumber
Jelly / GolfScript,
1816 byteVerifikasi
Menguji semua program yang terlibat dengan stream byte yang tepat hanya dapat dilakukan secara lokal.
Jeli
Dengan halaman kode Jelly , programnya terlihat sebagai berikut.
Ini mencetak ( Coba online! )
yang merupakan quine di GolfScript ( Coba online! ), tetapi kesalahan parser di Jelly ( Coba online! )
GolfScript
Dalam bahasa Latin-1, program ini terlihat sebagai berikut, dengan karakter DEL yang tidak dapat dicetak antara
}
danþ
.Ini mencetak ( Coba online! )
atau, divisualisasikan dengan halaman kode Jelly,
yang merupakan quine di Jelly ( Coba online! ), tetapi hanya mencetak linefeed di GolfScript ( Coba online! )
sumber
”ṘṘ
, jadiØV
harus pergi, kan?JavaScript / C 278 byte
Dengan 278 byte yang mengejutkan:
Kuota C:
int main(){char*A="int main(){char*A=%c%s%c;printf(A,34,A,34);}";printf(A,34,A,34);}
Kueri JavaScript:
A='A=;B=String.fromCharCode(39);console.log(A.slice(0,2)+B+A+B+A.slice(2));';B=String.fromCharCode(39);console.log(A.slice(0,2)+B+A+B+A.slice(2));
sumber
Befunge / Fission, 35 byte
Cobalah di Befunge | Cobalah dalam Fisi
Di Befunge ini menghasilkan quine Fission :
Dalam Fisi ini menghasilkan quine Befunge :
sumber
Python / Retina,
70656466 byteSaya menggunakan strategi yang sama yang saya gunakan dalam polyglot Python / Retina saya sebelumnya .
Coba dengan Python | Coba di Retina
#
adalah komentar dengan Python, jadi ia hanya mencetak quina Retina dengan Python. Di Retina, tahap pertama (2 baris) tidak melakukan apa-apa, karena tidak#
akan ditemukan input. Tahap selanjutnya tidak menggantikan apa pun dengan dasar quine Python. Tahap ketiga menggantikan setiap titik koma dengan#print _%
bagian. Tahap terakhir menghapus semua#
.Quine in Retina:
Quine dalam Python:
Quine yang digunakan dapat dilihat dalam tantangan ini . Retina quine adalah kesalahan dalam Python, dan quine Python tidak memiliki output di Retina.
sumber
Python 3 / Python 2, 62 byte
Cobalah dengan Python 2 , Python 3 .
Berdasarkan quine Python di sini . Faktor yang membedakan antara dua versi adalah apa yang mereka lakukan dengan
int(-1/2)
: di Python 2,/
adalah pembagian integer (pembulatan ke bawah), dengan hasil-1
; dalam Python 3,/
adalah pembagian titik mengambang (-0.5
), yangint
dipotong menjadi0
.Kami membangun string
_
dalam tiga bagian.'_=%r;print(_%%_['
dan'int(-1/2):])'
selalu sama. Bagian yang menarik adalah'~'*-~int(-1/2)
:-~int(-1/2)
is0
, dan tilde tidak ditambahkan ke string;-~int(-1/2)
adalah1
, dan tilde ditambahkan ke string.Jadi, Python 2 menampilkan quine Python 3
dan Python 3 menampilkan quine Python 2
Di setiap versi, ekspresi di dalamnya
[ :]
dievaluasi menjadi0
, yang membuat slice menyertakan seluruh string, sedangkan dalam bahasa yang salah dievaluasi-1
, yang membuat slice hanya menyertakan karakter terakhir, memotong output sehingga bukan quine penuh.sumber
Brain-Flak , brainfuck
46174009 byteCobalah online!
Cobalah online!
Penjelasan sedang dalam perjalanan saya masih bermain golf ini
sumber