Herausforderung:
Schreiben Sie ein Programm, das eine Grafikdatei ausgibt, die 1920 Pixel breit und 1080 Pixel hoch ist. Jedes der 2.073.600 Pixel in der Grafik muss eine eindeutige Farbe haben und es dürfen keine Farbwerte wiederholt werden. Die Farben sollten in RGB angegeben werden und bei 0,0,0 beginnen und der Reihe nach zu 255,255,255 aufwärts zählen. Ein 1920 x 1080 Pixel großes Bild enthält nur viele Schwarz-, Blau- und Grüntöne.
Zum Beispiel (eine kleinere gekürzte Version). Wenn die Höhe auf 5 und die Breite auf 5 eingestellt wäre, würde eine quadratische Grafik mit 25 Pixeln ausgegeben und jedes Pixel würde eine eindeutige Farbe haben. Das RGB-Farbarray würde folgendermaßen aussehen:
Array (
[0] => Array
(
[0] => 0
[1] => 0
[2] => 0
)
[1] => Array
(
[0] => 0
[1] => 0
[2] => 1
)
[2] => Array
(
[0] => 0
[1] => 0
[2] => 2
)
[3] => Array
(
[0] => 0
[1] => 0
[2] => 3
)
[4] => Array
(
[0] => 0
[1] => 0
[2] => 4
)
[5] => Array
(
[0] => 0
[1] => 0
[2] => 5
)
[6] => Array
(
[0] => 0
[1] => 0
[2] => 6
)
[7] => Array
(
[0] => 0
[1] => 0
[2] => 7
)
[8] => Array
(
[0] => 0
[1] => 0
[2] => 8
)
[9] => Array
(
[0] => 0
[1] => 0
[2] => 9
)
[10] => Array
(
[0] => 0
[1] => 0
[2] => 10
)
[11] => Array
(
[0] => 0
[1] => 0
[2] => 11
)
[12] => Array
(
[0] => 0
[1] => 0
[2] => 12
)
[13] => Array
(
[0] => 0
[1] => 0
[2] => 13
)
[14] => Array
(
[0] => 0
[1] => 0
[2] => 14
)
[15] => Array
(
[0] => 0
[1] => 0
[2] => 15
)
[16] => Array
(
[0] => 0
[1] => 0
[2] => 16
)
[17] => Array
(
[0] => 0
[1] => 0
[2] => 17
)
[18] => Array
(
[0] => 0
[1] => 0
[2] => 18
)
[19] => Array
(
[0] => 0
[1] => 0
[2] => 19
)
[20] => Array
(
[0] => 0
[1] => 0
[2] => 20
)
[21] => Array
(
[0] => 0
[1] => 0
[2] => 21
)
[22] => Array
(
[0] => 0
[1] => 0
[2] => 22
)
[23] => Array
(
[0] => 0
[1] => 0
[2] => 23
)
[24] => Array
(
[0] => 0
[1] => 0
[2] => 24
)
)
Regeln:
Zur Erzeugung des Bildes kann eine beliebige Programmiersprache verwendet werden.
Die Antwort mit den meisten positiven Stimmen gewinnt.
Farben dürfen nur einmal verwendet werden.
Pixel in Position 0,0 müssen mit Farbe 0,0,0 beginnen
Farben müssen innerhalb des 24-Bit-Bereichs für Echtfarben liegen.
Das Bild muss 1920 x 1080 Pixel groß sein.
Farben müssen im RGB-Format sein.
Die Verwendung einer Bibliothek zur Ausgabe des Bildes ist in Ordnung.
Die Ausgabe muss im Format einer Grafikdatei erfolgen, z. B. output.png
Die Ausgabe als Text, der die Farbwerte darstellt, zählt nicht, der Code muss eine Grafikdatei ausgeben.
Die Dateigröße des Ausgabebildes spielt keine Rolle.
Sie müssen in der Lage sein, die Ausgabe anzuzeigen, indem Sie sie als Grafik im Chrome-Webbrowser öffnen.
Ich wäre beeindruckt, wenn Sie dies mit wirklich kurzem Code tun würden. Ihr Programm gibt außerdem die Zeit in Sekunden aus, die zum Erzeugen des in das Bild selbst eingebetteten Bildes benötigt wird, das über die aufeinanderfolgenden Pixel gelegt wird. Ihr Programm gibt das Bild innerhalb von 10 Sekunden aus. Ich wäre sehr beeindruckt, wenn Ihr Programm das Bild innerhalb von 1 Sekunde ausgibt.
quelle
x==y==0
scheint ein bisschen willkürlich zu sein. In jedem Fall ist dies nicht eindeutig, da sich diese Koordinaten entweder auf die linke obere oder die linke untere Ecke des Bildes beziehen können.Antworten:
Python - 660+ Bytes
Inkrementelle Version
Volle Größe: http://www.pictureshack.net/images/57626_all_colors.png (4.52MB)
Dies ist ein Bild, das auf einem Julia Set- Fraktal basiert . Jede Farbe wird dem Bild schrittweise hinzugefügt, obwohl es einen erheblichen Vorberechnungsaufwand gibt.
Luminosity Version
Volle Größe: http://www.pictureshack.net/images/95389_all_colors4.png (5,24 MB)
Ich habe eine Option hinzugefügt, mit der jede Farbe nach Leuchtkraft und nicht nach Index iteriert werden kann. Dies ist nicht als "Aufwärtszählen" von Null zu qualifizieren, aber dies scheint eine nachlässige Voraussetzung zu sein. Es ist interessant, dass diese beiden Ordnungen völlig unterschiedliche Strukturen im Bild aufdecken. Um dies zu verwenden, setzen Sie das
use_luminosity
Flag aufTrue
.Quelle
Benötigt PIL .
Seien Sie gewarnt : Die Ausführung dauert einige Minuten. Die Verwendung von PyPy mit Pillow dauert mit PIL etwa ein Fünftel der Zeit von CPython, daher würde ich dies nach Möglichkeit empfehlen.
Bearbeiten : aktualisiert, so dass
#000000
wie angegeben oben links angezeigt wird.Bearbeiten : Eine Markierung wurde hinzugefügt, um Farben nach Leuchtkraft zu iterieren.
Bearbeiten : Umstellung auf native komplexe Berechnungen und ganzzahlige Helligkeitswerte, die etwas schneller sind.
Lösungen, an denen ich gearbeitet habe, bevor das Hauptkriterium zum Beliebtheitswettbewerb wurde
PHP - 161 Bytes
Dies sorgt für eine schnellstmögliche Ausgabe. Es wird keine Bibliothek verwendet, nur ein vorberechneter Header und eine direkte Byte-Ausgabe. Läuft in weniger als 2s auf meiner comp. Durch Inkrementieren um 256 anstelle von 1 wird ein Pseudo-Gradienten-Effekt erzeugt, für den keine echte Berechnung erforderlich ist. Der einzige Nachteil ist, dass ( 0, 0 ) nicht schwarz ist, aber das Ergebnis sieht viel besser aus.
ob_start();
undob_end_flush();
sind nicht unbedingt erforderlich, aber das Puffern der Ausgabe beschleunigt die Ausführung erheblich.Andere interessante Inkremente sind:
17: http://i.stack.imgur.com/ieyyZ.png
103: http://i.stack.imgur.com/WD2wa.png
326: http://i.stack.imgur.com/c4DSF. png
557: http://i.stack.imgur.com/eTTWE.png
943: http://i.stack.imgur.com/7rrmR.png
2125: http://i.stack.imgur.com/Ct1kM .png
Und viele andere. Obwohl die meisten Muster, die wie irgendetwas aussehen, Streifen ähneln
PHP - 105 Bytes
Rücksichtslose Missachtung der Version.
Content-type
Header versucht Chrome nach besten Kräften herauszufinden, was gesendet wurde. In diesem Fall wird es korrekt als identifiziertimage/bmp
. Die neuesten Versionen von FireFox und IE können auch den kaputten Header reparieren.BM
,I5S2
undCS
erzeugen einenNOTICE
Fehler. Um eine Beschädigung des Bildes zu verhindern, muss die Fehlerberichterstattung inphp.ini
eingestellt werden, um dies zu verhindern (zerror_reporting = E_ALL & ~E_NOTICE
. B. ).PHP-CLI - 83 Bytes
Führen Sie das Programm direkt von der Befehlszeile aus und leiten Sie es an eine Datei weiter (z. B.
$ php all-colors.php > out.bmp
). Es ist keinContent-type
Header erforderlich. Die resultierende Datei ist identisch mit der 105-Byte-Version und kann in Chrome angezeigt werden.quelle
C mit der GD-Grafikbibliothek (err, ca. 2,5 KB?)
Die Regeln untersagten nicht das Ändern eines vorhandenen Bildes. Ich habe ein Programm erstellt, mit dem alle Pixel eines Bilds durch sequentielle RGB-Werte von
#000000
bis ersetzt werden.#1fa3ff
Mit den Ergebnissen bin ich sehr zufrieden. Dies ist das Ergebnis eines Fotos, das Michael Carian auf Flickr gepostet hat ( cc-by-sa 2.0 ):(Das rohe Ausgabebild ist ziemlich groß (5,6 MB) )
Hier ist eine Nahaufnahme der oberen linken Ecke (vergrößert um 400%):
Die Verarbeitungszeit für ein Bild dieser Größe beträgt ca. 3 Sekunden:
und ja, alle Pixel haben unterschiedliche Farben:
(
identify
ist ein ImageMagick-Dienstprogramm; die-format %k
Option zählt die Anzahl der eindeutigen Farben in einem Bild.)Hier ist der Quellcode:
quelle
C ++, 750 Bytes
Ein PNG mit voller Auflösung (5,1 MB)
Der Code erstellt eine Sammlung aller Ganzzahlen von 0-1080 * 1920 und sortiert sie dann nach der Gesamthelligkeit. Anschließend wird ein Mandelbrot-Set erstellt und die Positionen werden basierend auf ihrer Escape-Iteration und ihrem Wert sortiert. Dann durchläuft es beide Sätze und ordnet die Farben den kleinsten bis größten Mandelbrot-Werten in der Reihenfolge von dunkel bis hell zu. Schließlich wird ein BMP-Bild mit 32 Bit pro Pixel in den als Befehlszeilenparameter angegebenen Ausgabedateinamen geschrieben.
Der Code ist nicht vollständig ausgereift, wird aber nicht zu viel kleiner.
quelle
C - 854 Bytes (wenn gedrückt)
Ich hatte ursprünglich etwas mit Cyan, Magenta und Gelb Ecken und sanften Abstufungen von Farben, die sehr schön aussahen, aber es entsprach nicht den Spezifikationen.
Folgendes erfüllt die Spezifikationen: Verwendet die "ersten" 2.073.600 Farben, keine Wiederholungen und Schwarz in der oberen linken Ecke.
Wie es funktioniert, ist irgendwie cool. Es erstellt ein Array mit den Farben und sortiert dann mehrmals vertikal und horizontal nach verschiedenen Kriterien. Das Endergebnis sind angenehme Übergänge zwischen Blau und Grün und zwischen Dunkel und Hell. Die Laufzeit beträgt ca. 1,5 Sekunden. Kompilieren mit:
gcc -o many many.c -lm
und ausführen mit:./many > many.ppm
Zu Ihrer Information, das war das Originalbild ...
Und für diejenigen, die sich für den Code interessieren, mit dem dieses Bild generiert wurde:
quelle
./a.out | hexdump | head
werden häufig7d ff de
wiederholt), (2) verwendet keine sequentiellen RGB-Werte von000000
bis1dffff
und (3) Pixel bei (x = 0, y = 0) ist nicht schwarz. (Obwohl ich den Punkt von (3) nicht selbst sehen kann.)Rubin, 109
BEARBEITEN: Ich sollte beachten, dass ich dies eingereicht habe, als die Frage noch mit Code-Golf markiert war , bevor sie zu einem Beliebtheitswettbewerb wurde, also habe ich mich für Short Code entschieden. Dies ist nicht sehr einfallsreich, aber ich glaube, dass es eine gültige Vorlage ist.
Die Farbwerte reichen von
00 00 00
bis1f a3 ff
, inkrementiert um1
, so dass das Fehlen desred
Ergebnisses nicht verwunderlich ist.Für die Kosten für das Hinzufügen von 1 Zeichen zur Quellcodelänge (Ersetzen
<<8
durch<<11
) kann die folgende Ausgabe erfolgen. Dies deckt einen größeren Bereich des Spektrums auf Kosten derblue
Auflösung ab. Es wird mit der achtfachen Rate durch den RGB-Raum inkrementiert. Farbwerte reichen von00 00 00
bisfd 1f f8
.quelle
Schläger
Ich habe noch nie objektorientiertes Programmieren für Schläger verwendet (Message Passing), daher bin ich mir nicht sicher, ob dies optimal ist, aber es scheint die Aufgabe zu erledigen.
Wenn ich die 3 ersten Bits im roten Kanal nicht benutze, erhalte ich alle drei Farben in meinem Ergebnisbild.
Brainfuck
Der Code druckt ein 24-Bit-BMP-Bild für 8-Bit-Zellen-BF-Interpreter an STDOUT aus. Es wird das gleiche Image wie bei der Racket-Version erstellt. Es basiert auf der PNM-Version.
Ubuntu wird mit
bf
8-Bit-Zellen ausgeliefert:Alte Version, die gegen das Öffnen in Chrome verstößt. Es erstellt eine PNM-Datei, die mit den meisten Bildbetrachtern kompatibel ist.
quelle
In der ersten aktualisierten Version waren nicht alle Farben im 24-Bit-Bereich eindeutig:
Mathematica: 110
Überprüfung der Regeln:
Das erste Pixel ist schwarz:
Alle Farben sind Unikate:
Mathematica: 146Dauert 14,778 Sekunden.
Überprüfung der Regeln:
Das erste Pixel ist schwarz:
Alle Farben sind Unikate:
quelle
Python - 104
Dies ist die Version, die für die Code-Golf-Herausforderung gedacht gewesen wäre. Da der Wert nur von 0 auf 2073599 erhöht wird, enthält er nur eindeutige Farben.
Python - 110
Da mir die obige Version nicht gefallen hat (der Farbraum wird nicht vollständig genutzt), habe ich Folgendes versucht:
Python - 122
Eine weitere Erweiterung zu den oben genannten:
quelle
i.show()
kann verwendet werden, um das Bild im Standard-Viewer zu öffnen. Es ist nicht unbedingt erforderlich, dass es in einer Datei gespeichert wird..show()
funktioniert bei mir auch nicht. Keine Ahnung warum. : PProcessing, 301
Dies ist kein Versuch, eine möglichst knappe Lösung zu finden, sondern behält die gesamte Kontrolle, um die gewünschte Anordnung der Farben zu erreichen. Ja, die Farben sind nicht aufeinanderfolgend, aber das macht keinen Spaß.
quelle
0,0
RGB sind0,0,0
. Ich sehe31,31,31
. Tatsächlich scheint die gesamte Spalte Null diese Farbe zu haben.Visual Basic .NET, 273 Byte
Dies gibt eine 5,61 MB große Datei aus:
Der obige Code ist eine komprimierte Version dieses besser lesbaren Codes. Leerzeichen wurden entfernt, um Bytes zu sparen.
Link zum Bild: http: //µ.pw/k
quelle
ImageMagick - Konvertieren Sie 119
Verwenden Sie die
convert
aus der ImageMagick-Toolbox, um Bilder zu erstellen. Es läuft in 0 Sekunden. Es ist zu 119 Zeichen Golf. Ich überlagere zwei Farbverläufe (Rot-Blau und Schwarz-Weiß), konvertiere sie in HSL und zurück in RGB.Beispiele für die Verlaufsüberlagerung finden Sie in den ImageMagick-Handbuchseiten .
quelle
identify -format %k o.png
. Ich habe 1762920, 2073600 nichtPHP, 507
Sie müssen wahrscheinlich den für PHP zugewiesenen Speicher erhöhen, um ausgeführt werden zu können. Verwendet GD. Es dauert ungefähr 9 Sekunden, um das Bild zu erzeugen.
Link zum Ausgabebild: http://i.stack.imgur.com/AAKqW.png
Sehen Sie es im Web: http://ben-paton.co.uk/portfolio/pixel.php?w=1920&h=1080
quelle
DELPHI / PASCAL (Version # 1), 361 Bytes
quelle
Tcl / Tk, 149
150quelle
Java
411386 + 24 BytesGolf gespielt
Ungolfed
Ergebnis
Erläuterung
Dies ist nicht mein Versuch, die kürzeste, sondern die portabelste Lösung zu finden. Hat nur den Import für BufferedImage verlassen, da die anderen keine Bytes gespeichert haben. Anstatt das Image in ein JPanel zu laden und darauf zu schreiben, habe ich mir die Zeit vom Anfang bis zum Schreiben auf die Festplatte als Dateinamen gespart. Dies führte bei mir zu Dateinamen von ca. 110 ms, während die Zeit vom Anfang bis zum Ende in der Regel ca. 500 ms dauerte. Schließlich sollte es plattformunabhängig sein, da ich es sowohl in Windows als auch in einer Ubuntu-VM getestet habe und es funktionierte (es schreibt die Datei auf Ihren Desktop). Musste die return-Anweisung wegen der Callable-Syntax-Garbage haben. Obwohl ich an der Arbeit arbeite, bezweifle ich, dass ich selbst eine bessere Implementierung finden werde, da ich nicht l und w für meine for-Schleifen verwenden kann. Ich würde sagen, eine halbe Sekunde für Java ist nicht so schlimm.
Aber ich glaube, es ist immer noch validiert, da es immer noch von Chrome geöffnet werden kann. Es wird nur automatisch in Ihrem Standard-PNG-Viewer geöffnet (Version nicht auf Unix-basierten Computern getestet).
Ich bin mir der möglichen Byte-Speicherungen bewusst, habe sie jedoch hauptsächlich weggelassen, um sich für Boni zu qualifizieren. Auf Wunsch kann ich kürzere, plattformspezifische Beispiele hochladen. Vielen Dank.
Bearbeiten
Unnötig entfernt. Versuchen Sie, den Catch-Block und die falsch formatierte return-Anweisung zu entfernen, um ~ 30 Bytes zu reduzieren.
Entfernt,
BufferedImage.TYPE_INT_RGB
weil es buchstäblich nur 1 ist.quelle