Um venerado tempo de passagem dos pedantes é apontar que as imagens dos "Cubos de Rubik" (em camisetas, pôsteres etc.) não são realmente solucionáveis.
A primeira coisa que deve ser verificada é que o cubo é composto pelas peças certas. Para ser solucionável, um cubo precisa de seis cores, cada uma com nove quadrados. O cubo também precisa que cada unidade de borda e canto (esses são os cubos menores que compõem o cubo) sejam exclusivos. Não apenas devem ser únicas, mas se duas peças centrais estiverem opostas, nenhuma aresta ou peça de canto pode conter ambas as cores.
Depois de ter um cubo composto de todas as peças certas, você ainda precisa verificar se ele pode ser solucionado. Existem algumas regras aqui, então vou recorrer a um especialista para explicá-las, o spoiler abaixo explica como podemos fazer isso. Se você estiver interessado em resolver o problema por conta própria, não precisará visitar o site para entender ou participar desse desafio.
Sua tarefa é pegar um padrão como entrada e determinar se é de fato um cubo de Rubik solucionável. Para ser solucionável, deve haver uma maneira de executar movimentos válidos em um cubo para que o cubo tenha apenas uma cor em cada face (e as diferentes faces tenham cores diferentes). A maioria dos cubos de Rubik tem uma cor padrão (branco é oposto a amarelo etc.). Você não pode assumir que o estado de resolução segue essa cor específica.
Um movimento válido é a rotação no sentido horário ou anti-horário de uma única face do cubo. Com a rotação da face do cubo, todos os quadrados adjacentes à face também são rotacionados, permanecendo conectados à face em que estavam tocando anteriormente.
IO
Você pode pegar o cubo de qualquer maneira razoável. Se seu idioma possui algum tipo de "face do cubo" embutido, bom para você, isso é bom como entrada; caso contrário, você pode pegar uma matriz 2D da rede, do cubo, 1 3 por 3 listas para cada face. Apenas seja razoável. Se você quiser saber se um formato específico é aceitável, faça um comentário ou envie um ping para mim no bate-papo, e eu adicionarei o desafio de declarar sua validade.
Seu formato de entrada precisa suportar apenas 9 cores possíveis.
Para saída, este é um problema de decisão, portanto, você deve gerar um valor constante para "Sim, este é um cubo de Rubik válido" e um valor constante diferente para "Não, este não é um cubo de Rubiks válido".
Isso é código-golfe, então as respostas serão pontuadas em bytes, com menos bytes sendo melhores.
Casos de teste
Aqui estão os casos de teste. Eles são formatados como a rede de um cubo com cada quadrado como uma única letra. Letras diferentes representam cores diferentes. Mais casos de teste podem ser adicionados mediante solicitação.
Solvable
RRR
RRR
RRR
GGGWWWBBBOOO
GGGWWWBBBOOO
GGGWWWBBBOOO
YYY
YYY
YYY
GRR
GRR
ORW
WWRBWYBOOGGY
GGRBWGYBBOOO
OOGRWGYWWRBB
WYO
YYB
YYB
Insolúvel
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