Cubically è un linguaggio esoterico abbastanza nuovo in grado di creare brevi risposte da golf per un sottoinsieme molto specifico di problemi. È unico in quanto memorizza la memoria sotto forma di un cubo di Rubik 3x3, rendendo i calcoli molto meno banali rispetto alla maggior parte delle lingue. In Cubically, il programmatore deve ruotare il cubo interno per manipolare i valori memorizzati sulle facce, quindi utilizzare tali valori nei loro calcoli. I calcoli vengono eseguiti su un singolo numero intero a 32 bit memorizzato su una faccia immaginaria nota come "blocco note". Inoltre, Cubically può richiedere l'input dell'utente e memorizzarlo in un buffer di input costituito da un solo valore intero.
Il cubo
Le facce del cubo sono U p, D own, L eft, R ight, F ront e B ack:
UUU
UUU
UUU
LLLFFFRRRBBB
LLLFFFRRRBBB
LLLFFFRRRBBB
DDD
DDD
DDD
All'avvio del programma, il cubo viene inizializzato in modo tale che ogni quadrato su quella faccia sia uguale all'indice basato su 0 di quella faccia:
000
000
000
111222333444
111222333444
111222333444
555
555
555
Ogni volta che una faccia viene ruotata, viene sempre ruotata in senso orario:
Cubically> F1
000
000
111
115222033444
115222033444
115222033444
333
555
555
Il valore di una faccia è definito come la somma di ogni quadrato su quella faccia. Ad esempio, nel cubo sopra, il valore di face 0
è 3.
Sintassi
I comandi vengono eseguiti caricando prima un comando in memoria, quindi passandogli gli argomenti per eseguire il comando. Ad esempio, il comando F1
caricherà il comando F
in memoria, quindi lo chiamerà con l'argomento 1
. Inoltre, F13
caricherà il comando F
in memoria, quindi lo chiamerà con l'argomento 1
, quindi lo chiamerà con l'argomento 3
. Qualsiasi carattere non numerico viene trattato come un comando e qualsiasi cifra viene trattata come un argomento.
Il tuo compito
Il tuo compito è implementare il cubo di memoria interna di Cubically in una lingua a tua scelta. Il tuo codice dovrebbe essere in grado di eseguire un sottoinsieme molto piccolo della lingua.
comandi
R
- Ruota la faccia destra del cubo in senso orario per il numero di volte specificato.L
- Ruota la faccia sinistra del cubo in senso orario per il numero di volte specificato.U
- Ruotare la faccia superiore del cubo in senso orario per il numero di volte specificato.D
- Ruotare la faccia inferiore del cubo in senso orario per il numero di volte specificato.F
- Ruotare la faccia anteriore del cubo in senso orario per il numero di volte specificato.B
- Ruotare la faccia posteriore del cubo in senso orario per il numero di volte specificato.%
- Emette il valore sulla faccia data. Il valore di una faccia è definito come la somma di tutti i quadrati su quella faccia.
Regole
- È possibile utilizzare qualsiasi linguaggio creato prima o dopo la data di pubblicazione della sfida per scrivere un programma o una funzione in grado di risolverla.
- L'input verrà passato tramite STDIN, come stringa o come matrice di caratteri (si sceglie, si prega di specificare).
- L'output deve essere passato a STDOUT o come output della funzione e deve essere un numero intero, una stringa contenente solo cifre o un array di cifre. Se la tua lingua richiede l' output di una nuova riga finale, puoi farlo.
- L'ingresso sarà sempre nel formato seguente:
([UDLRFB]\d*)*%[0-5]
. Non ci saranno caratteri spazi bianchi nell'input. - L'input per
%
utilizzerà sempre un indice basato su 0.
Questo è code-golf , quindi vince la risposta più breve in byte.
Casi test
%0 -> 0
%1 -> 9
%2 -> 18
%3 -> 27
%4 -> 36
%5 -> 45
R1%2 -> 27
RD3F2%5 -> 32
L1R23F1B5U9D2%3 -> 17
Per altri casi di test, controlla l'interprete TIO . Se TIO non funziona, è possibile utilizzare invece l' interprete Lua .
4
tra R
e D
nell'esempio RD3F2%5 -> 30
?