Imagine que temos algum poliomino e gostaríamos de identificá-los exclusivamente, no entanto, os poliominos podem ser rotacionados, portanto, o hash cego não nos dará a mesma impressão digital de uma peça e uma rotação da mesma (em geral).
Por exemplo, se tivermos o L-tetromino
x
x
xx
gostaríamos que ela tivesse a mesma impressão digital que qualquer uma destas:
xx
x x xxx
xxx , x or x
Nota: somente permitimos rotações no plano (ou seja, são poliominos unilaterais) e, portanto, o seguinte poliomino seria diferente:
x
x
xx
Desafio
A tarefa para este desafio é implementar uma função / programa de impressão digital que utiliza uma matriz booleana / lista de listas / string / .. codificando um polyomino e retornando uma string - a impressão digital de um polyomino . A impressão digital deve ser igual para todas as rotações possíveis (em geral 4).
Entrada / Saída
- e (isto é. não Polyomino vazio)
- você tem a garantia de que são tão pequenos quanto possível (ie. todo são cortado para caber e
- você está garantido que a entrada é
- simplesmente conectado
- não tem buracos
- A saída deve ser uma sequência que seja a mesma para cada rotação possível de um poliomino
Exemplos
Aqui estão algumas classes de equivalência, para cada classe a impressão digital deve ser a mesma e, para quaisquer dois polioinos de duas classes distintas, eles devem diferir.
As rotações do L-tetromino a partir do exemplo:
[[1,0],[1,0],[1,1]]
[[0,0,1],[1,1,1]]
[[1,1],[0,1],[0,1]]
[[1,1,1],[1,0,0]]
O J-tetromino:
[[0,1],[0,1],[1,1]]
[[1,1,1],[0,0,1]]
[[1,1],[1,0],[1,0]]
[[1,0,0],[1,1,1]]
A unidade polyomino:
[[1]]
Uma barra :
[[1,1,1,1,1]]
[[1],[1],[1],[1],[1]]
A canto:
[[1,1],[1,0]]
[[1,0],[1,1]]
[[0,1],[1,1]]
[[1,1],[0,1]]
W-pentomino:
[[1,0,0],[1,1,0],[0,1,1]]
[[0,0,1],[0,1,1],[1,1,0]]
[[1,1,0],[0,1,1],[0,0,1]]
[[0,1,1],[1,1,0],[1,0,0]]
""
(a sequência vazia), atendi a todos os requisitos?