Eingang
Ihre Eingabe in dieser Herausforderung ist eine Liste von ganzzahligen Paaren. Sie repräsentieren die südwestlichen Ecken der Einheitsquadrate in der Ebene und die Liste repräsentiert ihre Vereinigung als Teilmenge der Ebene. Zum Beispiel die Liste
[(0,0),(1,0),(0,1),(1,1),(2,1),(1,2),(2,2)]
stellt den roten Satz in diesem Bild dar:
Ausgabe
Ihre Ausgabe ist eine Liste von ganzzahligen Vierfachen, die rechteckige Teilmengen der Ebene darstellen. Genauer (x,y,w,h)
gesagt , ein Vierfacher entspricht einem Rechteck mit Breite w > 0
und Höhe, h > 0
dessen südwestliche Ecke sich in befindet (x,y)
. Die Rechtecke müssen eine exakte Abdeckung des Eingabebereichs bilden, in dem Sinne, dass jedes der Einheitsquadrate eine Teilmenge eines Rechtecks ist, jedes Rechteck eine Teilmenge des Bereichs ist und zwei Rechtecke nur an ihren Rändern überlappen dürfen. Um triviale Lösungen zu verbieten, darf die Abdeckung keine zwei Rechtecke enthalten, die zu einem größeren Rechteck zusammengefügt werden könnten.
Zum Beispiel die Liste
[(0,0,2,1),(0,1,3,1),(1,2,2,1)]
vertritt die rechtliche Abdeckung
der oben genannten Region, während die Bedeckung gegeben durch
[(0,0,2,2),(2,1,1,1),(1,2,1,1),(2,2,1,1)]
ist illegal, da die benachbarten 1-zu-1-Quadrate zusammengeführt werden könnten:
Regeln
Sie können ein vollständiges Programm oder eine Funktion angeben. Die genaue Formatierung der Ein- und Ausgabe ist aus vernünftigen Gründen nicht wichtig. Die kürzeste Byteanzahl gewinnt, und Standardlücken sind nicht zulässig. Sie werden aufgefordert, eine Erläuterung Ihres Algorithmus und einige Beispielausgaben anzugeben.
Testfälle
Eine U-förmige Region:
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(2,0),(2,1),(3,0),(3,1),(4,0),(4,1),(4,2),(4,3),(4,4),(4,5),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5)]
Ein großes Dreieck:
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(0,9),(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8),(2,0),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),(3,0),(3,1),(3,2),(3,3),(3,4),(3,5),(3,6),(4,0),(4,1),(4,2),(4,3),(4,4),(4,5),(5,0),(5,1),(5,2),(5,3),(5,4),(6,0),(6,1),(6,2),(6,3),(7,0),(7,1),(7,2),(8,0),(8,1),(9,0)]
Ein Quadrat mit Löchern:
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8),(1,9),(2,0),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),(2,8),(2,9),(3,0),(3,1),(3,2),(3,4),(3,5),(3,6),(3,7),(3,8),(3,9),(4,0),(4,1),(4,2),(4,3),(4,4),(4,5),(4,6),(4,7),(4,8),(4,9),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5),(5,7),(5,8),(5,9),(6,1),(6,2),(6,3),(6,5),(6,6),(6,7),(6,8),(6,9),(7,0),(7,1),(7,2),(7,3),(7,4),(7,5),(7,6),(7,7),(7,8),(7,9),(8,0),(8,1),(8,2),(8,3),(8,4),(8,5),(8,6),(8,7),(8,8),(8,9),(9,0),(9,1),(9,2),(9,3),(9,4),(9,5),(9,6),(9,7),(9,8),(9,9)]
Nicht verbundene Regionen:
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(1,0),(1,1),(1,2),(1,3),(1,4),(1,6),(1,7),(1,8),(1,9),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),(2,8),(2,9),(4,0),(4,1),(4,2),(4,4),(4,5),(4,6),(4,7),(4,8),(4,9),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5),(5,6),(5,7),(5,8),(5,9),(6,0),(6,1),(6,2),(6,4),(6,5),(6,6),(6,7),(6,8),(6,9),(8,0),(8,1),(8,2),(8,3),(8,4),(8,5),(8,6),(8,7),(8,8),(8,9),(9,0),(9,1),(9,2),(9,3),(9,7),(9,8),(9,9),(10,0),(10,1),(10,2),(10,3),(10,4),(10,5),(10,6),(10,7),(10,8),(10,9)]
Verifizierer
Verwenden Sie dieses Python 2-Programm, um Ihre Lösung zu überprüfen. Es wird von STDIN eine Liste von Tupeln (die Eingabe) und eine Liste von Vierfachen (Ihre Ausgabe) durch Komma getrennt.
Ich habe auch dieses Python 2-Programm geschrieben, um die Bilder zu generieren, und Sie können es auch verwenden. Es nimmt von STDIN eine Liste von entweder Tupeln oder Vierfachen und erzeugt eine Datei mit dem Namen out.png
. Es erfordert die PIL-Bibliothek. Sie können bei Bedarf auch die Größe der Gitterzellen und die Breite der Gürtellinien ändern.