A Quine Rapuh
Quine rapuh adalah quine yang memenuhi properti setiap substring yang dibuat dengan menghapus satu karakter, ketika dievaluasi, menghasilkan kesalahan.
Sebagai contoh. Jika program Anda asdf
adalah quine, maka agar rapuh, program berikut ini harus salah:
sdf
adf
asf
asd
Program Anda (dan semua substringnya) harus sepenuhnya deterministik, dan harus dalam bahasa yang sama. Suatu program yang jatuh ke dalam infinite loop (yaitu, gagal untuk mengakhiri), bahkan jika pada akhirnya tidak menghasilkan kesalahan dianggap "menghasilkan kesalahan" untuk keperluan tantangan ini.
Celah standar berlaku, termasuk pembatasan quine yang biasa (mis. Tidak bisa membaca kode sumber sendiri).
Misalnya, print("foo")
tidak rapuh. Semua substring ini harus salah:
rint("foo")
pint("foo")
prnt("foo")
prit("foo")
prin("foo")
print"foo")
print(foo")
print("oo")
print("fo")
print("fo")
print("foo)
print("foo"
Yang tidak salah adalah:
print("oo")
print("fo")
print("fo")
Jadi tidak rapuh.
Catatan penting tentang quines
Dengan konsensus , segala kemungkinan quine harus memuaskan ini:
Harus dimungkinkan untuk mengidentifikasi bagian dari program yang mengkodekan bagian yang berbeda dari program. ("Berbeda" artinya kedua bagian muncul di posisi yang berbeda.)
Lebih lanjut, quine tidak boleh mengakses sumbernya sendiri, secara langsung atau tidak langsung.
Contoh
Karena saya menganggap fungsi JavaScript # toString sebagai "membaca kode sumbernya sendiri", saya tidak mengizinkannya. Namun, jika saya tidak melarangnya, ini adalah quine rapuh dalam JavaScript:
f=(n=b=`f=${f}`)=>(a=(n)==`f=${f}`,n=0,a)&(n!=b)?b:q
Penguji
Berikut adalah program yang, mengingat kode sumber program Anda, menghasilkan semua program yang harus salah.
let f = (s) =>
[...Array(s.length).keys()].map(i =>
s.slice(0, i) + s.slice(i + 1)).join("\n");
let update = () => {
output.innerHTML = "";
output.appendChild(document.createTextNode(f(input.value)));
};
input.addEventListener("change", update);
update();
#output {
white-space: pre;
}
#input, #output {
font-family: Consolas, monospace;
}
<input id="input" value="print('foo')">
<div id="output"></div>
sumber
Jawaban:
Burlesque ,
322825 byteCoba di sini.
Jadi sebagian besar instruksi dalam Burlesque adalah 2 karakter. Dan jauh lebih mudah untuk menulis quine di Burlesque daripada di Marbelous.
Je!
atau^^e!
sarana_~
dalam CJam.sumber
Python 3, 45 byte
Beralih ke Python 3 agar baris baru dapat dengan mudah dihapus.
Saya mulai dengan struktur bodoh yang memiliki 2 variabel, bukan 1, tetapi beralih ke 1 variabel hanya membuatnya 4 byte lebih pendek.
- (4 + 3) byte oleh Dennis.
sumber
exec
struktur Anda dengan%
trik saya , adac='print(end=len(c)%5*"c=%r;exec(c)"%c)';exec(c)
untuk 48 byte.c='print(end="c=%r;exec(c"%c+c[8*4])';exec(c)
menghemat 3 byte lagi.Python,
91/9267 byteIni sangat menyenangkan!
Sekarang saya tahu tentang menegaskan:
Jika char dari string dihapus, nyatakan kesalahan. Saya akan melakukan ini lebih cepat jika saya tahu fitur ini, tegas.
sumber
Python 2,
515046 byteVerifikasi di Ideone .
sumber
#0
).C #, 145 byte
Saya belum pernah menulis quine di C # sebelumnya, tetapi skor yang lebih tinggi lebih baik di golf, bukan? :)
Infinite loop jika char dihapus dari string atau digit dari magic const 79. Menghapus char lainnya menghasilkan kesalahan kompilasi.
Tidak Disatukan:
sumber
JavaScript, 90 byte
Bekerja di konsol Firefox 48, dan harus bekerja di lingkungan lain dengan
uneval
danconsole.log
. Rincian kesalahan:sumber
Python 2, 59 byte
Ini melempar a
ZeroDivisionError
jika 0, 3, atau karakter dihapus dari string. Menghapus karakter yang berbeda akan menghasilkan aNameError
atau aSyntaxError
.sumber
Pohon Pir , 50 byte
Cobalah online!
Bukan jawaban terpendek, tetapi jawaban yang cukup komprehensif; penghapusan karakter apa pun dari program ini menyebabkannya gagal melakukan checksum, sehingga penerjemah A Pear Tree bahkan tidak akan mencoba menjalankannya. (Misalnya, Anda mendapatkan kesalahan jika Anda menghapus trailing newline.) Ini
;#f+QF>
digunakan untuk memastikan bahwa program secara keseluruhan memiliki CRC-32 dari 0 (danf+QF>
merupakan salah satu dari tiga kemungkinan string 5-byte yang dapat ditempatkan di komentar untuk mencapai itu ketika tinggal di ASCII; menggunakan ASCII penting di sini karenarepr
akan gagal untuk pulang pergi dengan benar kalau tidak).sumber