Кубически - это довольно новый эзотерический язык, способный создавать короткие, похожие на гольф ответы на очень специфический набор проблем. Он уникален тем, что хранит память в форме кубика Рубика 3х3, что делает вычисления гораздо менее тривиальными, чем в большинстве языков. В Кубе программист должен вращать внутренний куб, чтобы манипулировать значениями, хранящимися на гранях, а затем использовать эти значения в своих вычислениях. Вычисления выполняются для одного 32-разрядного целого числа, хранящегося на воображаемом лице, известном как «блокнот». Кроме того, Cubically может запросить ввод данных пользователем и сохранить его во входном буфере, состоящем только из одного целочисленного значения.
Куб
Грани куба U р, D собственный, L EFT, R РАВО, F Ront и Б извед:
UUU
UUU
UUU
LLLFFFRRRBBB
LLLFFFRRRBBB
LLLFFFRRRBBB
DDD
DDD
DDD
Когда программа запускается, куб инициализируется таким образом, чтобы каждый квадрат на этой грани был равен основанному на 0 индексу грани:
000
000
000
111222333444
111222333444
111222333444
555
555
555
Всякий раз, когда лицо поворачивается, оно всегда поворачивается по часовой стрелке:
Cubically> F1
000
000
111
115222033444
115222033444
115222033444
333
555
555
Значение лица определяется как сумма каждого квадрата на этом лице. Например, в приведенном выше кубе значение face 0
равно 3.
Синтаксис
Команды выполняются сначала загрузкой команды в память, затем передачей ей аргументов для выполнения команды. Например, команда F1
загрузит команду F
в память, а затем вызовет ее с аргументом 1
. Кроме того, F13
загрузит команду F
в память, затем вызовет ее с аргументом 1
, затем вызовет ее с аргументом 3
. Любой нецифровый символ рассматривается как команда, а любая цифра - как аргумент.
Твое задание
Ваша задача - внедрить куб внутренней памяти Cubious на выбранном вами языке. Ваш код должен иметь возможность выполнять очень маленькое подмножество языка.
команды
R
- Поверните правую грань куба по часовой стрелке указанное количество раз.L
- Поверните левую грань куба по часовой стрелке указанное количество раз.U
- Поверните верхнюю грань куба по часовой стрелке указанное количество раз.D
- Поверните нижнюю грань куба по часовой стрелке указанное количество раз.F
- Поверните переднюю грань куба по часовой стрелке указанное количество раз.B
- Поверните заднюю грань куба по часовой стрелке указанное количество раз.%
- Выводит значение на заданной грани. Значение лица определяется как сумма всех квадратов на этом лице.
правила
- Вы можете использовать любой язык, созданный до или после даты публикации этого задания, чтобы написать программу или функцию, способную решить эту проблему.
- Входные данные будут передаваться либо через STDIN, либо в виде строки, либо в виде массива символов (выберите, пожалуйста, укажите).
- Выходные данные должны быть переданы либо в STDOUT, либо в качестве выходных данных функции, и это должно быть либо целое число, строка, содержащая только цифры, либо массив цифр. Если ваш язык требует, чтобы вы выводили завершающий символ новой строки, вы можете сделать это.
- Вход всегда будет в следующем формате:
([UDLRFB]\d*)*%[0-5]
. На входе не будет пробельных символов. - Ввод для
%
всегда будет использовать индекс на основе 0.
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Тестовые случаи
%0 -> 0
%1 -> 9
%2 -> 18
%3 -> 27
%4 -> 36
%5 -> 45
R1%2 -> 27
RD3F2%5 -> 32
L1R23F1B5U9D2%3 -> 17
Для большего количества тестовых случаев проверьте интерпретатор TIO . Если TIO не работает, вы можете использовать вместо этого интерпретатор Lua .
4
между R
и D
в примере RD3F2%5 -> 30
?