Un venerato tempo di passaggio dei pedanti è quello di sottolineare che le immagini dei "cubi di Rubik" (su magliette, poster ecc.) Non sono in realtà risolvibili.
La prima cosa da controllare è che il cubo sia composto dai pezzi giusti. Per essere risolvibile, un cubo necessita di sei colori ciascuno con nove quadrati. Il cubo ha anche bisogno di ogni unità di bordo e angolo (questi sono i cubi più piccoli che compongono il cubo) per essere unici. Non solo devono essere unici, ma se due pezzi centrali sono uno di fronte all'altro, nessun bordo o pezzo d'angolo può contenere entrambi quei colori.
Una volta che hai un cubo composto da tutti i pezzi giusti, devi ancora verificare che sia risolvibile. Ci sono un paio di regole qui, quindi rimanderò a un esperto per spiegarle, lo spoiler qui sotto spiega come possiamo farlo. Se sei interessato a risolvere il problema da solo, non è necessario visitare il sito per comprendere o partecipare a questa sfida.
Il tuo compito è quello di prendere uno schema come input e determinare se si tratta effettivamente di un cubo di Rubik risolvibile. Per essere risolvibile, ci deve essere un modo per eseguire mosse valide su un cubo in modo che il cubo abbia un solo colore su ogni faccia (e le diverse facce abbiano colori diversi). La maggior parte dei cubi di Rubik ha una colorazione standard (il bianco è opposto al giallo, ecc.) Non si può presumere che lo stato di risoluzione segua questa particolare colorazione.
Una mossa valida è la rotazione in senso orario o antiorario di una singola faccia del cubo. Con la rotazione della faccia del cubo vengono ruotati anche i quadrati che delimitano la faccia, rimanendo collegati alla faccia che precedentemente toccavano.
IO
Puoi prendere il cubo in qualsiasi modo ragionevole. Se la tua lingua ha un tipo "cube-face" incorporato, buono per te, che va bene come input, in altre parole puoi prendere un array 2D della rete, del cubo, 1 3 per 3 elenchi per ogni faccia. Sii ragionevole. Se vuoi sapere se un formato specifico è un commento accettabile o esegui il ping in chat e aggiungerò la sfida per dichiararne la validità.
Il formato di input deve supportare solo fino a 9 colori possibili.
Per l'output questo è un problema decisionale, quindi dovresti generare un valore costante per "Sì, questo è un cubo di Rubik valido" e un diverso valore costante per "No, questo non è un cubo di Rubiks valido".
Questo è code-golf, quindi le risposte verranno classificate in byte con meno byte migliori.
Casi test
Ecco i casi di test. Sono formattati come la rete di un cubo con ogni quadrato come una singola lettera. Lettere diverse rappresentano colori diversi. Eventuali ulteriori test possono essere aggiunti su richiesta.
Risolvibile
RRR
RRR
RRR
GGGWWWBBBOOO
GGGWWWBBBOOO
GGGWWWBBBOOO
YYY
YYY
YYY
GRR
GRR
ORW
WWRBWYBOOGGY
GGRBWGYBBOOO
OOGRWGYWWRBB
WYO
YYB
YYB
irrisolvibile
RRR
RRR
RRR
GGGWWWBBBOOO
GGGWWWBBBOOO
GGGWYWBBBOOO
YWY
YYY
YYY
RRR
RRR
RRR
GGGWWWBBBOOO
GGGWWWBBBOOO
GGGWWWBBBOOO
YWY
YYY
YYY
RRR
RRR
GGG
GGYWYWRBBOBO
GGYWWWROBOOO
GGYWWWRBBOOO
BBB
YWY
YYY
RRW
RRW
GGG
GGYWWYEOBROO
GGYWWYEBBROO
GGOWWYWBBROO
BBB
YYW
YYO