Podemos representar um cubo de Rubik como uma rede da seguinte maneira (quando resolvido):
WWW
WWW
WWW
GGGRRRBBBOOO
GGGRRRBBBOOO
GGGRRRBBBOOO
YYY
YYY
YYY
Cada letra representa a cor correspondente ( W
é branca, G
verde etc.)
Foi demonstrado que existem exatamente (~ quintilhões) permutações diferentes nas quais um cubo de Rubik pode estar.
Sua tarefa é pegar um número inteiro entre e e gerar a permutação correspondente, da maneira mostrada acima. Você pode escolher como as permutações são ordenadas, mas o algoritmo usado deve ser mostrado para gerar uma permutação exclusiva e correta para cada entrada possível.
Regras de permutação inválidas
Retirado desta página
Para começar, o centro de cada face 3x3 deve permanecer o mesmo, pois o quadrado central no cubo de Rubik não pode ser girado. O cubo inteiro pode ser girado, mudando onde uma face parece estar, mas isso não afeta a rede do cubo.
Se dissermos que cada permutação tem paridade, com base na paridade do número de swaps para atingir essa permutação, podemos dizer
Cada peça de canto tem três orientações possíveis. Pode ser orientado corretamente (0), no sentido horário (1) ou no sentido anti-horário (2). A soma das orientações dos cantos sempre permanece divisível por 3
Cada rotação legal no Cubo de Rubik sempre vira um número par de arestas, portanto não pode haver apenas uma peça orientada incorretamente.
Considerando a permutação de todos os cantos e arestas, a paridade geral deve ser uniforme, o que significa que cada movimento legal sempre executa o equivalente a um número par de trocas (ignorando a orientação)
Por exemplo, as três redes a seguir são saídas inválidas:
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)
Regras
- Você deve provar, da maneira que desejar, que o algoritmo é válido. Você não precisa enumerar todas as permutações, desde que prove a validade do seu algoritmo.
- Você deve incluir algum tipo de prova de validade em sua resposta. Essa prova pode provar a validade de qualquer método de prova aceito, exceto para enumerar todas as possibilidades.
- Você pode optar por usar um método de entrada alternativo, se desejar, desde que:
- A entrada é limitada
- Cada entrada corresponde a uma saída única
- Você explica claramente o formato de entrada e como ele corresponde a cada saída
- Você pode alterar os caracteres usados para usar 6 caracteres ASCII diferentes, entre 33 (
!
) e 126 (~
), em vez deWGRBOY
- Você pode produzir da maneira que desejar, contanto que forme uma representação clara de um cubo onde todas as 6 faces possam ser exibidas, incluindo qualquer rede de cubos válida, uma única linha alinhada ou uma renderização em 3D. Se você não tiver certeza sobre um formato específico, não hesite em perguntar nos comentários.
Este é um código-golfe, portanto o código mais curto, em bytes, em cada idioma vence.
Exemplo de saídas válidas
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)