Cubically adalah bahasa esoterik yang cukup baru yang mampu menciptakan jawaban pendek, seperti golf untuk subset masalah yang sangat spesifik. Ini unik karena menyimpan memori dalam bentuk kubus Rubik 3x3, membuat perhitungan jauh lebih sepele daripada di kebanyakan bahasa. Di Cubically, programmer harus memutar kubus internal untuk memanipulasi nilai-nilai yang tersimpan di wajah, kemudian menggunakan nilai-nilai itu dalam perhitungan mereka. Perhitungan dilakukan pada bilangan bulat 32-bit tunggal yang disimpan pada wajah imajiner yang dikenal sebagai "notepad". Selain itu, Cubically dapat meminta input pengguna dan menyimpannya dalam buffer input yang hanya terdiri dari nilai integer tunggal.
Kubus
Wajah-wajah kubus adalah U p, D sendiri, L TDE, R ight, F ront, dan B ack:
UUU
UUU
UUU
LLLFFFRRRBBB
LLLFFFRRRBBB
LLLFFFRRRBBB
DDD
DDD
DDD
Ketika program dimulai, kubus diinisialisasi sehingga setiap kotak pada wajah itu sama dengan indeks berbasis 0 wajah itu:
000
000
000
111222333444
111222333444
111222333444
555
555
555
Setiap kali wajah diputar, selalu diputar searah jarum jam:
Cubically> F1
000
000
111
115222033444
115222033444
115222033444
333
555
555
Nilai wajah didefinisikan sebagai jumlah dari setiap kotak pada wajah itu. Misalnya, dalam kubus di atas, nilai wajah 0
adalah 3.
Sintaksis
Perintah dijalankan dengan terlebih dahulu memuat perintah ke dalam memori, kemudian meneruskan argumen ke sana untuk mengeksekusi perintah. Sebagai contoh, perintah F1
akan memuat perintah F
ke dalam memori, kemudian menyebutnya dengan argumen 1
. Selain itu, F13
akan memuat perintah F
ke dalam memori, kemudian memanggilnya dengan argumen 1
, lalu memanggilnya dengan argumen 3
. Setiap karakter non-digit diperlakukan sebagai perintah, dan setiap digit diperlakukan sebagai argumen.
Tugas Anda
Tugas Anda adalah mengimplementasikan kubus memori internal Cubically dalam bahasa pilihan Anda. Kode Anda harus dapat menjalankan subset bahasa yang sangat kecil.
Perintah
R
- Putar wajah kanan kubus searah jarum jam berapa kali yang ditentukan.L
- Putar muka kiri kubus searah jarum jam berapa kali yang ditentukan.U
- Putar permukaan atas kubus searah jarum jam dengan jumlah yang ditentukan.D
- Putar permukaan bawah kubus searah jarum jam dengan jumlah yang ditentukan.F
- Putar muka depan kubus searah jarum jam berapa kali yang ditentukan.B
- Putar muka belakang kubus searah jarum jam berapa kali yang ditentukan.%
- Output nilai pada wajah yang diberikan. Nilai wajah didefinisikan sebagai jumlah dari semua kotak pada wajah itu.
Aturan
- Anda dapat menggunakan bahasa apa pun yang dibuat sebelum atau setelah tanggal tantangan ini diposting untuk menulis sebuah program atau fungsi yang mampu menyelesaikan tantangan ini.
- Input akan dikirimkan melalui STDIN, sebagai string, atau sebagai array karakter (Anda pilih, mohon sebutkan).
- Output harus diteruskan ke STDOUT atau sebagai output dari fungsi, dan harus berupa integer, string yang hanya berisi digit, atau array digit. Jika bahasa Anda mengharuskan Anda untuk mengeluarkan baris tambahan, Anda dapat melakukannya.
- Input akan selalu dalam format berikut:
([UDLRFB]\d*)*%[0-5]
. Tidak akan ada karakter spasi putih di input. - Masukan untuk
%
akan selalu menggunakan indeks berbasis 0.
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Uji Kasus
%0 -> 0
%1 -> 9
%2 -> 18
%3 -> 27
%4 -> 36
%5 -> 45
R1%2 -> 27
RD3F2%5 -> 32
L1R23F1B5U9D2%3 -> 17
Untuk lebih banyak kasus uji, periksa juru bahasa TIO . Jika TIO tidak berfungsi, Anda dapat menggunakan juru bahasa Lua sebagai gantinya.
4
antara R
dan D
dalam contoh RD3F2%5 -> 30
?