Cubically est un langage ésotérique assez nouveau capable de créer des réponses courtes et de type golf pour un sous-ensemble très spécifique de problèmes. Il est unique en ce qu'il stocke la mémoire sous la forme d'un cube Rubik 3x3, ce qui rend les calculs beaucoup moins triviaux que dans la plupart des langues. Dans Cubically, le programmeur doit faire pivoter le cube interne afin de manipuler les valeurs stockées sur les faces, puis utiliser ces valeurs dans leurs calculs. Les calculs sont effectués sur un seul entier 32 bits stocké sur une face imaginaire connue sous le nom de "bloc-notes". De plus, Cubically peut demander une entrée utilisateur et la stocker dans un tampon d'entrée composé uniquement d'une seule valeur entière.
Le cube
Les faces du cube sont U p, D own, L eft, R ight, F ront et B ack:
UUU
UUU
UUU
LLLFFFRRRBBB
LLLFFFRRRBBB
LLLFFFRRRBBB
DDD
DDD
DDD
Lorsque le programme démarre, le cube est initialisé de telle sorte que chaque carré de cette face est égal à l'index de base de cette face:
000
000
000
111222333444
111222333444
111222333444
555
555
555
Chaque fois qu'un visage est tourné, il est toujours tourné dans le sens des aiguilles d'une montre:
Cubically> F1
000
000
111
115222033444
115222033444
115222033444
333
555
555
La valeur d'une face est définie comme étant la somme de chaque carré de cette face. Par exemple, dans le cube ci-dessus, la valeur de face 0
est 3.
Syntaxe
Les commandes sont exécutées en chargeant d'abord une commande en mémoire, puis en lui passant des arguments pour exécuter la commande. Par exemple, la commande F1
charge la commande F
en mémoire, puis l'appelle avec l'argument 1
. En outre, F13
charge la commande F
en mémoire, puis l'appelle avec l'argument 1
, puis l'appelle avec l'argument 3
. Tout caractère non numérique est traité comme une commande et tout chiffre est traité comme un argument.
Ta tâche
Votre tâche consiste à implémenter le cube de mémoire interne de Cubically dans la langue de votre choix. Votre code devrait pouvoir exécuter un très petit sous-ensemble de la langue.
Commandes
R
- Faites pivoter la face droite du cube dans le sens horaire le nombre de fois spécifié.L
- Faites pivoter la face gauche du cube dans le sens horaire le nombre de fois spécifié.U
- Faites pivoter la face supérieure du cube dans le sens horaire le nombre de fois spécifié.D
- Faites pivoter la face inférieure du cube dans le sens horaire le nombre de fois spécifié.F
- Faites pivoter la face avant du cube dans le sens horaire le nombre de fois spécifié.B
- Faites pivoter la face arrière du cube dans le sens horaire le nombre de fois spécifié.%
- Affiche la valeur sur la face donnée. La valeur d'une face est définie comme la somme de tous les carrés de cette face.
Règles
- Vous pouvez utiliser n'importe quelle langue créée avant ou après la date de publication de ce défi pour écrire un programme ou une fonction capable de résoudre ce défi.
- L'entrée sera transmise via STDIN, sous forme de chaîne ou de tableau de caractères (vous choisissez, veuillez spécifier).
- La sortie doit être transmise à STDOUT ou en tant que sortie de la fonction, et elle doit être soit un entier, une chaîne contenant uniquement des chiffres, soit un tableau de chiffres. Si votre langue vous oblige à produire une nouvelle ligne de fin, vous pouvez le faire.
- L'entrée sera toujours dans le format suivant:
([UDLRFB]\d*)*%[0-5]
. Il n'y aura aucun espace blanc dans l'entrée. - L'entrée pour
%
utilisera toujours un index basé sur 0.
C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
Cas de test
%0 -> 0
%1 -> 9
%2 -> 18
%3 -> 27
%4 -> 36
%5 -> 45
R1%2 -> 27
RD3F2%5 -> 32
L1R23F1B5U9D2%3 -> 17
Pour plus de cas de test, consultez l'interpréteur TIO . Si TIO ne fonctionne pas, vous pouvez utiliser l'interpréteur Lua à la place.
4
entre R
et D
dans l'exemple RD3F2%5 -> 30
?