Anda harus menulis program 100 byte brainfuck panjang (BF).
Satu karakter akan dihapus dari itu dalam setiap cara yang mungkin 100 program baru (panjang 99 byte) yang dihasilkan. Misalnya untuk program ++.>.
5 subprogram yang +.>.
, +.>.
, ++>.
, ++..
dan ++.>
.
Skor Anda akan menjadi jumlah output unik yang dihasilkan 100 program. Skor yang lebih tinggi lebih baik.
Detail
- Program Anda akan dihentikan setelah mengeluarkan karakter pertama.
- Program dan program yang tidak berhenti atau tidak berakhir yang menghasilkan output kosong tidak diperhitungkan dalam skor.
- Sel BF adalah sel pembungkus 8 bit. (255 + 1 = 0, 0-1 = 255)
- Program Anda tidak diberi input. Jika Anda menggunakan
,
dalam kode itu mengatur sel saat ini menjadi0
. - Tidak ada sel di sisi kiri dari posisi awal. Misalnya
<.
tidak valid tetapi.<
valid karena eksekusi dihentikan pada.
. Rekaman itu tidak terikat ke arah lain. - Program dengan tanda kurung tidak seimbang (
[
dan]
) tidak valid. - Program asli Anda bisa lebih pendek dari 100 byte karena mudah untuk memperpanjangnya menjadi 100 byte tanpa mengubah skor.
- Program asli Anda tidak harus kode BF yang valid.
Anda dapat menggunakan program python3 ini (tautan ideone) untuk menentukan skor jawaban Anda. (Untuk program jangka panjang Anda mungkin perlu memodifikasi maxstep
variabel.)
Contoh
(Untuk kesederhanaan, program ini lebih pendek dari 100 byte.)
Solution: ++,+[-]+><.-,-.
Score: 3
Explanation:
Subprogram => Output
+,+[-]+><.-,-. => 1
+,+[-]+><.-,-. => 1
+++[-]+><.-,-. => 1
++,[-]+><.-,-. => 1
++,+-]+><.-,-. => None
++,+[]+><.-,-. => None
++,+[-+><.-,-. => None
++,+[-]><.-,-. => 0
++,+[-]+<.-,-. => None
++,+[-]+>.-,-. => 0
++,+[-]+><-,-. => 255
++,+[-]+><.,-. => 1
++,+[-]+><.--. => 1
++,+[-]+><.-,. => 1
++,+[-]+><.-,- => 1
Unique outputs are [0, 1, 255]
Score is 3 for ++,+[-]+><.-,-. (length = 15)
Dalam hal seri, pemenangnya adalah yang memiliki kode pendek. (Program Anda bisa lebih pendek dari 100 byte seperti yang dinyatakan di bagian Detail.) Jika kode panjangnya sama, pemenangnya adalah poster sebelumnya.
Teka-teki bonus: tanpa batasan tebal dapatkah Anda menemukan program dengan skor 100?
sumber
Jawaban:
Nilai:
354169787983(Hapus baris baru.)
Cobalah online!
Saya tidak yakin persis mengapa itu bekerja ...
Nilai: 79
Cobalah online!
Itu seharusnya jumlah 2 * mem [i] * i dan menambahkan jumlah sel (+ const) di mana alamat dihitung dari kanan ke kiri. Pengganda 2 dan jumlah sel dapat membuat penghapusan + dan> memiliki paritas yang berbeda.
Itu memang bekerja seperti itu di versi 69 poin. Tetapi versi terbaru memecahkannya dan mendapatkan sesuatu yang lain secara kebetulan. Ini menghitung jumlah (mem [i] * i + i + 1) dan menghapus + dan> melakukan hampir sama, kecuali untuk jumlah (i) yang memiliki perbedaan jumlah sel, yang juga merupakan jumlah output yang berbeda untuk menghapus + dan>.
Untuk bonus:
sumber
maxstep
nilai (dalamdef evaluate(r,maxstep=20000):
) karena beberapa subprogram berjalan untuk waktu yang lama.79
dengan mengganti->+>+> ...
dengan->,>+> ...
Nilai:
3743EDIT: Sekarang program saya memungkinkan beberapa tanda kurung. Tidak akan memenangkan hadiah apa pun dengan itu, tapi itulah yang saya dapatkan karena membuat beberapa RNG tertimbang melakukan pekerjaan yang sibuk untuk saya.
Ini dihasilkan oleh program yang saya tulis dalam C.
Untuk setiap
N
karakter yang dihapus, berikut adalah hasilnya:Ada total 37 output unik, yaitu (dalam urutan numerik):
Saya
90%100% yakin solusi ini tidak optimal, tetapi membuktikan bahwa itu mungkin sangat sulit. Ada beberapa hal yang jelas. Tidak memiliki.
simbol sampai karakter terakhir tampaknya menjadi cara untuk pergi, dan tanda kurung siku (. Saya sedikit berpikir di sini, yang ingin saya uraikan:[]
) tampaknya agak tidak bergunaMembiarkan
L
menjadi panjang kode dalam byte (dalam tantangan,100
), dann
menjadi jumlah output unik dari sub program.Untuk
L=3
, ada beberapa solusi yang optimal dari bentuk+-.
, di manan=2
(dalam hal ini, output adalah 1 dan 255 untuk+.
dan-.
masing-masing.) Puts ini rasio terbaik untukL = 3
din/L = 66.67%
. Perhatikan bahwa rasio ini setidaknya tidak dapat dikalahkanL<10
.Sebab
L=10
, solusinya cukup sederhana untuk menguatkannya. Berikut ini semua solusi terbaik, din = 6
:Yang menghasilkan rasio skor
n/L = 60%
.Seperti
L->infinity
, jelas bahwa rasio harus mendekati 0, karena hanya ada 255 kemungkinan output untuk potensi yang tak terbatasL
.Rasio BUKAN, namun, menurun secara seragam. Tidak mungkin untuk membuat solusi
n=6, L=9
, jadi rasio terbaik untuk ituL=9
adalah5/9 = 55.56% < 60%
.Ini menimbulkan pertanyaan, seberapa cepat , dan dalam hal apa, rasionya turun? Untuk
L = 100
, dan pada10^9 checks/second
, dibutuhkan beberapa kali lipat lebih lama dari umur alam semesta untuk memperkuat solusi yang optimal. Apakah ada cara yang elegan untuk melakukan ini?Saya sangat meragukan bahwa itu adalah ke37%
untukL = 100
.Rasio ini benar-benar meningkat, hingga
L=100
. Lihat jawaban lain untuk mengonfirmasi.Saya ingin mendengar evaluasi Anda di atas. Lagipula, aku
bisasalah besar.sumber