Terapkan Kubus Kubus

10

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 0adalah 3.

Sintaksis

Perintah dijalankan dengan terlebih dahulu memuat perintah ke dalam memori, kemudian meneruskan argumen ke sana untuk mengeksekusi perintah. Sebagai contoh, perintah F1akan memuat perintah Fke dalam memori, kemudian menyebutnya dengan argumen 1. Selain itu, F13akan memuat perintah Fke 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 , 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.

Tehers
sumber
3
Apakah pertanyaan ini merupakan duplikat dari ini ?
TehPers
Terkait
notjagan
@TehPers Saya pikir ini sangat mirip. Untuk tantangan di masa depan, saya sarankan untuk menyimpannya di kotak pasir setidaknya selama 24 jam, lebih lama jika Anda masih memiliki pertanyaan tentang itu. (Saya harus belajar ini dengan cara yang sulit; tantangan pertama saya tidak diterima dengan baik sama sekali. Ini belum ditutup atau diturunkan, jadi itu tidak buruk , tetapi jika itu ditinggalkan di kotak pasir lebih lama, pengguna lain mungkin sudah memperhatikan kekurangan yang saya tidak lakukan.)
MD XF
@ MDXF saya akan mengingatnya untuk waktu berikutnya. Terima kasih!
TehPers
Apakah Anda melewatkan kelipatan 4antara Rdan Ddalam contoh RD3F2%5 -> 30?
Jonathan Allan

Jawaban:

8

Python 2 , 476 byte

import re
c=[[i]*9for i in range(6)]
r=lambda f:[f[a+b]for a in(0,1,2)for b in(6,3,0)]
U=lambda c:[r(c[0])]+[c[j+1][:3]+c[j or 4][3:]for j in(1,2,3,0)]+[c[5]]
y=lambda c:[r(c[0])]+c[2:5]+[c[1],r(r(r(c[5])))]
z=lambda c:[c[2],r(r(r(c[1]))),c[5],r(c[3]),c[0][::-1],c[4][::-1]]
s=input()
exec("c="+"(c);c=".join("".join("zzzUz U zzUzz yyyzUzzzy zUzzz yzUzzzyyy".split()[ord(t)%11%7]*sum(map(int,n))for t,n in re.findall("([BUDLFR])(\d*)",s[:-2])))+"(c)")
print sum(c[int(s[-1])])

Cobalah online!

Sebuah port dari jawaban Simulate A Rubik's Cube saya . Kunjungan itu mendorong saya untuk bermain golf itu dengan 47 byte.

Jonathan Allan
sumber
0

Secara kubik , 1 byte

Non-bersaing karena lumpuh. Jangan terima ini.

¶  Read a line from stdin and evaluate

Saya menambahkan bahwa sore ini: P

MD XF
sumber
2
Saya pikir Anda memiliki kode terpendek.
Tehers
2
@TehPers saya lakukan, tapi seperti saya katakan, itu lumpuh. Secara kubik dapat memenangkan tantangan rubiks-kubus lainnya dengan builtin ini, tidak perlu memenangkan yang ini.
MD XF