Cubicamente é uma linguagem esotérica relativamente nova, capaz de criar respostas curtas, semelhantes a golfe, para um subconjunto muito específico de problemas. É único, pois armazena memória na forma de um cubo de Rubik 3x3, tornando os cálculos muito menos triviais do que na maioria dos idiomas. Em Cubically, o programador deve girar o cubo interno para manipular os valores armazenados nas faces e, em seguida, usar esses valores em seus cálculos. Os cálculos são realizados em um único inteiro de 32 bits armazenado em uma face imaginária conhecida como "bloco de notas". Além disso, o Cubically pode solicitar entrada do usuário e armazená-lo em um buffer de entrada que consiste em apenas um único valor inteiro.
O cubo
As faces do cubo são L p, D próprio, L EFT, R ight, F ront, e B ack:
UUU
UUU
UUU
LLLFFFRRRBBB
LLLFFFRRRBBB
LLLFFFRRRBBB
DDD
DDD
DDD
Quando o programa é iniciado, o cubo é inicializado de forma que cada quadrado nessa face seja igual ao índice baseado em 0 da face:
000
000
000
111222333444
111222333444
111222333444
555
555
555
Sempre que um rosto é girado, é sempre girado no sentido horário:
Cubically> F1
000
000
111
115222033444
115222033444
115222033444
333
555
555
O valor de uma face é definido como sendo a soma de cada quadrado nessa face. Por exemplo, no cubo acima, o valor da face 0
é 3.
Sintaxe
Os comandos são executados primeiro carregando um comando na memória e depois passando argumentos para ele para executar o comando. Por exemplo, o comando F1
irá carregar o comando F
na memória, em seguida, chamá-lo com o argumento 1
. Além disso, F13
carregará o comando F
na memória e depois o 1
chamará com o argumento 3
. Qualquer caractere que não seja dígito é tratado como um comando e qualquer dígito é tratado como um argumento.
Sua tarefa
Sua tarefa é implementar o cubo de memória interna do Cubically em um idioma de sua escolha. Seu código deve ser capaz de executar um subconjunto muito pequeno do idioma.
Comandos
R
- Gire a face direita do cubo no sentido horário o número especificado de vezes.L
- Gire a face esquerda do cubo no sentido horário o número especificado de vezes.U
- Gire a face superior do cubo no sentido horário o número especificado de vezes.D
- Gire a face inferior do cubo no sentido horário o número especificado de vezes.F
- Gire a face frontal do cubo no sentido horário o número especificado de vezes.B
- Gire a face traseira do cubo no sentido horário o número especificado de vezes.%
- Mostra o valor na face especificada. O valor de uma face é definido como a soma de todos os quadrados nessa face.
Regras
- Você pode usar qualquer idioma criado antes ou depois da data em que este desafio foi lançado para escrever um programa ou função capaz de resolvê-lo.
- A entrada será passada através do STDIN, como uma sequência ou como uma matriz de caracteres (você escolhe, por favor especifique).
- A saída deve ser passada para STDOUT ou como a saída da função e deve ser um número inteiro, uma sequência contendo apenas dígitos ou uma matriz de dígitos. Se o seu idioma exigir a saída de uma nova linha à direita, você poderá fazê-lo.
- A entrada será sempre no formato seguinte:
([UDLRFB]\d*)*%[0-5]
. Não haverá caracteres de espaço em branco na entrada. - A entrada para
%
sempre usará um índice baseado em 0.
Isso é código-golfe , então a resposta mais curta em bytes vence.
Casos de teste
%0 -> 0
%1 -> 9
%2 -> 18
%3 -> 27
%4 -> 36
%5 -> 45
R1%2 -> 27
RD3F2%5 -> 32
L1R23F1B5U9D2%3 -> 17
Para mais casos de teste, consulte o intérprete TIO . Se o TIO não estiver funcionando, você poderá usar o interpretador Lua .
4
entre R
e D
no exemplo RD3F2%5 -> 30
?