Saya memiliki masalah untuk klub cyber yang meminta Anda untuk mencetak:
ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!
Menggunakan Brainf ** k dalam 29 byte atau kurang tanpa menggunakan karakter ','.
Saya punya kode yang berfungsi:
++++++++++[>++++++>+++++++++<<-]>-->.<[>-.<-]
Namun loop saya terlalu panjang, mengirim saya 16 byte melebihi batas.
Apakah ada cara yang lebih efisien untuk mengatur sel kedua dan ketiga menjadi 58 dan 90 sehingga saya dapat menjalankan loop kedua? Atau adakah cara yang lebih baik untuk melakukan ini bersama-sama yang tidak saya lihat?
-.
ke.-
, menjatuhkan>.<
.+[--->++<]>++++[.-]
19 byte tetapi mencetak karakter kontrol juga ...Jawaban:
2724 byteMenghabiskan satu hari penuh pada dasarnya menulis penjahat kasar dan menonton hasilnya. Sekarang saya bisa kembali melakukan pekerjaan yang sebenarnya ...Satu hari lagi memaksa kasar ...Cobalah online!
Komponen
++[<++[++<]>>>+]
menginisialisasi rekaman keyang sempurna untuk apa yang kita butuhkan!
sumber
+[[>++<<]>->+>+]<[-<-.>]
30 byte
Cobalah online!
85 dan 171 cukup mudah untuk menghasilkan di brainfuck (invers modular 3 dan -3 ). 85 cukup dekat dengan 90 , dan 171 cukup dekat dengan 177 ( 59 · 3 ), yang digunakan di sini. Dengan sedikit peretasan, saya dapat menghasilkan 88 dan 176 sebagai gantinya.
Masih satu byte lebih pendek dari target.
Saran lainnya
Secara umum, ini lebih pendek untuk beralih pada daftar, mengalikan dengan konstanta, bukan dengan cara lain. Ini terutama berlaku untuk 3 atau lebih nilai. Sebagai contoh, ini:
dapat ditulis sebagai:
Hanya ada dua nilai dalam, jadi tidak banyak perbaikan dalam hal ini. Faktanya, hanya refactoring yang satu byte lebih pendek:
Mengalikan 30 dengan 2 dan 3 , bukan 10 dengan 6 dan 9 . Dengan saran Martin Büttner, ini sudah turun ke 38 byte, tanpa banyak perubahan ke aslinya:
sumber
34 byte
Menghemat 11 byte, namun masih terlalu panjang 5 byte ...
Saya sudah menghabiskan waktu berjam-jam, semoga seseorang dapat memperbaiki ini.
sumber