In diesem Wettbewerb müssen Sie ein Programm schreiben, die eine Schwarz-Weiß - Pixelbild akzeptiert und versucht , sie zu verändern, so dass die weiße Form Formen Sterne Domain , mit so wenig Änderungen wie möglich.
Zulässige Änderungen sind das Umwandeln weißer in schwarze und das Umwandeln schwarzer in weiße Pixel.
Die Ausgabe muss wieder aus demselben Bild bestehen, diesmal jedoch mit allen Änderungen und einem / der markierten Mitte. Die Pixel, die von Weiß zu Schwarz geändert wurden, müssen in Blau angezeigt werden, diejenigen, die von Schwarz zu Weiß geändert wurden, müssen in Gelb angezeigt werden, und mindestens ein zentrales Pixel muss in Rot angezeigt werden. (Die genauen Farben bestimmen Sie.) Das Programm muss das angegebene Bild sowie die Gesamtzahl der vorgenommenen Änderungen ausgeben.
Definitionen
Star Domain
Die Menge der weißen Pixel des Bildes repräsentiert eine Sterndomäne, wenn (und nur wenn) es (mindestens) ein zentrales Pixel gibt . Das mittlere Pixel ist eines der weißen Pixel, die durch eine gerade Linie mit allen anderen weißen Pixeln verbunden werden können, so dass die Linie nur weiße Pixel durchläuft. (Das mittlere Pixel ist daher nicht unbedingt eindeutig.)
Gerade zwischen zwei Pixeln
Bei zwei Pixeln (Anfang und Ende, beide in der Abbildung unten rot) besteht die gerade Linie zwischen den beiden Pixeln aus allen Pixeln, die die (mathematisch, in der Abbildung unten gelb) Linie berühren, die von der Mitte der ersten Linie ausgeht Pixel in die Mitte des letzten Pixels. Ein Pixel wird nicht berührt die Linie , wenn sie nur durch eine Ecke berührt, so dass für ein Pixel zu dem gehört Pixelzeile des (mathematischen, gelb) , um die betreffenden Pixel mit einer Nicht - Null - Länge zu überqueren hat. (Wenn es nur den Eckpunkt berührt, wird dies als Länge Null betrachtet.) Betrachten Sie die folgenden Beispiele:
Beispiel
Das erste Bild sollte ein Beispiel für eine Testfall-Eingabe darstellen, und die beiden anderen Bilder sollten zwei gültige mögliche Ausgaben für das angegebene Beispiel darstellen:
Die gelben (ehemals schwarzen) Bereiche werden auch in die Domäne "Weiß" einbezogen, während die blauen (ehemals weißen) Bereiche in den "schwarzen" Teil außerhalb der Domäne einbezogen werden und der rote Punkt jedes Mal ein mögliches zentrales Pixel darstellt.
Testfälle
Die folgenden Testfälle sind PNGs mit einer Größe von jeweils 256 x 256 Pixel.
Wertung
Bitte führen Sie Ihr Programm mit den folgenden Testfällen aus und geben Sie die Ausgabe (Bild / Anzahl der Änderungen) in Ihre Antwort ein. Ich werde für jeden Testfall eine Rangliste erstellen. Ihre Punktzahl ist die Summe aller Ranglisten-Ranglisten. Je niedriger die Punktzahl, desto besser. Es gelten Standardlücken. Es ist nicht erlaubt, dass das Programm diese Testfälle erkennt und einen speziellen Fall für sie ausführt. (Es ist nicht gestattet, die optimalen mittleren Pixel für jeden dieser Testfälle vorab zu berechnen und zu speichern.) Das Programm sollte für alle Bilder funktionieren.
Bestenliste
Name | Score | 1 - rk | 2 - rk | 3 - rk | 4 - rk | 5 - rk | 5 - rk | Total Changes
------------+-------+------------+------------+------------+------------+------------+------------+--------------
Maltysen | 11 | 28688 - 2 | 24208 - 2 | 24248 - 1 | 7103 - 2 | 11097 - 2 | 13019 - 2 | 108363
TheBestOne | 7 | 0 - 1 | 13698 - 1 | 24269 - 2 | 103 - 1 | 5344 - 1 | 4456 - 1 | 47867
Antworten:
Java 8, 47.867 Änderungen insgesamt.
Verwendet den Durchschnitt des Bildes als Mittelpunkt. Es zeichnet dann alle möglichen Strahlen in die Mitte und verleiht der Farbe den besten Radius. Es färbt dann alle ungültigen Punkte schwarz.
Ergebnisse
Bild 1 - 0 Änderungen, Bild 2 - 13.698 Änderungen
Bild 3 - 24.269 Änderungen, Bild 4 - 103 Änderungen
Bild 5 - 5.344 Änderungen, Bild 6 - 4.456 Änderungen
Wenn ungültige Pixel nicht entfernt werden, werden insgesamt 42.782 Änderungen vorgenommen
Grüne Pixel sind die erste Ebene ungültiger Pixel.
Bild 1 - 0 Änderungen, Bild 2- 9.889 Änderungen
Bild 3 - 24.268 Änderungen, Bild 4 - 103 Änderungen
Bild 5 - 4.471 Änderungen, Bild 6- 4.050 Änderungen
Alle weißen Pixel in allen Bildern können mit einer Linie vom mittleren Pixel gezeichnet werden, wenn die Linie nicht an der Mitte, sondern an einer beliebigen Stelle auf dem Pixel beginnen / enden muss.
args[0]
Enthält den Namen der Eingabedatei.args[1]
Enthält den Namen der Ausgabedatei.Druckt auf die
stdout
Anzahl der Änderungen.quelle
Python - PIL -
216.228108.363 Änderungen insgesamtWer? Schneiden Sie es dank @AJMansfield in zwei Hälften! Dieser Algorithmus überspringt alle Sorgen um die Berechnung von Linien und die Optimierung und was nicht.
Mit einer Ausnahme werden alle Weißtöne in Schwarz geändert. Wenn es keine Weißen gibt, macht es einen Schwarzen zu einem Weißen.Es prüft, ob es mehr Weiß- oder Schwarztöne gibt, und ändert jede einzelne der anderen Arten bis auf eine. Wenn es kein Schwarz gibt, wird (0, 0) zur Mitte.Ergebnisse
Bild 1 - 28688 Änderungen, Bild 2 - 24208 Änderungen
Bild 3 - 24248 Änderungen, Bild 4 - 7103 Änderungen
Bild 5 - 11097 Änderungen, Bild 6 - 13019 Änderungen
Übernimmt den Dateinamen aus raw_input und schreibt in out.png und gibt die Anzahl der Änderungen aus.
quelle