Immagina di avere un po 'di poliomino e vorremmo identificarli in modo univoco, tuttavia i polominomi possono essere ruotati, quindi l'hash ciecamente non ci darà la stessa impronta digitale per un pezzo e una sua rotazione (in generale).
Ad esempio se abbiamo il L-tetromino
x
x
xx
vorremmo che avesse la stessa impronta digitale di uno di questi:
xx
x x xxx
xxx , x or x
Nota: consentiamo solo rotazioni sul piano (cioè sono polominomi unilaterali) e quindi il seguente poliomino sarebbe diverso:
x
x
xx
Sfida
Il compito per questa sfida è di attuare un fingerprinting funzione / programma che prende un booleana / matrice -valued / lista di liste / string / .. che codifica per una polyomino e restituisce una stringa - l'impronta digitale di un polyomino . L'impronta digitale deve essere uguale per tutte le possibili rotazioni (in generale 4).
Input Output
- e (es. nessun poliomino vuoto)
- hai la certezza che sono il più piccoli possibile (cioè tutti gli sono tagliati per adattarsi a e
- sei garantito che l'input è
- semplicemente connesso
- non ha buchi
- l'output deve essere una stringa che è la stessa per ogni possibile rotazione di un poliomino
Esempi
Ecco alcune classi di equivalenza, per ogni classe l'impronta digitale deve essere la stessa e per ogni due poliomi di due classi distinte devono differire.
Le rotazioni del L-tetromino dall'esempio:
[[1,0],[1,0],[1,1]]
[[0,0,1],[1,1,1]]
[[1,1],[0,1],[0,1]]
[[1,1,1],[1,0,0]]
Il 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]]
L'unità poliomino:
[[1]]
Una barra :
[[1,1,1,1,1]]
[[1],[1],[1],[1],[1]]
Un angolo :
[[1,1],[1,0]]
[[1,0],[1,1]]
[[0,1],[1,1]]
[[1,1],[0,1]]
W-pentamino:
[[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]]
""
(stringa vuota), ho soddisfatto tutti i requisiti?