Défi:
Saisissez deux images en noir et blanc (monochrome) et xou chaque pixel de la première, avec chaque pixel de la seconde, ajoutez-les à une nouvelle image et sortez la nouvelle image.
Quelques clarifications:
La taille des images n'a pas d'importance. L'extension / le format d'image n'a pas d'importance. Vous pouvez lui demander de saisir n'importe quelle extension et de sortir n'importe quelle extension, tant que l'extension est utilisée pour stocker des images numériques. Vous pouvez également utiliser des graphiques pour dessiner la sortie, par exemple dans une boîte à images si vous le souhaitez. Sinon, enregistrez la sortie dans un fichier. L'entrée peut être considérée comme un chemin vers l'image ou l'URL.
Une chose que vous ne pouvez pas faire cependant, ce sont les tableaux d'E / S, par exemple. de triplets (R, G, B).
Ne modifiez PAS l' alpha . Il ne doit pas être xoré, il doit être de 255 (valeur maximale) pour chaque pixel.
Que voulez-vous dire pour chaque pixel?
Vous n'avez pas à le faire de cette façon, mais une façon de xor deux pixels est de prendre leurs valeurs RVB et xor R1 avec R2, G1 avec G2, B1 avec B2 et prendre le résultat, qui est votre nouvelle couleur
Puisque nous n'avons que deux couleurs, évidemment lorsque les couleurs sont les mêmes, le résultat serait (0,0,0) et quand elles sont différentes (le blanc est 255,255,255 et le noir est 0,0,0) dans ce cas, le résultat serait être 255.255.255.
Ainsi, lorsque deux pixels sont différents, le résultat est un pixel blanc, sinon un pixel noir
Exemple d'E / S:
Entrée 1: Entrée 2:
Sortie:
C'est le code-golf donc le code le plus court gagne.
la source
Réponses:
Le langage d'expression Fx (ImageMagick),
84 octetsMODIFICATIONS
u!=v
, -4 octetsComme "Fx Expression Language" est apparemment Turing complet, j'ai re-profilé ma réponse (était Unix Shell + Image Magick).
Golfé
Fx ne prend pas en charge XOR au niveau du bit ni le NOT au niveau du bit , j'ai donc utilisé à la
!=
place (ce qui fonctionne très bien pour les images BW pures).L'entrée et la sortie sont implicites (contrôlées par l'interpréteur).
Usage
L' utilitaire de conversion ImageMagick sert d'interprète "Fx Expression Language" lorsqu'il est invoqué avec
-fx
, comme illustré ci-dessous:Les arguments sont les suivants:
Exemple de sortie
la source
Mathematica,
373415 octetsMerci à Ian Miller d'avoir réduit le nombre d'octets de plus de la moitié!
En fin de compte, il y a toujours une fonction intégrée. Cette fonction prend deux images en entrée et sort une image; cela fait quelque chose de plus compliqué pour les images en couleur, mais pour le noir et blanc, c'est exactement XOR.
Soumissions précédentes:
Merci à JungHwan Min pour avoir économisé 3 octets!
Fonction sans nom qui prend en entrée une paire ordonnée d'images (de dimensions compatibles) et renvoie une image affichée.
ImageData
obtient uniquement les données de pixels sans tous les wrappers / métadonnées; malheureusement, il renvoie des nombres réels, ilChop
est donc nécessaire pour les traiter comme des nombres entiers.BitXor
fait exactement ce qu'il dit sur l'étain (et passe sur les listes imbriquées), etImage
transforme le RVB résultant en une image.Soumission d'origine, qui a pris une paire ordonnée d'URL ou de noms de fichiers comme entrée:
la source
ImageDifference[#,#2]&
Java,
336335328 octetsNon golfé:
la source
String[] y
. Juste un petit golf mineur.public
depublic class M
pour sauver 7 octets.png
ne devrait pas être nécessairePython,
646057 octetsJe suis nouveau au golf, alors ayez pitié!
Merci à @Blender et @FlipTack de m'avoir sauvé 7 octets!
la source
from cv2 import*
devrait raser 4 caractères.d=
:) aussi, fairer=imread
et ensuite utiliserr
deux fois peut être plus courtOctave,
433834 octetsMerci à flawr m'a sauvé 5 octets.
Merci à Luis Mendo m'a sauvé 4 octets suggérés d'utiliser à la
a~=b
place dexor(a,b)
.Une fonction qui prend comme nom de fichier d'entrée des deux images d'entrée
a,b
et affiche le résultat.Réponse précédente qui écrit dans un fichier:
Une fonction qui prend comme nom de fichier d'entrée des deux images d'entrée
a,b
et nom de fichier de l'image de sortiec
.Usage:
Le résultat est enregistré dans
out.png
la source
imshow()
place deimwrite()
?imread(a)~=imread(b)
(ou+(imread(a)~=imread(b))
si l'entrée logique n'est pas autorisée parimshow
) à la place dexor(...)
?JavaScript (ES6),
333320308299297 octets-
1220 octets enregistrés par Ismael Miguel- 2 octets enregistrés par user2428118
Attend des images déjà chargées, prend la taille de la première entrée comme taille de sortie et renvoie un élément canvas.
Non golfé
Ps: première fois au code-golf, donc il peut probablement être joué plus et mon décompte peut être erroné.
PPs: le contexte 2D de canevas a un
xor
[mode de composition ( https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation ), mais il fonctionne sur des valeurs alpha ...Pourrait être encore plus joué (251 octets) avec une taille fixe de 300 * 150 px (tout le reste est noir) comme dans la réponse de traitement
Afficher l'extrait de code
la source
c
parc=i=>{with(document.createElement('canvas')){width=i.width,height=i.height;return getContext`2d`}}
et vous économisez 16 octets.xor
un rectangle noir sur lesxor
deux images pour revenir à 255 alpha?with
mais semble assez bon pour le golf ;-) De plus, j'ai oublié que le modèle littéral enregistre 2 octets ...(i,j)=>{c=i=>{with(document.createElement(C='canvas')){width=i.width,height=i.height;return getContext`2d`}},g=i=>{x=c(i);x.drawImage(i,0,0);return x.getImageData(0,0,i.width,i.height)},a=g(i),b=g(j).data,d=a.data,r=c(i);d.forEach((e,i)=>{d[i]=i%4>2?255:e^b[i]});r.putImageData(a,0,0);return r[C]}
Traitement,
124118117 octetsUsage:
Non golfé
la source
MATL , 10 octets
Explication
Il s'agit essentiellement de la même réponse que la solution Octave existante : elle prend les noms de fichiers ou les URL des deux images en entrée et affiche le résultat à l'écran.
Usage
la source
Perl, 260 octets
251 octets de code + 9 octets pour
-MImager
.Je ne suis pas sûr que Perl soit le meilleur langage pour ce défi, mais je voulais savoir quelle était l'image du commentaire de @ orlp. Et ça me fait utiliser un peu de ces modules graphiques, c'est une bonne chose. Et j'ai aimé le coder!
Une version plus lisible:
Vous aurez besoin d'installer Imager si vous voulez l'essayer, mais c'est assez simple: exécutez simplement
(echo y;echo) | perl -MCPAN -e 'install Imager'
votre terminal.la source
LÖVE2D , 199 octets
Assez simple, prend deux fichiers image sur la ligne de commande, génère un fichier appelé "Z" dans le répertoire Love. Fonctionne également pour les images en couleur!
la source
J, 54 octets
Prend deux arguments où chacun est le chemin d'accès à une image d'entrée au
bmp
format. Chaque image est lue comme une matrice d'entiers RVB 24 bits et analysée en un triplet de valeurs RVB 8 bits, le signe de chacune est pris et les deux matrices sont XOR ensemble. Le résultat est ensuite mis à l'échelle par 255, reconverti à partir d'un triplet de nombres de base 256 en un entier, et écrit dans unbmp
fichier de sortie nomméo
.la source
C, 189 octets
Fonctionne sur les images PBM. Appelez
f(a, b, out)
avec les noms des fichiers d'entrée et du fichier de sortie.Hypothèses:
Les deux en-têtes d'image d'entrée sont identiques (espace inclus) et sont inférieurs à des
9 * sizeof(int)
caractères.Nous sommes sur un bon système d'exploitation qui vide et ferme les fichiers ayant fui.
EOF == -1
Non golfé et expliqué: (barres obliques inversées omises)
C (flexion des spécifications), 149 octets
Utilise toujours des fichiers PBM, mais maintenant:
L'image doit avoir une hauteur d'un pixel et une largeur de 8 pixels ou moins, car PBM contient 8 pixels dans un octet.
L'en-tête doit être de 7 octets (par exemple
P4 8 1
avec un espace de fin).Les deux fichiers sont recherchés vers l'avant tout en remplissant
t
leur en-tête, puis les derniers octets sont lus, corrigés et réécrits. Profite des listes de paramètres similairesfread
et enfwrite
dispose pour factoriser les trois opérations sur l'en-tête derrière la même macro.la source
R, 45 octets
a
etb
représentent les noms de fichier des deux fichiers image.Exemple:
Sortie:
la source
Traitement, 82 octets
Abuse les fonctions de dessin étendues de Processing pour éviter de faire du XORing. Mélange les deux images avec le
DIFFERENCE
mode et les dessine à l'écran.Usage
Non golfé
la source
32
placeDIFFERENCE
. Ce serait une bonne astuce pour le golf: codegolf.stackexchange.com/questions/26809/… :)C #, 233 octets
Merci à Unknown6656 pour l'astuce que les arguments de ligne de commande ne sont pas nécessaires. Le programme lit maintenant à partir des fichiers "a" et "b" et écrit dans le fichier "c" dans le même format que "a". Éteint d'une erreur également corrigée.
Il définit chaque pixel sur noir si la couleur est la même, sinon blanc.
Pour enregistrer les octets, il intercepte les exceptions hors limites, plutôt que de vérifier les propriétés Width et Height des Bitmaps. Chaque fois que x sort des limites, il est remis à 0 et y est incrémenté. Lorsque y sort des limites, x est égal à 0 et la boucle se rompt pour enregistrer l'image et quitter.
Exemple de compilation à l'aide de csc et d'exécution à l'aide de mono:
la source
(string[] v)
dans la déclaration principale, car C # n'en a pas explicitement besoin pour exécuter une applicationClojure, 300 octets
Arnaque flagrante de la réponse Java . Je ne savais pas comment relever le défi, mais j'étais curieux de savoir comment la solution Java s'est traduite en Clojure. C'était assez simple. Le code non golfé est en fait assez joli.
Ce fut le premier défi de golf de code que j'ai fait qui comprenait des importations. Il existe probablement un moyen de les optimiser pour économiser quelques octets.
Non golfé:
la source
PHP,
246243 octetsJe peux probablement jouer au golf plus bas.
Exécutez-le à partir de la ligne de commande comme ceci:
la source
$i=imagecreatefrompng;$a=$i($argv[1])
est un octet de plus que$a=($i=imagecreatefrompng)($argv[1])
. Et vous pouvez essayer des images de palette avec une palette de deux couleurs.($f=func)(params)
nécessite PHP 7.for(;$k<$w*$h;)
parfor(;$y<$h;$y+=1/$w)
,$x=$k%$w, $y=$k++/$w
par$x, $y
et le dernier$x
par$x++
. (en supposant qu'il n'y a pas d'erreurs d'arrondi pour toutes les tailles d'image raisonnables)Node.js,
156135 octetsLes fichiers d'image d'entrée et de sortie doivent être au format PBM (P1), où se trouve la première ligne
P1 [width] [height]
et la deuxième ligne, les valeurs ascii n / b sans espaces.Voici les images d'entrée suivies de la sortie xor (32x32 pixels):
la source