Cúbicamente es un lenguaje esotérico bastante nuevo capaz de crear respuestas cortas, similares al golf, para un subconjunto muy específico de problemas. Es único en el sentido de que almacena memoria en forma de un cubo de Rubik 3x3, lo que hace que los cálculos sean mucho menos triviales que en la mayoría de los idiomas. En Cubically, el programador debe rotar el cubo interno para manipular los valores almacenados en las caras, luego usar esos valores en sus cálculos. Los cálculos se realizan en un único entero de 32 bits almacenado en una cara imaginaria conocida como "bloc de notas". Además, Cubically puede solicitar la entrada del usuario y almacenarlo en un búfer de entrada que consta de un solo valor entero.
El cubo
Las caras del cubo son U p, D propia, L eft, R ight, F ront, y B ack:
UUU
UUU
UUU
LLLFFFRRRBBB
LLLFFFRRRBBB
LLLFFFRRRBBB
DDD
DDD
DDD
Cuando se inicia el programa, el cubo se inicializa de modo que cada cuadrado en esa cara sea igual al índice basado en 0 de esa cara:
000
000
000
111222333444
111222333444
111222333444
555
555
555
Cada vez que se gira una cara, siempre se gira en sentido horario:
Cubically> F1
000
000
111
115222033444
115222033444
115222033444
333
555
555
El valor de una cara se define como la suma de cada cuadrado en esa cara. Por ejemplo, en el cubo anterior, el valor de la cara 0
es 3.
Sintaxis
Los comandos se ejecutan cargando primero un comando en la memoria, luego pasándole argumentos para ejecutar el comando. Por ejemplo, el comando F1
cargará el comando F
en la memoria, luego lo llamará con el argumento 1
. Además, F13
cargará el comando F
en la memoria, luego lo llamará con el argumento 1
, luego lo llamará con el argumento3
. Cualquier carácter que no sea un dígito se trata como un comando, y cualquier dígito se trata como un argumento.
Tu tarea
Su tarea es implementar el cubo de memoria interna de Cubically en el idioma que elija. Su código debería poder ejecutar un subconjunto muy pequeño del idioma.
Comandos
R
- Gire la cara derecha del cubo en el sentido de las agujas del reloj el número especificado de veces.L
- Gire la cara izquierda del cubo en el sentido de las agujas del reloj el número especificado de veces.U
- Gire la cara superior del cubo en el sentido de las agujas del reloj el número especificado de veces.D
- Gire la cara inferior del cubo en el sentido de las agujas del reloj el número especificado de veces.F
- Gire la cara frontal del cubo en el sentido de las agujas del reloj el número especificado de veces.B
- Gire la cara posterior del cubo en el sentido de las agujas del reloj el número especificado de veces.%
- Emite el valor en la cara dada. El valor de una cara se define como la suma de todos los cuadrados en esa cara.
Reglas
- Puede usar cualquier lenguaje creado antes o después de la fecha en que se publicó este desafío para escribir un programa o función capaz de resolver este desafío.
- La entrada se pasará a través de STDIN, como una cadena o como una matriz de caracteres (usted elige, especifique).
- La salida debe pasarse a STDOUT o como salida de la función, y debe ser un número entero, una cadena que contenga solo dígitos o una matriz de dígitos. Si tu idioma te requiere envíe una nueva línea final, puede hacerlo.
- La entrada será siempre en el formato siguiente:
([UDLRFB]\d*)*%[0-5]
. No habrá caracteres de espacio en blanco en la entrada. - La entrada para
%
siempre usará un índice basado en 0.
Este es el código de golf , por lo que la respuesta más corta en bytes gana.
Casos de prueba
%0 -> 0
%1 -> 9
%2 -> 18
%3 -> 27
%4 -> 36
%5 -> 45
R1%2 -> 27
RD3F2%5 -> 32
L1R23F1B5U9D2%3 -> 17
Para obtener más casos de prueba, consulte el intérprete de TIO . Si TIO no funciona, puede utilizar el intérprete de Lua .
4
entreR
yD
en el ejemploRD3F2%5 -> 30
?Respuestas:
Python 2 , 476 bytes
Pruébalo en línea!
Un puerto de mi respuesta Simulate A Rubik's Cube . La nueva visita me llevó a jugar golf por 47 bytes.
fuente
Cúbicamente , 1 byte
No compite porque es cojo. No aceptes esto.
Agregué que esta tarde: P
fuente