Dalam tugas ini, Anda akan menulis sebuah program / fungsi yang menggunakan program Normalized Malbolge dan mengeluarkan program Malbolge yang dihasilkan . (Ini adalah alat rahasia yang digunakan oleh semua programmer Malbolge!)
Memasukkan
Struktur data yang (entah bagaimana) mewakili program Normalized Malbolge.
Keluaran
Struktur data yang mewakili program Malbolge yang dihasilkan.
Contohnya
jpoo*pjoooop*ojoopoo*ojoooooppjoivvvo/i<ivivi<vvvvvvvvvvvvvoji
(=BA#9"=<;:3y7x54-21q/p-,+*)"!h%B0/.~P<<:(8&66#"!~}|{zyxwvugJ%
jjjj*<jjjj*<v
('&%#^"!~}{XE
jjjjjjjjjjjjjjjjjjjjjjj*<jjjjjjjjjjjjjjjjjjjjjjjj*<v
('&%$#"!~}|{zyxwvutsrqpnKmlkjihgfedcba`_^]\[ZYXWVT1|
Cara mengonversi
Ulangi program Malbolge yang dinormalisasi, dengan melakukan langkah-langkah berikut untuk setiap karakter:
Ganti karakter dalam string
*jpovi</
dengan karakter yang sesuai di'(>DQbcu
. (Yaitu, petakan*
ke'
,j
ke(
, dan sebagainya.)Kemudian kurangi posisi penghitung program saat ini (yaitu jumlah karakter sebelum yang sekarang) dari kode ASCII karakter.
Jika kode ASCII yang dihasilkan kurang dari 33, tambah dengan 94 dan ulangi hingga setidaknya 33.
Tambahkan karakter yang dihasilkan ke output.
Aturan
- Ini adalah kontes kode-golf ; jawaban terpendek menang.
- Tolong, jangan ada celah standar .
- Metode I / O standar diizinkan.
- Input hanya akan berisi karakter
*jpovi</
.
*jpovi</
"?a: if ascii_code(temporary Malbolge representation) < 33: char := char + 94; goto a;
Jawaban:
Jelly ,
2922 byteCobalah online!
Tautan monadik yang menggunakan string Jelly sebagai argumennya dan mengembalikan string Jelly.
Terima kasih kepada @JonathanAllan karena telah menghemat 2 byte!
Penjelasan
sumber
..._J‘ịØṖḊ¤
menghemat satu byte.Oị“%þV DCµ2® ‘_JịØṖḊ¤
Python 3 , 82 byte
Cobalah online!
Terima kasih kepada @ Joel untuk mengganti karakter jelek yang tidak patut dicetak di bytestring dengan yang dapat dicetak.
Saya mencari rantai mod untuk menggantikan
"*jpovi<".find(c)
, tetapi saya tidak berpikir ada satu yang lebih pendek, dan pencarian brute-force yang tidak lengkap belum menemukan apa-apa sejauh ini.82 byte
Cobalah online!
sumber
b"de{#0ABT"["*jpovi<".find(c)]
jika Anda memiliki program untuk itu.x%84%15%7
untuk bagian kanan pemetaan, tapi saya pikir saya bisa mendaur ulang beberapa kode yang saya tulis untuk tantangan lain untuk pencarian termasuk*
dan/
istilah.%
dan*
(//
dengan Python 3 mungkin tidak layak.) Bahkan, tidak ada yang cocok dengan nilai 6 dari 7 pertama. Saya berharap ini akan berhasil karena perkiraan entropi kasar mengatakan mungkin ada cukup banyak ekspresi yang diakhiri dengan% 7, tetapi hampir. Dan mungkin rantai ini memberikan output yang jauh dari terdistribusi secara merata, terutama karena setelah dua input runtuh ke nilai yang sama, tidak ada operasi lebih lanjut yang dapat memisahkannya. Hal-hal yang saya coba masih terlalu bodoh untuk mencari ekspresi yang lebih besar, tetapi jika Anda punya ide, coba saja.map(ord, "*jpovi<")
. Jika output tidak mempertahankan urutan untuk sebagian besar input (yaituf(m)>=f(n)
jikam>=n
), beberapa konstanta yang dibuat dengan hati-hati untuk%
dan*
kemungkinan diperlukan dan pencarian dengan kekerasan tidak mungkin menghasilkan hasil yang positif.Malbolge Unshackled (varian rotasi 20-trit), 7,784e6 byte
Ukuran jawaban ini melebihi ukuran program maksimum yang dapat diposkan (eh), jadi kodenya terletak di repositori GitHub saya .
Bagaimana cara menjalankannya?
Ini mungkin bagian yang sulit, karena juru bahasa Haskell yang naif akan membutuhkan waktu lama untuk menjalankannya. TIO memiliki juru bahasa Malbogle Unshackled yang layak, tetapi sayangnya saya tidak akan dapat menggunakannya (batasan).
Yang terbaik yang bisa saya temukan adalah varian lebar rotasi 20-trit tetap, yang berkinerja sangat baik, mengkonversi 0,5 karakter per detik .
Untuk membuat penerjemah sedikit lebih cepat, saya telah menghapus semua cek dari penerjemah Malbolge Unshackled milik Matthias Lutter.
Versi modifikasi saya dapat berjalan sekitar 6,3% lebih cepat.
Bekerja!
sumber
Python 3 ,
8483 byteCobalah online!
Ini sebagian besar masalah matematika tentang menyederhanakan perhitungan, ditambah beberapa golf setelah menyelesaikan matematika. Versi kode yang tidak ditandai ditampilkan di bawah ini.
Versi tidak digabungkan, non-rekursif
Cobalah online!
sumber
JavaScript (Node.js) , 69 byte
Cobalah online!
Bagaimana?
sumber
Perl 6 ,
65 5553 byteCobalah online!
Menggunakan trik mod 11 dari jawaban Arnaud
sumber
05AB1E ,
32312322 byte-8 byte menciptakan port jawaban NickKennedy 's Jelly , jadi pastikan untuk meningkatkannya !!
-1 byte terima kasih kepada @Grimy.
Output sebagai daftar karakter.
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
Lihat tip tambang 05AB1E ini (bagian Bagaimana cara mengompresi bilangan bulat besar? Dan Cara mengompresi daftar bilangan bulat? ) Untuk memahami mengapa
•4¡ˆ¶ü]₁η₃•
ini82767635194143615015
dan•4¡ˆ¶ü]₁η₃•₃в
sekarang[1,36,30,85,0,67,66,8,49,7,0]
.sumber
•1ÃQWý₂Ýδ9•86в
->•4¡ˆ¶ü]₁η₃•₃в
Perl 5 (
-p
),53, 51 bytemenghemat 2 byte, menggunakan
de{#0ABT
bukan'(>DQbcu
sehingga61
tidak lagi diperlukanTIO
jawaban pertama adalah
TIO
sumber
Japt ,
2423 byteSolusi Port of Nick's Jelly
Cobalah
sumber
Retina 0.8.2 , 50 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Buat transliterasi seperti yang dijelaskan dalam pertanyaan.
p
(dijelaskan di bawah) dano
memiliki arti khusus untukT
ransliterate sehingga mereka perlu dikutip.Buat daftar setiap karakter pada barisnya sendiri, didahului oleh sejumlah spasi sesuai dengan indeksnya, seperti apa bentuk penghitung programnya.
Secara berulang-ulang mengurangi karakter terakhir pada setiap baris, menghapus ruang sebelumnya setiap kali, sampai semua ruang telah dihapus. The
p
singkatan dicetak ASCII yaitu-~
, namun kami ingin!
untuk memetakan ke~
sehingga yang transliterasi pertama, dan kemudian_
menyebabkan ruang dalam pertandingan.¶
yang akan dihapus, sementara karakter yang tersisa bisa ditransliterasikan satu kode karakter pada satu waktu.Gabungkan semua karakter kembali bersama.
sumber
Arang , 23 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Jawaban JavaScript Port @ Arnauld. Penjelasan:
sumber
C # (Visual C # Interactive Compiler) , 62 byte
Cobalah online!
Port jawaban JavaScript @Arnaulds. Satu jika contoh langka di mana C # lebih pendek!
sumber
Haskell , 135 byte
Cobalah online!
sumber