Possiamo rappresentare un cubo di Rubik come una rete come segue (una volta risolto):
WWW
WWW
WWW
GGGRRRBBBOOO
GGGRRRBBBOOO
GGGRRRBBBOOO
YYY
YYY
YYY
Ogni lettera rappresenta il colore corrispondente ( W
è bianco, G
verde ecc.)
È stato dimostrato che ci sono esattamente (~ quintilioni) di permutazioni diverse in cui un cubo di Rubik può trovarsi.
Il tuo compito è prendere un numero intero compreso tra e e generare la permutazione corrispondente, nel modo mostrato sopra. Puoi scegliere come ordinare le permutazioni, ma l'algoritmo che usi deve essere mostrato per generare una permutazione unica e corretta per ogni possibile input.
Regole di permutazione non valide
Tratto da questa pagina
Per cominciare, il centro di ciascuna faccia 3x3 deve rimanere lo stesso, poiché il quadrato centrale su un cubo di Rubik non può essere ruotato. L'intero cubo può essere ruotato, modificando la posizione di una faccia, ma ciò non influisce sulla rete del cubo.
Se diciamo che ogni permutazione ha una parità, basata sulla parità del numero di swap per raggiungere quella permutazione, possiamo dire
Ogni angolo ha tre possibili orientamenti. Può essere orientato correttamente (0), in senso orario (1) o antiorario (2). La somma degli orientamenti degli angoli rimane sempre divisibile per 3
Ogni rotazione legale sul cubo di Rubik lancia sempre un numero pari di spigoli, quindi non può esserci un solo pezzo orientato in modo errato.
Considerando la permutazione di tutti gli angoli e i bordi, la parità complessiva deve essere pari, il che significa che ogni mossa legale esegue sempre l'equivalente di un numero pari di swap (ignorando l'orientamento)
Ad esempio le seguenti tre reti sono output non validi:
WWW
WWW
WWW
GGGWWWBBBOOO
GGGRRRBBBOOO
GGGRRRBBBOOO
YYY
YYY
YYY
(Too many whites/not enough reds)
WRW
WRW
WRW
GGGRWRBBBOOO
GGGWRRBBBOOO
YYGRWROOOBBB
YYY
GGY
YYY
(There are two red/green center squares and no white/yellow center squares.
In all valid permutations, the center squares are all different colours)
WWW
WWW
WWW
GGGRRRBBBOOO
GGGRRRBBBOOO
GGGRRRBBOYOO
YYY
YYY
YYB
(The yellow/orange/blue corner is rotated into an impossible permutation)
Regole
- È necessario dimostrare, nel modo desiderato, che l'algoritmo è valido. Non è necessario enumerare ogni singola permutazione, purché si dimostri la validità del proprio algoritmo.
- È necessario includere una sorta di prova di validità nella risposta. Questa prova può dimostrare la validità in qualsiasi metodo di prova accettato, ad eccezione dell'enumerazione di tutte le possibilità.
- Se lo desideri, puoi scegliere di utilizzare un metodo di input alternativo, purché:
- L'input è limitato
- Ogni input corrisponde a un output univoco
- Spieghi chiaramente il formato di input e come corrisponde a ciascun output
- È possibile modificare i caratteri utilizzati per utilizzare 6 caratteri ASCII diversi, tra 33 (
!
) e 126 (~
), anzichéWGRBOY
- È possibile produrre in qualsiasi modo desiderato, purché formi una chiara rappresentazione di un cubo in cui sia possibile mostrare tutte e 6 le facce, inclusa qualsiasi rete di cubi valida, una singola stringa allineata o un rendering 3D. Se non sei sicuro di un formato specifico, non esitare a chiedere nei commenti.
Questo è un code-golf quindi vince il codice più breve, in byte, in ogni lingua.
Esempio di output validi
YYY
YYY
YYY
GGGRRRBBBOOO
GGGRRRBBBOOO
GGGRRRBBBOOO
WWW
WWW
WWW
(The `W` and `Y` faces have been swapped)
ZZZ
+++
+}}
+[[}77ZZ7bbb
bb[}[[7}}+Z7
bb[}++[}}+Z7
7bb
[7Z
[7Z
(To start with, the colours have been mapped W -> +, G -> b, R -> [, B -> }, O -> Z and Y -> 7.
Then, the moves L, R, U and F' have been applied, in that order.
Notice that each centre square is different, and corresponds to the same colour as in the mapping)