Kita semua tahu, atau setidaknya pernah mendengar, brainfuck , salah satu bahasa esoteris yang paling terkenal dan berpengaruh. Sementara saat ini sebagian besar implementasi menggunakan pita tak terbatas, kompiler asli oleh Urban Müller memiliki pita 30000 sel. Fakta yang sedikit diketahui * adalah bahwa sebenarnya ada nilai khusus di akhir rekaman, sesuatu yang hampir tidak pernah berinteraksi dengan program brainfuck khas.
Meskipun Anda dapat mencetak nilai ini dengan 29999 >
s dan a .
, brainfuck dikenal untuk solusi singkat dan ringkasnya, jadi tujuan Anda adalah mencetak nilai ini dengan jumlah karakter minimum.
*fiksi
Aturan:
- Penyegaran pada instruksi brainfuck:
+
/-
: Menambah / mengurangi sel saat ini, membungkus dari 255 ke 0 ketika 255 bertambah dan sebaliknya<
/>
: Pindahkan pointer ke kiri / kanan pada kaset.
: Cetak nilai sel saat ini.[
: Langsung ke yang sesuai]
jika nilai pada sel adalah 0]
: Langsung ke yang sesuai[
jika nilai pada sel bukan 0
- Dalam hal ini
,
(Dapatkan input) tidak melakukan apa-apa, karena kompiler asli membiarkan sel tidak berubah pada EOF, dan program ini seharusnya tidak menerima input. - Rekaman awalnya diisi dengan semua 0s, kecuali untuk sel 30000, yang berisi nilai yang tidak diketahui
- Pointer dimulai pada sel 1 dan harus berakhir pada sel 30000, setelah mencetaknya.
- Sel di sebelah kiri 1 dan di kanan 30000 memiliki perilaku yang tidak terdefinisi, jadi solusi tidak boleh mengunjungi sel-sel ini.
- Perhatikan bahwa nilai pada 30000
adalahmungkin 0, jadi hanya perulangan sampai Anda menekan non-nol sel tidak akan bekerja. - Anda hanya harus mencetak nilai di sel 30000
- Solusi terpendek menang!
- Tie-breaker adalah program yang lebih efisien (dijalankan dalam langkah paling tidak), diikuti oleh waktu pengiriman tercepat.
Kiat: Esolanging Fruit menyarankan menggunakan https://copy.sh/brainfuck untuk menguji kode Anda. Spesifikasi seperti yang dijelaskan dalam tantangan ini, dan Anda dapat memilih abort
opsi sehingga program Anda berhenti jika melampaui batas.
.
. Saya menang.Jawaban:
54 Bytes
119 x 252 = 29988. Lingkaran bertingkat langsung.
Saya menggunakan alat ini untuk memverifikasi bahwa pointer berhenti di 29999.
sumber
50 byte
Coba Di Sini!
Bagian pertama (
>+[>+[<]>->+]>-<<
) mengatur kaset sebagaiBagian berikutnya (
[>>-------[[>]+[<]>-]<<-]
) mengulangi 121 kali, menambahkan 2491
detik hingga akhir kaset setiap kali. Jika Anda cepat dalam matematika, Anda mungkin menyadari bahwa 121 * 249 ini menghasilkan dalam 301291
detik, tetapi iterasi pertama memiliki sisa 110 untuk ditangani dan hanya ditambahkan (110-7
) 1031
detik pada kaset, yang berarti hanya ada 29.9831
detik. Rekaman terakhir terlihat seperti:Dan final
>>>[>]>.
untuk mencetak nilai.Beberapa algoritma catatan lainnya:
sumber
81
Ini bergerak 150 sel sebanyak 200 kali.
Ini jauh lebih lama daripada yang saya inginkan, dan ada hambatan serius untuk bermain golf:
Saya tidak lagi tahu mengapa saya bekerja.
Ini dikompensasi dengan kompensasi untuk yang off-by-point di mana beberapa dari mereka mungkin bisa membatalkan. Saya telah menambahkan dan menghapus berbagai segmen sedemikian rupa sehingga saya tidak lagi ingat mengapa saya meletakkan hal-hal tertentu di tempat mereka berada (misalnya, mengapa bagian pertama menginisialisasi sel kaset menjadi 199 dan 151 alih-alih 200 dan 150?).
Bagaimanapun, ini adalah versi komentar saya tentang keburukan ini, dengan harapan bahwa saya (atau orang lain) mungkin menganggapnya berguna:
sumber
.
, apakah akan membantu?