Étant un grand fan du Rubik's cube et de l'art cool, j'ai travaillé sur la combinaison des deux pour faire des trucs vraiment cool. Fondamentalement, la résolution de cubes Rubik miniatures pour former des pixels rudimentaires dans la formation de l'art du cube Rubik. Des exemples d'un tel art peuvent être vus via ce lien: http://google.com/search?q=rubik%27s+cube+art
Maintenant, le but de ce Code Golf est de créer du code qui accepte une image en entrée, puis la convertit de la manière suivante:
L'image est initialement réduite à des couleurs de niveaux de gris adaptées au Web. Cela s'explique par le fait que nous devons isoler la palette de niveaux de gris sécurisée pour le Web (par exemple 000000, 333333, 666666, 999999, CCCCCC et FFFFFF). Un algorithme sur la méthode colorimétrique de conversion en niveaux de gris est disponible à: http://en.wikipedia.org/wiki/Grayscale#Colorimetric_.28luminance-preserving.29_conversion_to_grayscale , si vous souhaitez utiliser cela comme source d'inspiration.
On pourrait alors rendre l'échelle de gris aux couleurs appropriées. Pour le décomposer rapidement: 000000 fera référence au bleu Rubik, 333333 fera référence au rouge Rubik, 666666 fera référence au vert Rubik, 999999 fera référence à l'orange Rubik, CCCCCC fera référence au jaune Rubik et FFFFFF fera référence au blanc Rubik.
Je préférerais que votre code résultant puisse être rendu directement de la palette de la photo aux couleurs de Rubik. La méthode en deux étapes de conversion en niveaux de gris sécurisés pour le Web, puis dans la palette Rubik correspondante, est juste pour vous donner une idée de la logique derrière le processus, mais si cela est plus facile pour vous, faites-le par tous les moyens.
Les valeurs RVB réelles pour la palette de Rubik doivent correspondre à ce qui suit:
- Rouge: # C41E3A
- Vert: # 009E60
- Bleu: # 0051BA
- Orange: # FF5800
- Jaune: # FFD500
- Blanc: #FFFFFF
Pour vous donner un exemple, j'ai recadré la tête d'Abraham Lincoln à partir de l'image suivante:, et rendu l'algorithme pour produire ce qui suit:
La grille est là pour que vous puissiez voir comment chaque cube Rubik miniature individuel devrait être configuré pour constituer l'image. La taille réelle de l'image résultante est de 45 pixels par 45 pixels, ce qui signifie que (45/3) * (45/3) = 15 * 15 = 225 cubes Rubik miniatures seraient utilisés pour créer cette image. Je ne m'attends pas à ce que vous présentiez l'image résultante avec une grille comme je l'ai fait.
Voici donc ce qui est requis:
L'image à traiter par cet algorithme doit avoir une largeur de x pixels par une hauteur de y pixels, de telle sorte que x et y soient des multiples de 3. Ceci facilite la rendu dans le cadre d'une mosaïque de cubes Rubik. Si votre image est assez grande, il est conseillé de la réduire à environ 45 x 45 à 75 x 75 ou environ en dimensions avant le traitement. Gardez à l'esprit que ce composant de redimensionnement est FACULTATIF.
L'image doit être convertie en la palette de cubes Rubik de sextacolored pour créer la mosaïque.
L'image résultante doit être un fichier graphique valide après le traitement. Pour prouver que votre code fonctionne, exécutez-le contre une image de l'un des présidents des États-Unis d'Amérique ou d'une célébrité hollywoodienne bien connue. J'ai déjà utilisé Abraham Lincoln dans mon exemple, donc ce président ne peut plus être utilisé. Assurez-vous de fournir la langue que vous avez utilisée, le nombre d'octets ainsi que le président / célébrité utilisé pour tester votre code, y compris avant et après les prises de vue ...
Chaque entrée doit avoir un président / célébrité unique comme cas de test. Je n'accepterai pas de doublons. Cela garantira que les résultats en double ne sont pas utilisés pour tester différentes entrées de code. C'est très bien de dire que votre code fonctionne, c'est une autre chose de le prouver.
5. Le code le plus court gagne.
Je change cela en un concours de popularité ... Je préfère voir qui peut le faire sans avoir à rivaliser sur le nombre d'octets ... Je vais donc l'attribuer avec une prime après le 28 février 2014.
la source
#000000 => #0051BA
, etc.Réponses:
Imagemagick (108)
Version: ImageMagick 6.8.7-7 Q16 x86_64 2013-11-27
L'appel suivant:
où
input
etoutput
doivent être modifiés pour le nom de fichier d'entrée et de sortie.Je n'ai compté que les caractères entre
-resize
et#FFF"
, si vous pensez que cela n'est pas valide, n'hésitez pas à commenter.J'ai utilisé Lenna comme image (elle est apparue dans un Playboy, et toute personne faisant cela devrait compter comme une célébrité hollywoodienne, non?)
Contribution:
Sortie:
Sortie agrandie:
Remarques: selon les documents imagemagick, vous ne pouvez pas avoir plus d'un opérateur conditionnel dans une instruction, mais l'appel semble toujours fonctionner correctement, donc cela a probablement été corrigé et les documents n'ont tout simplement pas été mis à jour.
En cours d'identification sur l'image du résultat (pour montrer que les couleurs sont bien fines):
Si vous pensez que Lenna ne compte pas comme une véritable célébrité, voici Bruce Willis:
la source
fx
pièce peuvent être encore plus compressées dans un langage qui a une meilleure expressivité. Et ces langues ont également un support d'image natif (donc aucun caractère n'est perdu en ayant besoin d'importer imagemagick / gd / etc.)Mathematica
Nous travaillerons avec une région carrée à partir d'un timbre américain avec Greta Garbo. Il sera appelé
j
.La fonction f prend 3 paramètres:
i
qui fait référence à l'imagers
, la taille du rasterm
, une variable booléenne qui indique si les lignes de maillage doivent être utilisées. (Le paramètre par défaut est True).Utilisation de tailles de trame de 15, 30, 45 et 75:
Je ne peux pas imaginer quelqu'un faire un Rubrik's cube avec autant de pièces! Exercice intéressant néanmoins.
Jouer avec les couleurs
Ceci provient d'une entrée antérieure. Le code est légèrement différent.
Graphics
est utilisé à la place deArrayPlot
. De plus, nous utilisons le tampon complet même s'il n'est pas carré.Il existe 6! = 720 permutations des couleurs du cube Rubrik.
Ce qui suit affiche l'image centrale de la rangée supérieure (définissez 6 images ci-dessous). Lorsque les valeurs de niveaux de gris sont organisées du plus sombre au plus clair, les couleurs sont {r, gr, b, o, y, w}. D'autres variantes fonctionnent néanmoins.
i
est l'image originale en niveaux de gris.i
est l'image originale en niveaux de gris du tampon Greta Garbo complet.Rasterize[garbo,RasterSize->75
pixellise l'image dans un tableau 75 x 75.ColorQuantize[<>, 6]
réduit les valeurs de niveaux de gris à un ensemble de 6.ImageData
récupère le tableau de données de l'image; ça vient à l'envers.Reverse
retourne le tableau de données, d'où l'image, côté droit vers le haut.garboColors
sont les 6 valeurs de niveaux de gris dans l'image quantifiée.Graphics[Raster
affiche l'image finale.rubrikColors
sont les valeurs RVB des 6 couleurs du cube Rubrik.Différentes permutations de couleur de rouge, vert, bleu, orange, jaune et blanc sont données.
Et le code:
Garbos Galore
Voici 72 (sur 720) images de Greta Garbo qui utilisent les 6 couleurs du cube Rubrik. Certaines images fonctionnent mieux que d'autres, vous ne pensez pas?
la source
Reverse
pourrait être éliminé, laissant l'image à l'envers, mais je ne vois pas d'autres opportunités. Mathematica est expressif mais utilise de gros mots. Quelqu'un adepte des images pourrait probablement réduire un peu la taille du code mais je doute qu'ils pourraient battre votre code imagemagick.i
tenir l'image d'origine.gr
représente le vert de Rubrik.g
fait référence aux données d'image tramées et quantifiées pour l'image en niveaux de gris.Smalltalk (Smalltalk / X),
289139 *entrée: i; sortie: r
contribution:
sortie:
agrandi:
(pour tous les jeunes: ce n'est PAS Madonna ;-)
[*] Je n'ai pas compté le grossissement jusqu'à 75x75 (la première ligne) - j'aurais pu utiliser un déjà redimensionné comme entrée. J'espère que cela vous convient.
la source
Post-scriptum et VRAIES couleurs Rubik! ;-)
Eh bien, cette solution est un peu hors sujet ici, car elle se limite à une sphère quelque peu hautement spécialisée. Mais après beaucoup de frustration avec, par exemple, "la question des nombres étranges" (étant incapable de produire quelque chose qui fonctionne pratiquement), j'ai décidé de publier quelque chose et j'ai donc retiré cela de ma pile de gribouillis à moitié finis et je l'ai rendu présentable.
La solution exploite le fait que la première révision de cette question définit les couleurs requises par un lien vers un site, ce qui indique clairement que les couleurs Pantone (R) doivent être utilisées et que les couleurs RVB ne sont que des approximations. Alors j'ai pensé, pourquoi devrais-je faire des approximations, quand je peux faire de la vraie couleur? - :)
Ce code doit être enregistré comme par exemple
rubik.ps
, puis envoyé à Ghostscript avec une incantation habituelle:Il vous attend ensuite sur la ligne suivante, pour la saisie du nom de fichier JPG par exemple
et, si tout se passe bien, enregistre la sortie dans un
out.psd
fichier.L'entrée doit être RGB RVB carré (n'importe quelle taille), la sortie est PSD avec des canaux de couleurs d'accompagnement. Vous aurez besoin de Photoshop pour afficher le fichier. Le changement d'appareil GS de
psdcmyk
n'importe quoi d'autre ne produira rien d'utile. JPEG en entrée - parce que l'interpréteur postscript peut décoder directement le flux de données. Forme carrée - car le programme s'appuie sursqrt
la longueur de la chaîne pour trouver la largeur (et la hauteur) de l'image.Les premières lignes définissent la taille de l'image de sortie (peut être modifiée par rapport à 75 par défaut) et la palette de couleurs (les couleurs et leur nombre peuvent également être modifiés). Je pense que tout le reste n'est pas codé en dur.
Que se passe-t-il? Le flux de triplets RVB est converti à la volée en une chaîne de valeurs de niveaux de gris (avec une formule simple), un dictionnaire d'images de contone 8 bits habituel est construit et utilisé pour peindre 5 images identiques les unes sur les autres dans 5
Separation
espaces colorimétriques. L'astuce consiste à appliquer des fonctions de transfert avant chaque appel d'image
opérateur. Par exemple, pour la peinture jaune, cette fonction renvoie 0 pour les valeurs d'entrée dans la plage 0,167 .. 0,333 uniquement, et 1 sinon.Contribution:
Capture d'écran de la sortie 75x75 ouverte dans Photoshop, agrandie 800%:
Et la palette des canaux Photoshop:
la source
C #
Vous devez l'exécuter avec 3 paramètres:
foo.exe 75 d:\test.jpg d:\out.png
Où
75
est max. largeur / hauteur,d:\test.jpg
est le fichier d'entrée etd:\out.png
le fichier de sortie.Sortie pour différentes images dans ce concours:
Ma propre célébrité:
Sortie:
Cependant, d'autres tailles (supérieures à 75x75) donnent de meilleures images:
Et, si nous nous en tenons aux présidents:
Puisque ce n'est plus (plus?) Du codegolf, je n'ai pas pris la peine de "minimiser" trop le code. De plus, comme les instructions ne mentionnaient pas spécifiquement que l'image devait avoir la même largeur que la hauteur (carré), je ne me suis pas donné la peine de recadrer; Je fais cependant, assurez - vous que l'image est un multiple de 3 pixels de large / haut. Si vous voulez des images carrées, utilisez des entrées carrées Enfin; l'algorithme est loin d'être optimal.
Un peu plus (puisque les gens votent plus pour les poussins chauds / les héros Internet )
la source
Brainfuck
Cela nécessite un interpréteur / compilateur BF qui a -1 comme EOF et qui a plus de 8 cellules binaires SI l'un des pixels rouges est 255. Sinon, il s'arrêtera prématurément car il ne pourra pas différer entre EOF et la valeur 0xFF . Avec jitbf, vous avez tout ce que la machine a comme taille entière et pouvez le faire pour forcer -1 comme EOF:
Le format de fichier d'image rendu est le fichier PNM RVB complet (P6), brut en option dans Gimp.
Il utilise uniquement le canal vert (qui est l'une des nombreuses façons de convertir une image couleur en niveaux de gris). Il réduit la valeur de 43 sans réduire la valeur en dessous de zéro pour savoir quelle couleur rubiks utiliser et avoir un commutateur qui imprime la bonne couleur RBG qui correspond.
Image d'Angelina Jolie de Hackers (1995) réduite à 75x75 et traitée avec l'application:
Pareil, seulement j'ai utilisé la taille d'origine :
Et puisque je suis psychique, voici également un président:
la source
Objectif c
J'ai vu ce défi la nuit dernière et j'ai eu un temps un peu déroutant
-[NSArray indexOfObject:inSortedRange:options:usingComparator:]
, d'où le retard.Je l'ai exécuté sur mon iPad comme ceci:
Avant Après
Avant Après
la source
Python
Format:
python rubik.py <input> <max_cubes> <output>
.Couvre le pixel en niveaux de gris en utilisant l'algorithme suggéré.
Contribution:
(source: ilmamilio.it )
Sortie avec
max_cubes = 25
:Sortie avec
max_cubes = 75
:Sortie avec
max_cubes = 225
:la source