Cubally là một ngôn ngữ bí truyền khá mới có khả năng tạo ra các câu trả lời ngắn, giống như golf cho một tập hợp vấn đề rất cụ thể. Điều độc đáo ở đây là nó lưu trữ bộ nhớ dưới dạng khối lập phương 3x3, làm cho các phép tính ít tầm thường hơn so với hầu hết các ngôn ngữ. Trong Lập thể, lập trình viên phải xoay khối bên trong để thao tác các giá trị được lưu trữ trên các mặt, sau đó sử dụng các giá trị đó trong tính toán của chúng. Các tính toán được thực hiện trên một số nguyên 32 bit được lưu trữ trên một mặt ảo được gọi là "notepad". Ngoài ra, Cubally có thể yêu cầu người dùng nhập và lưu trữ nó trong bộ đệm đầu vào chỉ bao gồm một giá trị số nguyên duy nhất.
Khối lập phương
Các mặt của khối lập phương là U p, D own, L eft, R ight, F ront và B ack:
UUU
UUU
UUU
LLLFFFRRRBBB
LLLFFFRRRBBB
LLLFFFRRRBBB
DDD
DDD
DDD
Khi chương trình bắt đầu, khối được khởi tạo sao cho mỗi ô vuông trên mặt đó bằng với chỉ số dựa trên 0 của mặt đó:
000
000
000
111222333444
111222333444
111222333444
555
555
555
Bất cứ khi nào một khuôn mặt được xoay, nó luôn luôn được xoay theo chiều kim đồng hồ:
Cubically> F1
000
000
111
115222033444
115222033444
115222033444
333
555
555
Giá trị của một mặt được định nghĩa là tổng của mọi ô vuông trên mặt đó. Ví dụ, trong khối trên, giá trị của khuôn mặt 0
là 3.
Cú pháp
Các lệnh được thực thi bằng cách trước tiên tải một lệnh vào bộ nhớ, sau đó truyền đối số cho nó để thực thi lệnh. Ví dụ, lệnh F1
sẽ tải lệnh F
vào bộ nhớ, sau đó gọi nó với đối số 1
. Ngoài ra, F13
sẽ tải lệnh F
vào bộ nhớ, sau đó gọi nó bằng đối số 1
, sau đó gọi nó bằng đối số 3
. Bất kỳ ký tự không có chữ số nào cũng được coi là một lệnh và bất kỳ chữ số nào cũng được coi là một đối số.
Nhiệm vụ của bạn
Nhiệm vụ của bạn là triển khai khối bộ nhớ trong của Cuba bằng ngôn ngữ bạn chọn. Mã của bạn sẽ có thể thực thi một tập hợp con rất nhỏ của ngôn ngữ.
Các lệnh
R
- Xoay mặt phải của khối lập phương theo chiều kim đồng hồ với số lần chỉ định.L
- Xoay mặt trái của khối lập phương theo chiều kim đồng hồ với số lần chỉ định.U
- Xoay mặt trên của khối lập phương theo chiều kim đồng hồ với số lần được chỉ định.D
- Xoay mặt dưới của khối lập phương theo chiều kim đồng hồ với số lần chỉ định.F
- Xoay mặt trước của khối lập phương theo chiều kim đồng hồ với số lần chỉ định.B
- Xoay mặt sau của khối lập phương theo chiều kim đồng hồ với số lần chỉ định.%
- Xuất giá trị trên mặt đã cho. Giá trị của một mặt được định nghĩa là tổng của tất cả các hình vuông trên mặt đó.
Quy tắc
- Bạn có thể sử dụng bất kỳ ngôn ngữ nào được tạo trước hoặc sau ngày thử thách này được đăng để viết chương trình hoặc chức năng có khả năng giải quyết thử thách này.
- Đầu vào sẽ được chuyển qua STDIN, dưới dạng chuỗi hoặc dưới dạng mảng ký tự (bạn chọn, vui lòng chỉ định).
- Đầu ra phải được truyền cho STDOUT hoặc là đầu ra của hàm và nó phải là một số nguyên, một chuỗi chỉ chứa các chữ số hoặc một mảng các chữ số. Nếu ngôn ngữ của bạn yêu cầu bạn xuất ra một dòng mới, bạn có thể làm như vậy.
- Đầu vào sẽ luôn ở định dạng sau :
([UDLRFB]\d*)*%[0-5]
. Sẽ không có ký tự khoảng trắng trong đầu vào. - Đầu vào cho
%
sẽ luôn sử dụng chỉ mục dựa trên 0.
Đây là môn đánh gôn , vì vậy câu trả lời ngắn nhất bằng byte thắng.
Các trường hợp thử nghiệm
%0 -> 0
%1 -> 9
%2 -> 18
%3 -> 27
%4 -> 36
%5 -> 45
R1%2 -> 27
RD3F2%5 -> 32
L1R23F1B5U9D2%3 -> 17
Để biết thêm các trường hợp thử nghiệm, hãy kiểm tra trình thông dịch TIO . Nếu TIO không hoạt động, bạn có thể sử dụng trình thông dịch Lua thay thế.
4
giữa R
và D
trong ví dụ RD3F2%5 -> 30
?