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 F1caricherà il comando Fin memoria, quindi lo chiamerà con l'argomento 1. Inoltre, F13caricherà il comando Fin 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 .
4tra Re Dnell'esempio RD3F2%5 -> 30?