Dalam tantangan ini, Anda akan menulis penerjemah untuk bahasa sederhana yang saya buat. Bahasa ini didasarkan pada akumulator tunggal A, yang panjangnya tepat satu byte. Pada awal program, A = 0. Ini adalah instruksi bahasa:
!
: Pembalikan
Instruksi ini hanya membalikkan setiap bit akumulator. Setiap nol menjadi satu dan setiap orang menjadi nol. Sederhana!
>
: Shift Kanan
Instruksi ini menggeser setiap bit di A one place ke kanan. Bit paling kiri menjadi nol dan bit paling kanan dibuang.
<
: Shift Kiri
Instruksi ini menggeser setiap bit di A satu tempat ke kiri. Bit paling kanan menjadi nol dan bit paling kiri dibuang.
@
: Swap Nybbles
Instruksi ini menukar empat bit teratas A dengan empat bit terbawah. Misalnya, Jika A adalah 01101010
dan Anda mengeksekusi @
, A akan menjadi 10100110
:
____________________
| |
0110 1010 1010 0110
|_______|
Itu semua instruksinya! Sederhana bukan?
Aturan
- Program Anda harus menerima input sekali di awal. Ini akan menjadi baris kode. Ini bukan penerjemah interaktif! Anda hanya dapat menerima input satu kali dan tidak perlu mengulang kembali ke awal setelah baris itu dieksekusi.
- Program Anda harus mengevaluasi kata input. Setiap karakter yang tidak disebutkan di atas diabaikan.
- Program Anda kemudian harus mencetak nilai akhir akumulator, dalam desimal.
- Aturan biasa untuk bahasa pemrograman yang valid berlaku.
- Celah standar tidak diijinkan.
- Ini adalah kode-golf , jumlah byte terkecil yang menang.
Berikut adalah beberapa program kecil untuk menguji kiriman Anda. Sebelum panah adalah kode, setelah itu adalah hasil yang diharapkan:
!
->255
!>>
->63
!<@
->239
!nop!&6*!
->255
Nikmati!
! -> 255
bahwa kita akan menggunakan 8 bit per byte di sini? Pertanyaannya tidak eksplisit.