Tugas Anda adalah membuat program terpendek (A) yang menampilkan program lain (B) dengan byte paling unik, yang pada gilirannya menghasilkan program asli (A). Pada dasarnya, Anda bermain golf setengah dari sepasang program ouroboros (alias quine iterating periodik) dan bowling setengah lainnya. A dan B mungkin dalam berbagai bahasa.
Aturan dan Penilaian
Skor akhir Anda adalah <number of unique bytes in B> / <number of bytes in A>
. Kemenangan skor tertinggi. Perlu dicatat bahwa skor maksimum teoritis adalah 256.
- Program A harus panjangnya paling tidak satu byte
- Program B tidak dapat sepenuhnya terdiri dari no-ops, yaitu setidaknya satu karakter harus mempengaruhi output dalam beberapa cara.
- Aturan standar quine berlaku untuk kedua program. Khususnya, kueri kesalahan tidak diizinkan dalam kedua kasus.
Demi konsistensi format jawaban, mulailah jawaban Anda dengan sesuatu seperti ini:
# <Language for A> & <Language for B>, Score: <B score> / <A score> = <combined score>
code-golf
code-challenge
quine
code-bowling
Beefster
sumber
sumber
aaaaa
memiliki satu byte unik danabcde
memiliki 5 byte unik.Jawaban:
Japt & Japt , Score: 255/38 = 6.71
Program A :
Program B lebih dari 8kB, sangat lama sehingga tautannya terputus, jadi saya tidak akan menempel semuanya. Berikut ini contohnya:
Saya tidak dapat menemukan cara untuk mendapatkan
NUL
byte untuk bekerja, itulah sebabnya program B hanya memiliki 255 karakter unik. Program B pada dasarnya terdiri dari 255 salinan dari satu program, di mana satu byte yang tidak relevan diubah setiap kali, dan 254 eksekusi pertama diabaikan.Untuk penjelasannya, saya akan mulai dengan versi A yang disederhanakan ini sehingga B yang dihasilkan lebih mudah untuk dibahas.
Program ini didasarkan pada quine Japt payload-mampu dasar . String pada awalnya berisi duplikat dari sisa program,
iQ ²
menyisipkan kutipan dan duplikat untuk membuat representasi string dari seluruh program, dan kemudian¯23
memotong sendiri dan semuanya setelahnya. String yang dihasilkan adalah program yang menghasilkan Program A :Saya akan menyebut string ini sebagai
U
.Baris terakhir A menduplikasi
U
beberapa kali dengan perubahan kecil setiap kali. Khususnya, untuk setiap angkaX
dalam rentang[1...3]
itu menghasilkan di"#c" + U
manac
karakter dengan kode sandiX
. Perilaku default Japt adalah untuk mengeluarkan string tersebut tanpa tanda kutip dan dipisahkan dengan koma, jadi ini adalah output dari A Sederhana kami (perhatikan bahwa ada byte yang tidak diinginkan antara masing#
- masing dan"iQ
:Kami akan menyebutnya B Sederhana .
B Sederhana memiliki struktur sederhana, bergantian antara
#c
danU
. Untungnya untuk jawaban ini, masing#c
- masing danU
diperlakukan sebagai dipisahkan oleh koma, dan dalam situasi ini perilaku itu adalah segalanya kecuali yang terakhirU
tidak berpengaruh pada output. Satu-satunya bagian dari B Sederhana yang mempengaruhi output adalah ini:Yang identik dengan
U
yang kita sudah tahu output A. SederhanaSatu-satunya perbedaan antara A Sederhana dan Program A adalah bahwa alih-alih menghasilkan salinan untuk rentang
[1...3]
program nyata menghasilkan salinan untuk rentang[1...256]
. Yang menghasilkan 256 versi yang#c
masing - masing memiliki karakter yang berbeda, meskipun versi terakhir "Ā" adalah karakter multi-byte sehingga tidak menambahkan byte unik, tetapi semuanya kecuali yang terakhirU
masih diabaikan.sumber
27
Perlu di-tweak kapan saja byte disimpan, tetapi selain itu sepertinya berfungsi.Program A, Gol> <> , 256/20 byte = 12.8
Cobalah online!
Program B, Gol> <>
Cobalah online!
Program bergantian antara keluaran itu sendiri diikuti oleh setiap byte dan hanya keluaran itu sendiri.
Penjelasan:
sumber
Program A: 05AB1E , skor:
256/41256/31 byte = 8,258 ...Cobalah online.
Program B: 05AB1E
Cobalah online.
Penjelasan:
Quine terpendek untuk 05AB1E adalah ini:
0"D34çý"D34çý
( 14 byte ) disediakan oleh @OliverNi . Jawaban saya menggunakan versi modifikasi dari quine itu dengan menambahkan₅Ýç'q†vy27ǝD}J
.Program B akan berakhir segera setelah mencapai
q
, sehingga program B yang sebenarnya adalah:Segala sesuatu setelah itu diabaikan, dan bagian atas tumpukan (
0"D34çý₅Ýç'q†22ǝ"D34çý₅Ýç'q†22ǝ
) adalah keluaran secara implisit.sumber