Stellen Sie sich vor, wir haben ein Polyomino und möchten es eindeutig identifizieren, aber die Polyominos können gedreht werden, so dass sie blindlings nicht den gleichen Fingerabdruck für ein Stück und eine Drehung davon (im Allgemeinen) ergeben.
Zum Beispiel, wenn wir den L-Tetromino haben
x
x
xx
Wir möchten, dass es den gleichen Fingerabdruck wie die folgenden hat:
xx
x x xxx
xxx , x or x
Hinweis: Wir erlauben nur Rotationen in der Ebene (dh es handelt sich um einseitige Polyominos) und daher wäre das folgende Polyomino ein anderes:
x
x
xx
Herausforderung
Die Aufgabe für diese Herausforderung ist eine Abnahme von Fingerabdrücken-Funktion / Programm zu implementieren , die eine nimmt Boolean / -wertigen Matrix / Liste von Listen / string / .. Codieren eines polyomino und gibt einen String - den Fingerabdruck eines polyomino . Der Fingerabdruck muss für alle möglichen Rotationen gleich sein (in der Regel 4).
Input-Output
- und (dh kein leeres Polyomino)
- Sie haben die Garantie, dass so klein wie möglich ist (dh alle werden auf und n zugeschnitten)
- Ihnen wird garantiert, dass der Eingang ist
- einfach verbunden
- hat keine Löcher
- output muss eine Zeichenfolge sein, die für jede mögliche Drehung eines Polyominos gleich ist
Beispiele
Hier sind einige Äquivalenzklassen: Für jede Klasse muss der Fingerabdruck derselbe sein und für zwei beliebige Polyominos aus zwei verschiedenen Klassen müssen sie sich unterscheiden.
Die Drehungen des L-Tetrominos aus dem Beispiel:
[[1,0],[1,0],[1,1]]
[[0,0,1],[1,1,1]]
[[1,1],[0,1],[0,1]]
[[1,1,1],[1,0,0]]
Der 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]]
Die Einheit Polyomino:
[[1]]
A bar:
[[1,1,1,1,1]]
[[1],[1],[1],[1],[1]]
Eine Ecke:
[[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]]
""
(die leere Zeichenfolge) ausgegeben habe , habe ich alle Anforderungen erfüllt?