Saya ingin membodohi seorang teman dengan memberinya quine yang hampir berhasil, tetapi menjadi ceroboh dan ceroboh.
Buat program yang, ketika dijalankan, akan menampilkan program, tetapi satu karakter mati. Salah satu karakter dapat ditambahkan, dihapus atau keduanya (satu karakter berubah). Namun hanya satu karakter.
Skor Anda akan (length of your program) / floor(sqrt(number of times the program almost quines))
(Di mana / 0
tak terhingga)
number of times the program almost quines
adalah berapa kali program Anda berjalan sementara hanya mengubah satu karakter di stdout. Program Anda mungkin tidak menerima input. Mungkin juga tidak mencetak program yang sudah dicetak.
Anda juga mungkin tidak menambahkan karakter yang sebelumnya Anda tambahkan sebelumnya, atau menghapus karakter dari indeks yang sama. Misalnya, jika Anda telah menambahkan 1
sebelumnya, dan Anda menambahkan 1
lagi, di situlah number of times the program almost quines
berhenti. Jika Anda menghapus karakter pertama, Anda tidak dapat menghapus karakter pertama lagi. Jika Anda mengubah karakter ketiga menjadi 2
, Anda tidak dapat menambah 2
atau menghapus karakter ketiga.
Jawaban:
CJam, 0,000884
Di sini, menunjukkan karakter yang tidak patut dicetak dengan titik kode 128. Cobalah online.
Ide
Pendekatan ini menambahkan semua karakter UCS (spesifikasi asli) dengan titik kode antara U + 4000000 dan U + 7FFFFFFF ke string awalnya kosong yang mengikuti blok kode.
Kami memilih UTF-8 , yang mengkodekan setiap karakter ini menggunakan string 6 byte sebagai berikut:
Dengan demikian, kita dapat menyandikan karakter ke - n dalam kisaran ini dengan menghitung 6 digit paling tidak signifikan di basis 64 dan menambahkan 252 ke yang paling signifikan dan 128 ke yang tersisa.
Mencetak gol
Ada
2 ** 31 = 2,147,483,648
6 byte UTF-8 karakter dan panjang kode asli adalah 39, jadi angkanya adalah39 / floor(2 ** 15.5) = 39 / 46340 = 0.0008416055243849806
.Bagaimana itu bekerja
sumber
CJam, 46 byte, 65504 tambahkan, 65505 del, Skor 0,127424
Uji di sini.
Bentuk dasar adalah quine CJam umum standar. Untuk "hampir quine", ada komentar
e#
di akhir blok quine, di mana saya dapat dengan bebas menambahkan karakter tanpa mempengaruhi kode. Perhatikan bahwa komentar pada awalnya berisi satu ruang.Program ini terus menambahkan karakter ke bagian depan komentar, mulai dari
!
dan kemudian berjalan dalam urutan nilai ASCII. Kode karakter CJam membungkus sekitar setelah 16 jadi pada beberapa titik, ini akan menambahkan byte nol. Setelah itu terjadi, program mulai menghapus byte dari akhir komentar (sehingga posisi karakter yang dihapus selalu berbeda) hingga komentar kosong.sumber
CJam, 19 byte, 65536 tambahkan, 0 del, Skor 0,074219
Lebih sederhana lebih baik.
sumber