Imagine que tenemos algo de poliomino y nos gustaría identificarlos de manera única, sin embargo, los poliominos se pueden rotar, por lo que el hash ciego no nos dará la misma huella digital para una pieza y una rotación de la misma (en general).
Por ejemplo si tenemos el L-tetromino
x
x
xx
nos gustaría que tuviera la misma huella digital que cualquiera de estos:
xx
x x xxx
xxx , x or x
Nota: Solo permitimos rotaciones en el plano (es decir, son poliominos de un solo lado) y, por lo tanto, el siguiente poliomino sería diferente:
x
x
xx
Desafío
La tarea para este desafío es implementar una función / programa de huellas dactilares que tome una matriz / lista de listas / cadenas / ... con valor booleano / codifique un poliomino y devuelva una cadena: la huella digital de un poliomino . La huella digital debe ser igual para todas las rotaciones posibles (en general 4).
De entrada y salida
- y (es decir. no polyomino vacío)
- tiene la garantía de que son lo más pequeño posible (es decir. todo se recortan para que y
- tienes garantizado que la entrada es
- simplemente conectado
- no tiene agujeros
- la salida debe ser una cadena que sea igual para cada posible rotación de un poliomino
Ejemplos
Aquí hay algunas clases de equivalencia, para cada clase la huella digital debe ser la misma y para dos poliominos de dos clases distintas deben ser diferentes.
Las rotaciones del L-tetromino del ejemplo:
[[1,0],[1,0],[1,1]]
[[0,0,1],[1,1,1]]
[[1,1],[0,1],[0,1]]
[[1,1,1],[1,0,0]]
El 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]]
La unidad poliomino:
[[1]]
Una barra :
[[1,1,1,1,1]]
[[1],[1],[1],[1],[1]]
Una esquina de :
[[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]]
""
(la cadena vacía), ¿he satisfecho todos los requisitos?