Bazı polyomino'muz olduğunu ve bunları benzersiz bir şekilde tanımlamak istediğimizi düşünün , ancak polyominolar döndürülebilir, bu yüzden onları körü körüne hash etmek bize bir parça ve bir rotasyon için aynı parmak izini vermez (genel olarak).
Örneğin, L-tetromino'muz varsa
x
x
xx
bunlardan herhangi biriyle aynı parmak izine sahip olmasını istiyoruz:
xx
x x xxx
xxx , x or x
Not: Sadece düzlemde rotasyonlara izin veriyoruz (yani, tek taraflı polyominos'lardır) ve bu nedenle aşağıdaki polyomino farklı olacaktır:
x
x
xx
Meydan okuma
Bu zorluğun görevi, Boolean / değerli bir matris / liste / string / .. alan bir parmak izi fonksiyonu / programı uygulamaktır. . Parmak izi, olası tüm rotasyonlar için eşit olmalıdır (genel olarak 4).
Giriş çıkış
- ve (yani boş bir polomino yok)
- olabildiğince küçük olduğu garanti edilir (yani, tümü ve n'ye uyacak şekilde kesilir
- girdinin
- basitçe bağlandı
- deliği yok
- çıktı bir polyomino'nun olası her dönüşü için aynı olan bir dize olmalıdır
Örnekler
İşte bazı denklik sınıfları, her sınıf için parmak izi aynı olmalı ve iki farklı sınıftan herhangi iki poliomino için farklı olmaları gerekir.
L-tetromino'nun örnekten dönüşleri:
[[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]]
Birim polikomino:
[[1]]
Bir bar:
[[1,1,1,1,1]]
[[1],[1],[1],[1],[1]]
Bir köşe:
[[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]]
""
(boş dize), tüm gereksinimleri karşıladım mı?