Уявіть, що у нас є кілька поліоміно, і ми хотіли б їх однозначно ідентифікувати, однак поліоміно можна обертати, тому сліпе стискання їх не дасть нам однакового відбитка пальця для шматка та його обертання (загалом).
Наприклад, якщо у нас є L-тетроміно
x
x
xx
ми хотіли б, щоб він мав такий самий відбиток пальців, як і будь-який із цих:
xx
x x xxx
xxx , x or x
Примітка. Ми допускаємо обертання лише на площині (тобто вони є односторонніми полиоминосами), і тому наступне поліоміно буде іншим:
x
x
xx
Виклик
Завданням цього завдання є реалізація функції відбитків пальців / програми, яка займає булева / матрицю кодує поліоміно та повертає рядок - відбиток поліоміно . Відбиток пальця повинен бути рівним для всіх можливих обертів (загалом 4).
Введення-виведення
- і (тобто немає порожнього полиомино)
- Ви гарантовано гарантуєте, що є настільки маленькими, наскільки це можливо (тобто всі оброблені так, щоб відповідати і
- Ви гарантуєте, що вхід є
- просто підключений
- не має отворів
- Вихід повинен бути рядком, який однаковий для кожного можливого обертання поліоміно
Приклади
Ось кілька класів еквівалентності, для кожного класу відбиток пальців повинен бути однаковим, а для будь-яких двох поліомінів з двох різних класів вони повинні відрізнятися.
Обертання 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]]
""
(порожній рядок), чи задовольняю я всі вимоги?