Bei einem Bild mit nur schwarzen und weißen Pixeln und einer (x, y) -Position, die ein weißes Pixel ist, färben Sie die weißen Pixel basierend auf ihrem minimalen Manhattan-Abstand von (x, y) in einem Pfad, bei dem nur andere weiße Pixel durchlaufen werden.
Der Farbton der farbigen Pixel muss proportional zu ihrem Abstand von (x, y) sein, damit das Pixel bei (x, y) einen Farbton von 0 ° (reines Rot) hat und die Pixel am weitesten von (x, y) entfernt sind. hat einen Farbton von 360 ° (auch rot), wobei die anderen Farbtöne nahtlos und linear dazwischen übergehen. Die Sättigung und der Wert müssen beide 100% betragen.
Wenn ein weißes Pixel nicht über andere weiße Pixel mit (x, y) verbunden ist , muss es weiß bleiben.
Einzelheiten
- Die Eingabe besteht aus dem Dateinamen des Bildes oder den Rohbilddaten sowie den Ganzzahlen x und y.
- Das Ausgabebild kann in einer Datei gespeichert oder in einem beliebigen gängigen Bilddateiformat als Pipe-Rohdatei ausgegeben oder einfach angezeigt werden.
- Der x-Wert ist 0 für die am weitesten links liegenden Pixel und steigt nach rechts. Der y-Wert ist in den obersten Pixeln 0 und steigt nach unten. (x, y) befindet sich immer innerhalb der Bildgrenzen.
- Es sind sowohl vollständige Programme als auch Funktionen zulässig.
Der kürzeste Code in Bytes gewinnt.
Beispiele
Alle diese Bilder wurden aus Platzgründen verkleinert. Klicken Sie auf die Bilder, um sie in voller Größe anzuzeigen.
Eingabebild:
(x,y) = (165,155)
und (x,y) = (0,0)
Eingabebild und Ausgabe mit (x,y) = (0,0)
:
Eingabebild und Ausgabe mit (x,y) = (600,350)
:
Eingabebild und Ausgabe mit (x,y) = (0,0)
:
Eingabebild und Ausgabe mit (x,y) = (0,0)
:
Optional -30% Bonus: Verwenden Sie die euklidische Distanz. Ein Vorschlag für Ihren Algorithmus lautet wie folgt (allgemeine Gliederung):
- Habe ein Startpixel.
- Fülle es von diesem Pixel aus.
- Für jedes Pixel, das in der Überflutungsfüllung erreicht wird,
- Bewegen Sie sich in Schritten von einer halben Einheit in einer geraden Linie von dem Startpixel zu diesem Pixel.
- Wenden Sie bei jedem Schritt
int()
die x- und y-Koordinaten an. Wenn das Pixel an diesen Koordinaten schwarz ist, halten Sie an. Andernfalls fahren Sie fort. (Dies ist eine Sichtlinienmethode.) - Jedes erreichte Pixel, das an ein weißes Pixel angrenzt, und / oder ein Pixel, das zuvor mit einem signifikant höheren Abstand (dh +10) gekennzeichnet war, wird zu einem Startpixel.
In einem metaeren Sinn breitet sich dieser Algorithmus auf jedes Pixel aus, das in einer geraden Linie von den anfänglichen / bereits gefärbten Pixeln aus erreichbar ist, und dann "Zoll" um die Kanten herum. Das Bit "signifikant höherer Abstand" soll den Algorithmus beschleunigen. Ehrlich gesagt spielt es keine Rolle, wie Sie die euklidische Distanz implementieren, es muss nur so aussehen.
So sieht das erste Beispiel mit euklidischer Distanz aus, wobei der obige Algorithmus verwendet wird:
Eingabebild und (x,y) = (165,155)
Vielen Dank an Calvin'sHobbies und Trichoplax für die Unterstützung beim Schreiben dieser Herausforderung! Habe Spaß!