Представьте, что у нас есть некоторые polyomino и мы хотели бы однозначно идентифицировать их, однако polyominos можно вращать, поэтому слепое их хеширование не даст нам одинаковых отпечатков пальцев для части и ее поворота (в целом).
Например, если у нас есть L-тетромино
x
x
xx
мы хотели бы иметь такой же отпечаток пальца, как любой из них:
xx
x x xxx
xxx , x or x
Примечание. Мы допускаем только повороты на плоскости (т. Е. Они являются односторонними многочленами), и поэтому следующий полиомино будет другим:
x
x
xx
Вызов
Задача для этой задачи состоит в том, чтобы реализовать функцию / программу снятия отпечатков пальцев, которая принимает булеву / -значную матрицу / список списков / строку / .., кодирующую polyomino, и возвращает строку - отпечаток пальца Полимин. Отпечаток пальца должен быть одинаковым для всех возможных поворотов (в общем 4).
Ввод, вывод
- n ≥ 1 и (т. е. нет пустого polyomino)
- вы гарантировано, что настолько малы, насколько это возможно (т.е. все обрезаются, чтобы соответствовать и
- вы гарантировано, что вход
- просто подключен
- не имеет отверстий
- вывод должен быть строкой, которая является одинаковой для каждого возможного поворота polyomino
Примеры
Вот некоторые классы эквивалентности, для каждого класса отпечаток должен быть одинаковым, а для любых двух полиоминиумов из двух разных классов они должны отличаться.
Вращения L-тетромино из примера:
[[1,0],[1,0],[1,1]]
[[0,0,1],[1,1,1]]
[[1,1],[0,1],[0,1]]
[[1,1,1],[1,0,0]]
J-тетромино:
[[0,1],[0,1],[1,1]]
[[1,1,1],[0,0,1]]
[[1,1],[1,0],[1,0]]
[[1,0,0],[1,1,1]]
Блок полиомино:
[[1]]
бар:
[[1,1,1,1,1]]
[[1],[1],[1],[1],[1]]
угол:
[[1,1],[1,0]]
[[1,0],[1,1]]
[[0,1],[1,1]]
[[1,1],[0,1]]
W-пентомино:
[[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]]
""
(пустую строку), удовлетворял ли я всем требованиям?