Bayangkan kita memiliki beberapa polyomino dan ingin mengidentifikasinya secara unik, namun polyomino dapat diputar, jadi membabi buta dengan hashing tidak akan memberi kita sidik jari yang sama untuk sebuah karya dan rotasi darinya (secara umum).
Sebagai contoh jika kita memiliki L-tetromino
x
x
xx
kami ingin memiliki sidik jari yang sama dengan yang berikut ini:
xx
x x xxx
xxx , x or x
Catatan: Kami hanya mengizinkan rotasi di pesawat (mis., Itu adalah polyominos satu sisi) dan karenanya polyomino berikut akan berbeda:
x
x
xx
Tantangan
Tugas untuk tantangan ini adalah untuk mengimplementasikan fungsi-fungsi / program sidik jari yang membutuhkan Boolean / -nilai matriks / daftar daftar / string / .. menyandikan sebuah polyomino dan mengembalikan sebuah string - sidik jari dari sebuah polyomino . Sidik jari harus sama untuk semua kemungkinan rotasi (secara umum 4).
Input output
- dan (mis. tidak ada polyomino kosong)
- Anda dijamin bahwa sekecil mungkin (mis. semua dipangkas agar sesuai dengan dan
- Anda dijamin inputnya
- cukup terhubung
- tidak memiliki lubang
- output harus berupa string yang sama untuk setiap kemungkinan rotasi polomino
Contohnya
Berikut adalah beberapa kelas kesetaraan, untuk setiap kelas sidik jari harus sama & untuk setiap dua polyominos dari dua kelas berbeda, mereka harus berbeda.
Rotasi L-tetromino dari contoh:
[[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]]
Unit polyomino:
[[1]]
A bar:
[[1,1,1,1,1]]
[[1],[1],[1],[1],[1]]
Sebuah sudut:
[[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]]
""
(string kosong), sudahkah saya memenuhi semua persyaratan?