Imaginez que nous ayons du polyomino et que nous aimerions les identifier de manière unique, mais les polyominos peuvent être tournés, donc les hacher aveuglément ne nous donnera pas la même empreinte digitale pour un morceau et une rotation de celui-ci (en général).
Par exemple, si nous avons le L-tetromino
x
x
xx
nous aimerions qu'il ait la même empreinte digitale que n'importe lequel d'entre eux:
xx
x x xxx
xxx , x or x
Remarque: Nous n'autorisons que les rotations sur le plan (c'est-à-dire qu'il s'agit de polyominos unilatéraux) et, par conséquent, le polyomino suivant serait différent:
x
x
xx
Défi
La tâche pour ce défi est d'implémenter une fonction / un programme d'empreintes digitales qui prend une matrice booléenne / évaluée / liste de listes / chaîne / .. encodant un polyomino et renvoyant une chaîne - l'empreinte digitale d'un polyomino. L'empreinte doit être égale pour toutes les rotations possibles (en général 4).
Entrée sortie
- et (c'est-à-dire pas de polyomino vide)
- vous êtes assuré que sont aussi petits que possible (c'est-à-dire que tous les sont coupés pour s'adapter à et
- vous êtes assuré que l'entrée est
- simplement connecté
- n'a pas de trous
- la sortie doit être une chaîne qui est la même pour chaque rotation possible d'un polyomino
Exemples
Voici quelques classes d'équivalence, pour chaque classe, l'empreinte digitale doit être la même et pour deux polyominos de deux classes distinctes, elles doivent différer.
Les rotations du L-tétromino de l'exemple:
[[1,0],[1,0],[1,1]]
[[0,0,1],[1,1,1]]
[[1,1],[0,1],[0,1]]
[[1,1,1],[1,0,0]]
Le J-tétromino:
[[0,1],[0,1],[1,1]]
[[1,1,1],[0,0,1]]
[[1,1],[1,0],[1,0]]
[[1,0,0],[1,1,1]]
L'unité polyomino:
[[1]]
Une barre :
[[1,1,1,1,1]]
[[1],[1],[1],[1],[1]]
Un coin :
[[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]]
""
(la chaîne vide), ai-je satisfait à toutes les exigences?