Herausforderung
Schreiben Sie ein Programm, das bei einem zweidimensionalen booleschen Array (äquivalent eine monochromatische Bitmap) eine Reihe von Polygonen ausgibt, die den Umriss des Bereichs beschreiben, der „wahr“ ist (1).
Die Eingabe erfolgt als Folge von '#'
(Hash), ' '
(Leerzeichen) und \n
(Zeilenumbruch) Zeichen. Linien können unterschiedlich lang sein. In diesem Fall werden die fehlenden Teile als Leerzeichen angenommen. Die Ausgabe sollte eine (durch Zeilenumbrüche getrennte) Liste von Polygonen sein, wobei jedes Polygon durch eine (durch Kommas getrennte) Liste von Koordinaten dargestellt wird.
Beispiele & Anforderungen
Die Koordinaten müssen im Uhrzeigersinn aufgelistet sein. Eingang:
#
Akzeptable Ausgaben umfassen:
(0,0), (1,0), (1,1), (0,1) (1,0), (1,1), (0,1), (0,0) (1,1), (0,1), (0,0), (1,0) (0,1), (0,0), (1,0), (1,1)
Disjunkte Regionen müssen mehrere Polygone zurückgeben. Eingang:
# #
Beispielausgabe (die tatsächliche Ausgabe muss aus zwei Zeilen bestehen):
(0,0), (1,0), (1,1), (0,1) (2,0), (3,0), (3,1), (2,1)
Löcher in einem Polygon müssen als separates Polygon aufgeführt werden, jedoch gegen den Uhrzeigersinn. Eingang:
### # # ###
Beispielausgabe:
(0,0), (3,0), (3,3), (0,3) (1,1), (1,2), (2,2), (2,1)
Sie können frei wählen, ob sich diagonal benachbarte Scheitelpunkte verbinden oder nicht. Eingang:
# #
Beispielausgabe:
(0,0), (1,0), (1,1), (0,1) (1,1), (2,1), (2,2), (1,2)
oder
(0,0), (1,0), (1,1), (2,1), (2,2), (1,2), (1,1), (0, 1)
Die Koordinatenlisten müssen nicht optimal kurz sein. Zum Beispiel:
##
Akzeptable Ergebnisse:
(0,0), (2,0), (2,1), (0,1) // Redundant coordinates along a straight line are acceptable (0,0), (1,0), (2,0), (2,1), (1,1), (0,1) // Duplicate start- and end-point are acceptable (0,0), (2,0), (2,1), (0,1), (0,0)
Wie üblich „gewinnt“ das kürzeste Programm.