Défi:
Écrivez un programme qui produit un fichier graphique de 1920 pixels de large par 1080 pixels de haut. Chacun des 2 073 600 pixels du graphique doit être d'une couleur unique et aucune valeur de couleur ne doit être répétée. Les couleurs doivent être spécifiées en RVB et commencer à 0,0,0 et compter vers le haut en séquence vers 255 255 255. Vous verrez qu'une image de 1920 x 1080 pixels contiendra beaucoup de noirs, bleus et verts uniquement.
Par exemple, (une version réduite plus petite). Si la hauteur était réglée sur 5 et la largeur était réglée sur 5, un graphique carré de 25 pixels serait affiché et chaque pixel serait d'une couleur unique. Le tableau de couleurs RVB ressemblerait à ceci:
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
)
)
Règles:
N'importe quel langage de programmation peut être utilisé pour générer l'image.
La réponse avec le plus de votes positifs l'emporte.
Les couleurs ne doivent être utilisées qu'une seule fois.
Le pixel en position 0,0 doit commencer par la couleur 0,0,0
Les couleurs doivent se situer dans la plage de couleurs réelles 24 bits.
L'image doit avoir une taille de 1920 x 1080 pixels.
Les couleurs doivent être au format RVB.
L'utilisation d'une bibliothèque pour sortir l'image est correcte.
La sortie doit être au format d'un fichier graphique, par exemple output.png
La sortie sous forme de texte représentant les valeurs de couleur ne compte pas, le code doit sortir un fichier graphique.
La taille du fichier de l'image de sortie n'a pas d'importance.
Vous devez pouvoir afficher la sortie en l'ouvrant sous forme de graphique dans le navigateur Web Chrome.
Je serais impressionné si vous parvenez à le faire avec un code très court, votre programme génère également le temps en secondes écoulées nécessaire pour générer l'image intégrée à l'image elle-même superposée sur les pixels séquentiels, votre programme génère l'image dans les 10 secondes. Je serais vraiment impressionné si votre programme sort l'image en moins d'une seconde.
la source
x==y==0
semble un peu arbitraire. Dans tous les cas, c'est ambigu car ces coordonnées pourraient faire référence au coin supérieur gauche ou inférieur gauche de l'image.Réponses:
Python - 660+ octets
Version incrémentale
Taille réelle : http://www.pictureshack.net/images/57626_all_colors.png (4,52 Mo)
Il s'agit d'une image basée sur une fractale Julia Set . Chaque couleur est ajoutée à l'image de manière incrémentielle, bien qu'il y ait une quantité importante de pré-calcul.
Version de luminosité
Taille réelle: http://www.pictureshack.net/images/95389_all_colors4.png (5,24 Mo)
J'ai ajouté une option pour itérer chaque couleur par luminosité, plutôt que par index. Cela ne peut pas être qualifié de "comptage" à partir de zéro, mais cela semble être une exigence laxiste. Il est intéressant de noter que ces deux ordres exposent des structures complètement différentes dans l'image. Pour l'utiliser, définissez le
use_luminosity
drapeau surTrue
.La source
Nécessite PIL .
Soyez averti : cela prendra plusieurs minutes à exécuter. L'utilisation de PyPy avec Pillow s'exécute dans environ un cinquième du temps de CPython avec PIL, donc je recommanderais cela, si possible.
Modifier : mis à jour de façon
#000000
à se trouver en haut à gauche, comme spécifié.Modifier : ajout d'un drapeau pour itérer les couleurs en fonction de la luminosité.
Modifier : basculé vers des calculs complexes natifs et des poids de luminosité entiers, qui sont légèrement plus rapides.
Solutions sur lesquelles j'ai travaillé avant que le critère principal ne devienne un concours de popularité
PHP - 161 octets
Cela va pour la sortie la plus rapide possible. Aucune bibliothèque n'est utilisée, juste un en-tête pré-calculé et une sortie d'octets directe. Fonctionne en moins de 2 secondes sur mon ordinateur. En incrémentant de 256 au lieu de 1 , il produit un effet de pseudo-gradient, sans aucun calcul réel nécessaire. Le seul inconvénient est que ( 0, 0 ) n'est pas noir, mais le résultat semble beaucoup plus agréable.
ob_start();
etob_end_flush();
ne sont pas strictement nécessaires, mais la mise en mémoire tampon de la sortie la rend beaucoup plus rapide.D'autres incréments intéressants incluent:
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
Et plein d'autres. Bien que la plupart des motifs qui ressemblent à quelque chose ressemblent à des rayures
PHP - 105 octets
Version de négligence téméraire.
Content-type
tête cassé , Chrome fera de son mieux pour déterminer ce qui a été envoyé. Dans ce cas, il l'identifie correctement commeimage/bmp
. Les dernières versions de FireFox et IE sont également capables de réparer l'en-tête cassé.BM
,I5S2
etCS
va générer uneNOTICE
erreur. Pour éviter la corruption de l'image, un rapport d'erreursphp.ini
devra être défini pour éviter cela (par exempleerror_reporting = E_ALL & ~E_NOTICE
).PHP-CLI - 83 octets
Exécutez directement à partir de la ligne de commande et dirigez-vous vers un fichier (par exemple
$ php all-colors.php > out.bmp
), aucun en-Content-type
tête n'est nécessaire. Le fichier résultant est identique à la version 105 octets et peut être affiché dans Chrome.la source
C avec la bibliothèque graphique GD (err, environ 2,5 Ko?)
Les règles n'interdisaient pas de modifier une image existante. J'ai créé un programme pour remplacer tous les pixels d'une image par des valeurs RVB séquentielles de
#000000
à#1fa3ff
, et je suis assez satisfait des résultats. Voici ce qu'il a produit à partir d' une photo publiée sur Flickr par Michael Carian ( cc-by-sa 2.0 ):(L'image de sortie brute est plutôt grande (5,6 Mo) )
Voici un gros plan du coin supérieur gauche (augmenté de 400%):
Le temps de traitement est d'environ 3 secondes pour une image de cette taille:
et oui, tous les pixels sont de couleurs différentes:
(
identify
est un utilitaire ImageMagick; l'-format %k
option compte le nombre de couleurs uniques dans une image)Voici le code source:
la source
C ++, 750 octets
Un PNG pleine résolution (5,1 Mo)
Le code crée une collection de tous les entiers de 0 à 1080 * 1920, puis les trie par luminosité globale. Il crée ensuite un ensemble Mandelbrot et trie les positions en fonction de leur itération d'échappement et de leur valeur. Ensuite, il parcourt les deux ensembles, en attribuant des couleurs de sombre à clair aux valeurs de Mandelbrot du plus petit au plus grand. Enfin, il écrit une image BMP 32 bits par pixel dans le nom de fichier de sortie spécifié en tant que paramètre de ligne de commande.
Le code n'est pas entièrement joué, mais il ne deviendra pas trop petit.
la source
C - 854 octets (une fois pressé)
À l'origine, j'avais quelque chose avec des coins cyan, magenta et jaune et des dégradés de couleurs lisses qui avaient l'air vraiment bien, mais cela ne correspondait pas aux spécifications.
Ce qui suit remplit les spécifications: utilise les "premières" 2 073 600 couleurs, aucune répétition et le noir dans le coin supérieur gauche.
Comment ça marche est plutôt cool. Il construit un tableau avec les couleurs, puis trie verticalement et horizontalement selon différents critères plusieurs fois. Le résultat final est des transitions agréables entre le bleu et le vert et entre le noir et le clair. L'exécution prend environ 1,5 seconde. Compilez en utilisant:
gcc -o many many.c -lm
et exécutez en utilisant:./many > many.ppm
Pour info, c'était l'image originale ...
Et pour ceux qui s'intéressent au code utilisé pour générer cette image:
la source
./a.out | hexdump | head
expositions7d ff de
répétées beaucoup de fois), (2) ne pas utiliser les valeurs RVB séquentielle à partir000000
thru1dffff
pixel, et (3) à (x = 0, y = 0) n'est pas noir. (Bien que je ne puisse pas voir le point de (3) moi-même.)Rubis, 109
EDIT: Je dois noter que j'ai soumis cela lorsque la question était encore taguée code-golf , avant qu'elle ne devienne un concours de popularité, alors j'allais pour le code court. Ce n'est pas très imaginatif, mais je pense que c'est une soumission valable.
Les valeurs de couleur vont de
00 00 00
à1f a3 ff
, en augmentant de1
, donc l'absence dered
résultat n'est pas surprenante.Pour le coût de l'ajout d'un caractère à la longueur du code source (remplacer
<<8
par<<11
), la sortie suivante peut être obtenue. Cela couvre une plus grande plage du spectre au détriment de lablue
résolution. Il incrémente l'espace RVB à huit fois le taux. Les valeurs de couleur vont de00 00 00
àfd 1f f8
.la source
Raquette
Je n'ai jamais utilisé de programmation orientée objet de raquette avant (passage de message), donc je ne suis pas sûr que ce soit optimal, mais cela semble faire le travail.
En n'utilisant pas les 3 premiers bits du canal rouge, j'obtiens les trois couleurs dans mon image de résultat.
Brainfuck
Le code imprime une image BMP 24 bits sur STDOUT pour les interprètes BF à cellules 8 bits. Il crée la même image que la version Racket. Il est basé sur la version pnm.
Ubuntu est livré avec
bf
des cellules 8 bits:Ancienne version qui ne peut pas s'ouvrir à partir de Chrome. Il crée un fichier .pnm compatible avec la plupart des visionneuses d'images.
la source
Mise à jour, la première version n'avait pas toutes les couleurs uniques dans un espace 24 bits:
Mathematica: 110
Vérification des règles:
Le premier pixel est noir:
Toutes les couleurs sont uniques:
Mathematica: 146Prend 14,778 secondes.
Vérification des règles:
Le premier pixel est noir:
Toutes les couleurs sont uniques:
la source
Python - 104
Ceci est la version, qui aurait été pour le défi de code-golf. Comme il augmente simplement la valeur de 0 à 2073599, il ne contient que des couleurs uniques.
Python - 110
Comme je n'ai pas aimé la version ci-dessus (la gamme de couleurs n'est pas entièrement utilisée), j'ai essayé quelque chose comme ceci:
Python - 122
Une autre extension de ce qui précède:
la source
i.show()
peut être utilisé pour ouvrir l'image dans la visionneuse par défaut. Il n'y a pas d'exigence stricte qu'il soit enregistré dans un fichier..show()
ne fonctionne pas pour moi. Je ne sais pas pourquoi. : PProcessing, 301
Ce n'est pas une tentative de la solution la plus laconique, mais elle conserve tout le contrôle pour obtenir l'arrangement de couleurs souhaité. Oui, les couleurs ne sont pas consécutives, mais ce n'est pas amusant.
la source
0,0
soit RVB0,0,0
. Je vois31,31,31
. En fait, le zéro de la colonne entière semble être cette couleur.Visual Basic .NET, 273 octets
Cela génère un fichier de 5,61 Mo:
Le code ci-dessus est une version compressée de ce code plus lisible. Les espaces ont été supprimés pour enregistrer les octets.
Lien vers l'image: http: //µ.pw/k
la source
ImageMagick - Convertir 119
Permet d'utiliser le
convert
depuis la boîte à outils ImageMagick pour créer des images. Il s'exécute en 0 secondes. Il est joué à 119 personnages. Je superpose deux dégradés (rouge-bleu et noir-blanc) pour les convertir en HSL et revenir en RVB.Des exemples de superposition de dégradé peuvent être trouvés dans les pages de manuel ImageMagick .
la source
identify -format %k o.png
. Je suis 1.762.920, pas 2073600PHP, 507
Vous devrez probablement augmenter la quantité de mémoire allouée à PHP pour fonctionner. Utilise GD. Prend environ 9 secondes pour générer l'image.
Lien vers l'image de sortie: http://i.stack.imgur.com/AAKqW.png
Voyez-le en cours d'exécution sur le Web: http://ben-paton.co.uk/portfolio/pixel.php?w=1920&h=1080
la source
DELPHI / PASCAL (Version # 1), 361 octets
la source
Tcl / Tk, 149
150la source
Java
411386 + 24 octetsGolfé
Non golfé
Résultat
Explication
Ce n'est pas ma tentative de la solution la plus courte, mais plutôt la plus portable. L'importation de BufferedImage est restée uniquement car les autres n'ont pas enregistré d'octets. Plutôt que de charger l'image dans un JPanel et d'écrire dessus, j'ai économisé le temps qu'il faut du début jusqu'à l'écriture sur le disque comme nom de fichier. Pour moi, cela prenait des noms de fichiers d'environ ~ 110 ms, alors que le temps du début à la fin prenait généralement ~ 500 ms. Enfin, il devrait être indépendant de la plate-forme comme je l'ai testé à la fois sur Windows et sur une machine virtuelle Ubuntu et cela a fonctionné (il écrit le fichier sur votre bureau). Doit avoir l'instruction return en raison de la syntaxe Callable. Bien que je travaille sur le travail, je doute que je trouve une meilleure implémentation par moi-même en raison des sauvegardes de l'utilisation de l et w pour mes boucles for. Je dirais qu'une demi-seconde pour Java n'est pas trop mal.
Mais je crois qu'il est toujours validé car il peut toujours être ouvert par Chrome, il s'ouvre automatiquement sur votre visionneuse png par défaut (version non testée sur les machines basées sur Unix).
Je suis conscient des sauvegardes d'octets possibles, mais je les ai principalement omises pour pouvoir prétendre à des bonus. Si demandé, je peux télécharger des exemples plus courts et spécifiques à la plate-forme. Merci.
modifier
Suppression du bloc Try Catch inutile et instruction de retour mal formatée pour réduire ~ 30 octets.
Supprimé
BufferedImage.TYPE_INT_RGB
car il s'agit littéralement de 1.la source