Кубічно це досить нова езотерична мова, здатна створювати короткі відповіді, подібні до гольфу для дуже специфічного набору проблем. Він унікальний тим, що він зберігає пам'ять у вигляді куба Рубіка 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
Значення обличчя визначається як сума кожного квадрата на цьому обличчі. Наприклад, у наведеному вище кубі значення обличчя 0
дорівнює 3.
Синтаксис
Команди виконуються, завантажуючи команду спочатку в пам'ять, а потім передаючи їй аргументи для виконання команди. Наприклад, команда F1
завантажить команду F
в пам'ять, а потім викликає її аргументом 1
. Додатково F13
завантажте команду F
в пам'ять, потім зателефонуйте їй з аргументом 1
, а потім зателефонуйте з аргументом 3
. Будь-який нецифровий символ трактується як команда, а будь-яка цифра трактується як аргумент.
Ваше завдання
Ваше завдання - реалізувати куб внутрішньої пам’яті Cubically мовою, яку ви обрали. Ваш код повинен мати можливість виконувати дуже невелику підмножину мови.
Команди
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
?