Tulis program yang akan menghasilkan keluaran "benar" jika input cocok dengan kode sumber program, dan yang menghasilkan output "salah" jika input tidak cocok dengan kode sumber program.
Masalah ini dapat digambarkan sebagai terkait dengan quines, karena program harus dapat entah bagaimana menghitung kode sumbernya sendiri dalam proses.
Ini adalah kode golf: aturan standar berlaku. Program Anda tidak boleh mengakses file khusus apa pun, seperti file kode sumbernya sendiri.
Sunting: Jika Anda memilih, benar / salah dapat diganti dengan Benar / Salah atau 1/0.
Contoh
Jika kode sumber program Anda adalah bhiofvewoibh46948732));:/)4
, maka inilah yang harus dilakukan oleh program Anda:
Input (Stdin)
bhiofvewoibh46948732));:/)4
Output (Stdout)
true
Memasukkan
(Anything other than your source code)
Keluaran
false
code-golf
quine
decision-problem
PhiNotPi
sumber
sumber
true
/false
output persyaratan yang kuat, atau apakah variasi (True
/False
,1
/0
) dapat diterima juga?Jawaban:
JavaScript: 26
Saya tidak tahu apakah file JavaScript benar-benar memenuhi syarat sebagai "program".
sumber
.toString()
metode dalam JavaScript .f=s=>s=='f='+f
JavaScript ES6, 9 karakter
Ini adalah satu-satunya cara (golf) untuk melakukannya di JS. ES6 hanya membuatnya mengambil karakter yang lebih sedikit
Jalankan ini di Konsol Web Firefox terbaru:
Contoh penggunaan:
sumber
f=x=>f==x
dan tidakx=>f==x
, sedangkan versi Denys Séguret memang memeriksa seluruh sumber.f=x=>f==x
function f()
f.toSource()
"x=>f==x"
(pada dasarnya mengevaluasi kode di konsol dan kemudian mengevaluasif.toSource()
di browser yang mendukung metode itu.x=>f==x
) EDIT: nevermind, f dirujuk di dalam fungsiHaskell, 72 karakter
Catatan: tidak ada karakter end-of-line di akhir skrip.
sumber
GolfScript, 11 karakter
Tanpa
=
, kode ini akan menjadi quine yang menghasilkan kode sumbernya sendiri sebagai string. Itu=
membuatnya membandingkan string ini dengan input dan outputnya1
jika cocok dan0
jika tidak. Perhatikan bahwa perbandingannya tepat - khususnya, baris baru yang tertinggal di akhir input akan menyebabkannya gagal.Penjelasan:
{ }
adalah kode blok literal dalam GolfScript;.
menduplikasi blok kode ini, dan~
mengeksekusi salinan kedua (meninggalkan yang pertama di tumpukan);`
menguatkan blok kode, dan".~"
+ menambahkannya.~
;=
bandingkan string yang dihasilkan dengan input (yang didorong pada stack sebagai string oleh penerjemah GolfScript sebelum program dimulai) dan kembali1
jika cocok dan0
jika tidak.sumber
Perl,
Infinity4138 KarakterPembaruan: Program tidak lagi berakhir dengan baris baru, yang berarti akan berfungsi dengan benar pada file multi-line. Anda harus memasukkan input dari STDIN tanpa menekan enter. Di Windows saya hanya bisa melakukan ini dengan membaca dari file.
Solusi asli:
sumber
(cat id.pl; echo foo)|perl id.pl
> <> , 68 byte
Ikan suka makan kotoran ikan. Sekarang kita tahu mereka bisa membedakan mereka dari teman mereka.
Anda dapat mencobanya secara online !
sumber
1
awalan kode apa pun jugaPython 2, 55
Diuji:
a='a=%r;print a%%a==raw_input()';print a%a==raw_input()
->True
(anything else)
->False
sumber
a='a=%r;print a%%a==raw_input()';print a%a==raw_input()
.raw_input()
dengan__import__('sys').stdin.read()
.print raw_input()==open(__file__).read()
? Ini hanya 40 byte, menggunakanraw_input()
pendekatan Anda , tetapi membaca kodenya.Your program must not access any special files, such as the file of its own source code.
JavaScript ES6,
1614 byteMinus dua byte terima kasih kepada Neil.
31 byte jika kita harus mengambil input melalui prompt.
38 byte jika kita harus mengeluarkan melalui peringatan.
Ini adalah cara yang tepat untuk melakukannya, karena jawaban Pengoptimal tidak menerima seluruh kode sumber.
sumber
'$='+$
.;$()
karena pemanggilan fungsi adalah bagian dari quine. Ini juga berarti bahwa Anda harus beralihprompt
ke akun untuk input.$=_=>prompt()==`$=${$};$()`;$()
Node.js: 54
Anda mengujinya dengan menyimpannya ke file
f.js
(nama yang tepat tidak penting) dan menggunakan(yang menghasilkan false) atau
(yang menghasilkan true)
Saya juga membuat versi berbeda berdasarkan eval:
Sekarang di 72 karakter, saya akan mencoba untuk mempersingkat ketika saya punya waktu.
sumber
Smalltalk (dialek Pharo 2.0)
Terapkan metode 41 karakter ini di String (format jelek untuk kode-golf):
Kemudian evaluasi ini di Workspace (printIt cara Smalltalk tradisional)
Input tidak dibaca dari stdin, itu hanya sebuah String yang kami kirim pesan (apa lagi program bisa di Smalltalk?):
Tapi kami curang, sourceCode membaca beberapa file sumber ...
Berikut ini varian dengan 51 karakter yang tidak:
Dan uji dengan:
Jika sebuah String di dalam Workspace tidak dianggap sebagai input yang valid, maka mari kita lihat bagaimana menggunakan beberapa Kotak Dialog dalam 116 karakter.
Cukup evaluasi kalimat ini:
Karena format dekompilasi menyertakan CR dan TAB, kami mengubahnya denganSeparatorsCompacted.
Lalu kita lewati 7 karakter pertama yaitu 'doIt ^'
Akhirnya varian 105 karakter menggunakan stdin, cukup interpretasikan kalimat ini dari baris perintah, hanya untuk merasa lebih umum:
sumber
flex - 312 karakter
Mungkin bisa dibuat lebih pendek, tetapi ia bekerja dengan input multi-line (diperlukan karena kode sumber adalah beberapa baris) dan bahkan untuk input yang berisi program sebagai substring. Tampaknya banyak jawaban sejauh ini gagal pada satu atau keduanya.
Kompilasi perintah:
flex id.l && gcc -lfl lex.yy.c
sumber
D (133 karakter)
sumber
JavaScript (V8), 35
panggilan
i()
dan itu akan meminta inputsumber
+[]
harus opsional sebagai JS akan auto-jenis-cast ituGolfScript - 26
Terinspirasi dari http://esolangs.org/wiki/GolfScript#Examples
Versi lain:
Sayang sekali itu
\
adalah swap dan melarikan diri ...sumber
Python 2, 47 byte
Quine sederhana dengan cek yang ditambahkan.
sumber
print
adalah fungsi adalah Python 3. Anda harus melakukanprint(_%%_==input())';print(_%_==input())
atau mengubahnya ke Python 2.CJam , 12 byte
Cobalah online!
Penjelasan
Ini hanya menggunakan kerangka quine CJam standar.
Apa yang dilakukan oleh blok:
sumber
Tcl, 111 karakter
sumber
Perl, 52 char
sumber
Python, 187 byte
Hati-hati untuk tidak menambahkan baris baru di akhir. Seseorang dengan Python-fu yang lebih baik mungkin bisa mempersingkatnya.
sumber
C=chr
untuk menjatuhkan beberapa byte. Juga, persingkat nama variabelcode
.Sekam , 11 byte
Cobalah online!
Penjelasan
Penjelasan tersebut digunakan
¨
untuk membatasi string (untuk menghindari pelarian yang tidak dapat dibaca):Dengan menghapus fungsi,
=
Anda dapat memverifikasi bahwa itu memang hanya cocok dengan sumber itu sendiri.sumber
> <> , 24 byte
Cobalah online!
Pembungkus string literal diikuti dengan memeriksa apakah input identik dengan stack, dengan pemeriksaan akhir bahwa tidak ada lagi input.
sumber
Jelly , 10 byte
Cobalah online!
sumber
05AB1E , 15 byte
Memodifikasi quine default
0"D34çý"D34çý
dengan menambahkanQ
(periksa kesetaraan dengan input implisit)Cobalah online.
Penjelasan:
Alternatif keren 15 byte yang disediakan oleh @Grimy :
Cobalah online.
Penjelasan:
sumber
187745012D27BJQ
adalah dasi.C -
186176 karakterSatu liner:
Dengan spasi putih (perhatikan bahwa ini merusak program):
sumber
Python 2 , 40 byte
Cobalah online!
sumber
Stax , 26 byte
Jalankan dan debug itu
sumber
q, 8 byte
Kembalikan boolean pada input yang cocok dengan referensi mandiri .zs
sumber
Runic , 11 byte
Cobalah online!
TIO mendapat pembaruan dan tidak ada lagi masalah membaca input (dan tidak lagi memerlukan spasi spasi tambahan).
Penjelasan
Solusi JoKing:
Penjelasan
sumber
r
kebalikannya"
di sebelah kiri adalah satu-satunya tempat yang benar-benar bisa pergi, karena memilikinya di tempat lain mempersulit. (Tapi baru saja saya harus menjalankannya di debugger saya untuk melihat apa yang dilakukannya ...)R , 54 byte
Cobalah online!
body
mendapatkan tubuh fungsi (membaginya sedikit, jadi itubody(f)[3]
adalah segalanya daripaste0
seterusnya). Menariknya,body
memformat ulang kode, menambahkan spasi setelah koma, dll. Ini adalah kasus yang jarang terjadi pada jawaban golf R dengan spasi setelah koma.Ini berfungsi karena
body(f)
merupakan objek bertipelanguage
, dan adaas.character
metode untuk tipe ini. Di sisi lain,f
danargs(f)
bertipeclosure
, dan tidak dapat dikonversi ke tipe karakter sejauh yang saya tahu. Tolong jangan tanya saya apa jenis bahasa untuk ...sumber
PowerShell, 28 byte
Sangat mirip dengan jawaban JavaScript ini , gunakan penyedia fungsi .
Contoh
sumber