Wyobraźmy sobie, że mamy poliomino i chcielibyśmy je jednoznacznie zidentyfikować, jednak poliaminy można obracać, więc ślepe ich haszowanie nie da nam tego samego odcisku palca dla kawałka i jego obrotu (ogólnie).
Na przykład, jeśli mamy L-tetromino
x
x
xx
chcielibyśmy mieć taki sam odcisk palca, jak którykolwiek z tych:
xx
x x xxx
xxx , x or x
Uwaga: Dopuszczamy tylko obroty na płaszczyźnie (tzn. Są to jednostronne poliaminy), dlatego następujący poliomino byłby inny:
x
x
xx
Wyzwanie
Zadaniem tego wyzwania jest zaimplementowanie funkcji / programu do pobierania odcisków palców, który pobiera macierz logiczną Boolean / -wartość / listę list / ciąg / .. kodującą polyomino i zwraca ciąg znaków - odcisk palca polyomino . Odcisk palca musi być taki sam dla wszystkich możliwych obrotów (ogólnie 4).
Wejście wyjście
- i (tj. nie jest pusty Polyomino)
- masz pewność, że są tak małe, jak to możliwe (tzn. wszystkie są przycięte, aby pasowały do i
- masz gwarancję, że dane wejściowe są
- po prostu podłączony
- nie ma dziur
- wyjście musi być ciągiem, który jest taki sam dla każdego możliwego obrotu poliomino
Przykłady
Oto niektóre klasy równoważności, dla każdej klasy odcisk palca musi być taki sam, a dla dowolnych dwóch wielomianów z dwóch różnych klas muszą się różnić.
Obroty L-tetromino z przykładu:
[[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-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]]
Jednostka poliomino:
[[1]]
Pasek :
[[1,1,1,1,1]]
[[1],[1],[1],[1],[1]]
narożnik:
[[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]]
""
(pusty ciąg), czy spełniłem wszystkie wymagania?