Hãy tưởng tượng chúng ta có một số polyomino và muốn xác định duy nhất chúng, tuy nhiên polyominos có thể được xoay, do đó, việc băm chúng một cách mù quáng sẽ không cho chúng ta cùng một dấu vân tay và một vòng quay của chúng (nói chung).
Ví dụ: nếu chúng ta có L-tetromino
x
x
xx
chúng tôi muốn nó có cùng dấu vân tay như bất kỳ thứ nào trong số này:
xx
x x xxx
xxx , x or x
Lưu ý: Chúng tôi chỉ cho phép quay trên mặt phẳng (nghĩa là chúng là polyominos một phía) và do đó polyomino sau sẽ là một dạng khác:
x
x
xx
Thử thách
Nhiệm vụ cho thử thách này là triển khai chức năng / chương trình lấy dấu vân tay, lấy Boolean / ma trận -valued / danh sách liệt kê / chuỗi / .. mã hóa một polyomino và trả về một chuỗi - dấu vân tay của một polyomino . Dấu vân tay phải bằng nhau cho tất cả các phép quay có thể (nói chung 4).
Đầu ra đầu vào
- và (tức. không polyomino trống)
- bạn được đảm bảo rằng càng nhỏ càng tốt (ví dụ: tất cả được cắt bớt để phù hợp với và
- bạn được đảm bảo rằng đầu vào là
- kết nối đơn giản
- không có lỗ
- đầu ra phải là một chuỗi giống nhau cho mỗi vòng quay có thể có của một polyomino
Ví dụ
Dưới đây là một số lớp tương đương, đối với mỗi lớp, dấu vân tay phải giống nhau & đối với bất kỳ hai polyominos nào từ hai lớp khác nhau, chúng phải khác nhau.
Các phép quay của L-tetromino từ ví dụ:
[[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]]
Các polyomino đơn vị:
[[1]]
Một thanh :
[[1,1,1,1,1]]
[[1],[1],[1],[1],[1]]
Một góc:
[[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]]
""
(chuỗi rỗng), tôi đã thỏa mãn tất cả các yêu cầu chưa?