Schreiben Sie ein Programm, das eine Zeichenfolge oder eine Textdatei aufnimmt, deren erste Zeile die Form hat
width height
und jede nachfolgende Zeile hat die Form
x y intensity red green blue
wo:
width
undheight
kann jede positive ganze Zahl sein.x
undy
kann eine ganze Zahl sein.intensity
kann eine beliebige nicht negative ganze Zahl sein.red
,green
Undblue
kann beliebige Zahlen von 0 bis einschließlich 255 sein.
Ihr Programm muss Ausgang ein Truecolor - Bild in jedem gängigen lossless Bilddateiformat , deren Abmessungen width
durch height
. Jede x y intensity red green blue
Linie stellt einen bunten Stern oder eine Kugel dar, die auf das Bild gezeichnet werden muss. Es können beliebig viele Sterne gezeichnet werden, einschließlich 0. Sie können davon ausgehen, dass die Zeichenfolge oder Datei eine nachgestellte neue Zeile enthält.
Der Algorithmus zum Zeichnen des Bildes lautet wie folgt, Sie können es jedoch beliebig implementieren, solange das Ergebnis identisch ist:
Für jedes Pixel ( X , Y ) im Bild (wobei X am linken Rand 0 und Breite-1 am rechten Rand und Y am oberen Rand 0 und Höhe-1 am unteren Rand ist) den Farbkanal C ϵ { Rot , Grün , Blau } (ein Wert zwischen 0 und 255) ergibt sich aus der Gleichung:
Wenn die dist- Funktion entweder eine euklidische Distanz ist :
Oder Manhattan Entfernung :
Wählen Sie die Distanzfunktion, die Sie bevorzugen, basierend auf der Golffähigkeit oder der Ästhetik.
Jede der Zeilen in der Eingabe neben der ersten ist ein Element der Sternmenge . So, zum Beispiel, S x repräsentiert den
x
Wert auf einem der Eingangsleitungen und S C steht entwederred
,green
oderblue
, je nachdem , welchen Farbkanal gegenwärtig berechnet wird.
Beispiele
Beispiel A
Wenn der Eingang ist
400 150
-10 30 100 255 128 0
die Ausgabe sollte sein
wenn Sie die euklidische Distanz verwenden, und
wenn Sie Manhattan Distanz verwenden.
Beispiel B
Wenn der Eingang ist
200 200
100 100 10 255 255 255
20 20 40 255 0 0
180 20 40 255 255 0
180 180 40 0 255 0
20 180 40 0 0 255
die jeweiligen Ausgänge für euklidische und Manhattan-Entfernung sollten sein
und .
Beispiel C
Wenn der Eingang ist
400 400
123 231 10 206 119 85
358 316 27 170 47 99
95 317 3 202 42 78
251 269 17 142 150 153
43 120 3 145 75 61
109 376 6 230 231 52
331 78 21 31 81 126
150 330 21 8 142 23
69 155 11 142 251 199
218 335 7 183 248 241
204 237 13 112 253 34
342 89 18 140 11 123
die Ausgabe sollte sein
wenn Sie die euklidische Distanz verwenden, und
wenn Sie Manhattan Distanz verwenden.
Beispiel D
Wenn der Eingang ist
400 400
123 231 5 206 119 85
358 316 5 170 47 99
95 317 5 202 42 78
251 269 5 142 150 153
43 120 5 145 75 61
109 376 5 230 231 52
331 78 5 31 81 126
150 330 5 8 142 23
69 155 5 142 251 199
218 335 5 183 248 241
204 237 5 112 253 34
342 89 5 140 11 123
die Ausgabe sollte sein
wenn Sie die euklidische Distanz verwenden, und
wenn Sie Manhattan Distanz verwenden.
Beispiel E
Wenn der Eingang ist
100 1
Dann sollte die Ausgabe ein Bild mit einer Breite von 100 Pixel und einer Höhe von 1 Pixel sein, das vollständig schwarz ist.
Anmerkungen
- Nehmen Sie die Eingabezeichenfolge oder den Namen einer Textdatei, die sie enthält, aus stdin oder der Befehlszeile, oder schreiben Sie eine Funktion, die eine Zeichenfolge enthält.
- Das "Ausgeben" des Bildes bedeutet entweder:
- Speichern Sie es in einer Datei mit dem Namen Ihrer Wahl.
- Drucken Sie die Rohdaten der Bilddatei auf stdout.
- Anzeigen des Bildes, zB mit PIL 's
image.show()
.
- Ich werde nicht überprüfen, ob Ihre Bilder pixelgenau sind (Stack Exchange komprimiert Bilder trotzdem verlustbehaftet), aber ich bin sehr misstrauisch, wenn ich visuell einen Unterschied feststellen kann.
- Sie können Grafik- / Bildbibliotheken verwenden.
Gewinnen
Die kürzeste Übermittlung in Bytes gewinnt. Bei Stimmengleichheit gewinnt die früheste Einreichung.
Spaßbonus: Geben Sie den Input für ein wirklich spektakuläres Ausgabebild.