Latar Belakang
Seperti yang diketahui oleh kebanyakan PPCG, quine adalah program yang mengeluarkan kode sumbernya sendiri ketika dijalankan; dan jarak Levenshtein antara dua string adalah jumlah minimum penyisipan, penghapusan, dan pengeditan yang diperlukan untuk mengubah satu string menjadi yang lain. Dalam tantangan ini, kami menggabungkan dua konsep menjadi "levenquine": program yang menampilkan kode sumbernya sendiri, tetapi dengan satu instance dari satu karakter yang dimasukkan, dihapus, atau diganti dengan karakter yang berbeda. (Dengan kata lain, jarak Levenshtein antara program dan outputnya adalah 1.)
Tugas
Tulis levenquine sehingga outputnya adalah levenquine, output dari program itu juga levenquine, dan seterusnya. Selain itu, pada titik tertentu, urutan menjalankan program berulang kali, menjalankan outputnya, menjalankan output outputnya, dll. Pada akhirnya harus kembali ke program semula.
Ada satu batasan tambahan yang membuat segalanya lebih sulit: harus ada dua program berbeda di suatu tempat dalam siklus ini yang tidak memiliki karakter yang sama (dengan kata lain, tidak ada karakter yang ada dalam satu program dan juga ada dalam program lain). Program Anda karena itu harus secara bertahap mengubah dirinya menjadi rangkaian karakter yang berbeda, dan kembali lagi.
Jika Anda menggunakan bahasa pemrograman yang memiliki boilerplate yang tidak terhindarkan yang diperlukan dalam setiap program yang menghasilkan output (mis. Hanya memiliki satu cara untuk menulis print
pernyataan dan tidak ada bentuk output lain yang berguna), Anda dapat memperlakukan boilerplate itu sebagai tidak ada untuk tujuan tersebut menentukan karakter yang memiliki dua program yang sama. Anda harus, bagaimanapun, masih menghitung bahwa boilerplate untuk tujuan menentukan properti Levenquine dari kode.
Klarifikasi
- Setiap "program" dalam siklus dapat berupa program lengkap atau fungsi. Mereka tidak semua harus sama, misalnya beberapa bisa menjadi program penuh dan beberapa bisa menjadi fungsi.
- Tidak semua program dalam siklus perlu menggunakan bentuk output yang sama. Sebagai contoh, beberapa dapat mengeluarkan melalui keluaran standar, dan beberapa dapat mengeluarkan melalui kesalahan standar.
- Program Anda akan dijalankan tanpa input (atau dalam bahasa yang memerlukan input untuk melakukan apa saja, input sesederhana mungkin).
- Aturan quine yang tepat berlaku; walaupun Levenquine bukan quine yang sebenarnya, Anda mungkin tidak melakukan apa pun yang ilegal saat menulis quine yang tepat. Secara khusus, program nol tidak pernah merupakan keluaran yang valid dari Levenquine yang tepat (dan karenanya tidak dapat menjadi bagian dari siklus Anda).
- Pembatasan Levenquine diukur dalam hal karakter, bukan byte (misalnya
ê
satu karakter bahkan ketika sumber dikodekan dalam UTF-8). Pembatasan no-karakter-dalam-umum juga diukur dari segi karakter. Kondisi kemenangan, bagaimanapun, dihitung dalam byte.
Kondisi kemenangan
Silakan kirimkan setidaknya tiga program berikut dari siklus: program terpendek (diukur dalam byte); dan dua program dari siklus yang tidak memiliki karakter yang sama. Mungkin saja keduanya sama, dan mungkin juga ketiganya berbeda. Skor didasarkan pada panjang dalam byte dari program terpendek, dengan yang lebih pendek lebih baik, sehingga membuat ini semacam kompetisi kode-golf .
Jawaban:
Gol> <> ,
252167 byteCobalah online!
Dan program ( Verifikasi ) yang berbeda:
Cobalah online!
Ini sebagian besar terinspirasi oleh jawaban saya untuk tantangan Mutual Exclusive Quines , dengan pujian juga masuk ke Bubbler's Gol> <> answer .
Berikut adalah program verifikasi yang dapat Anda jalankan. Sayangnya, waktu habis, tetapi Anda dapat melihat bagaimana satu bagian kode membangun bagian lainnya dan kemudian Anda dapat menyalin versi terakhir yang dicetak dan menempelnya ke input untuk melanjutkan. Akhirnya, Anda akan mencapai program pertama yang Anda masukkan.
Penjelasan
Kedua bagian kode terdiri dari dua bagian, bagian pelaksana aktual dan data yang berisi bagian kode lainnya. Keduanya berfungsi secara praktis identik:
Mereka bergantung pada bendera (karakter pertama dari kode, baik
1
atau0
). Jika flag diset, mereka akan mulai membangun bagian kode yang lain dengan menurunkan karakter ke-252, menambah / mengurangi28
dari itu dan menambahkannya ke kode.Sebagai contoh, berikut adalah dua iterasi pertama dari kode setelah program pertama di atas:
Akhirnya ketika mencapai akhir bagian saat ini, ia membalik karakter kedua kode (
<
ke>
dan kembali lagi) untuk menunjuk ke bagian lain.Berikut adalah kedua bagian bersama-sama, akan beralih dari mengeksekusi bagian pertama ke mengeksekusi bagian kedua.
Cobalah online!
Bendera adalah kebalikan dari setiap bagian, sehingga bagian yang baru akan mulai menghapus bagian kode lainnya hingga mencapai kode sendiri. Pada titik ini, ia membalik bendera dan siklus berulang lagi.
sumber