introduction
Un quixel est un pixel quantique. Semblable à un pixel classique, il est représenté avec 3 valeurs entières (rouge, vert et bleu). Cependant, les quixels sont dans une super position de ces 3 états au lieu d'une combinaison. Cette super position ne dure que jusqu’à ce que le quixel soit observé, puis se réduit à l’un des trois pixels classiques; RGB(255,0,0)
, RGB(0,255,0)
Et RGB(0,0,255)
.
spécification
- Représentation
- Chaque quixel est représenté par un tableau de 3 entiers compris entre 0 et 255 r, get brespectivement.
- Super positions
- Chaque QUIXEL est dans une position super entre le rouge, bleu et vert états représentés par R, Get Brespectivement.
- Observation
- Lorsque chaque quixel est observé, il s'effondre dans l'un des trois états. La probabilité de chaque état classique est
R = (r + 1) / (r + g + b +3)
,G = (g + 1) / (r + g + b + 3)
etB = (b + 1) / (r + g + b + 3)
. De cette façon, chaque état classique a toujours une probabilité d’apparition différente de zéro.
- Lorsque chaque quixel est observé, il s'effondre dans l'un des trois états. La probabilité de chaque état classique est
- Contribution
- La fonction ou le programme doit prendre une image de quixels. Comment cela fonctionne-t-il? Un nom de fichier, en utilisant un tableau multi-dimensionnel, etc. sont tous acceptables.
- Sortie
- La fonction ou le programme doit produire une image de pixels classiques. La structure de données pour cette image produite est également flexible. Notez que tous les pixels devraient être l' un de ces trois:
RGB(255,0,0)
,RGB(0,255,0)
etRGB(0,0,255)
- Le résultat ne devrait pas être déterministe ; ce sont des pixels quantiques ! La même entrée devrait donner des sorties différentes.
- Si votre langue n'a aucun moyen de générer un nombre aléatoire, vous pouvez utiliser des octets aléatoires en tant qu'entrée.
- La fonction ou le programme doit produire une image de pixels classiques. La structure de données pour cette image produite est également flexible. Notez que tous les pixels devraient être l' un de ces trois:
- Notation
- C’est du code-golf, si peu d’octets gagnent.
Images
Mona Lisa de Leonardo da Vinci
Nuit étoilée de Vincent van Gogh
La persistance de la mémoire par Salvador Dali
Teddy Roosevelt VS. Bigfoot par SharpWriter
code-golf
graphical-output
random
image-processing
Fruit non linéaire
la source
la source
RGBK
, oùK=255*3-R-G-B
, puis définissez vos pixels quantiques sur l’un des 4 (si K est sélectionné, affichez (0,0,0). Étendez vos équations RVB dans la manière évidente, changer 3s à 4s, ajouter K quand vous ajouteriez R + G + B, etc.). Un flou après cela devrait reconstituer une copie assez décente et bruyante de l'original. (K signifie noir ou clé, au cas où vous vous le demanderiez)Réponses:
Dyalog APL ,
232119 octetsPrend la table de triplés (R, G, B).
Inspiré par l'algorithme de miles
Renvoie la table des index en {(255, 0, 0), (0, 255, 0), (0, 0, 255)}. Horriblement inutile.
(
?∘≢
index aléatoire⊃
sélectionne⊢
de)¨
chacun des(
⊂
l'ensemble des⍳3
trois premiers indices)/¨⍨
répliqués par chacun des1+⊢
les triplets incrémentésTryAPL!
Ancienne version
Renvoie une table d'indices basés sur 0 en {(255, 0, 0), (0, 255, 0), (0, 0, 255)}
{
...}
¨ pour chaque quixel du tableau, trouvez le:+/
la somme de (nombre de vérités de)(?0)≥
un aléatoire 0 <nombre <1 étant supérieur ou égal à+\
la somme cumulée de(1+⍵)÷
les valeurs RVB incrémentées divisées par3+
trois plus+/⍵
la somme du quixelRemarque: Dyalog APL vous permet de choisir entre le générateur de congruence linéaire de Lehmer , le Twister de Mersenne et le RNG ¹ ² du système d'exploitation .
Par exemple, l'image:
peut donner
Notez comment les trois "purs" quixels se sont effondrés à leurs couleurs respectives.
TryAPL en ligne!
la source
Mathematica, 53 octets
Fonction anonyme. Prend Mathematica
Image
en entrée et renvoie unImage
en sortie. Notez que l'image d'entrée doit avoir un espace colorimétrique RVB.la source
<...>~ImageApply~#
applique une fonction sur tous les pixels de l'image etRandomChoice[255#+1->IdentityMatrix@3]
utilise un RNG pondéré pour produire une rangée de la matrice d'identité 3 × 3 (c'est{1, 0, 0}
-à- dire{0, 1, 0}
, ou{0, 0, 1}
) qui correspond au rouge, au vert ou au bleu.C #,
366243 octetsUn grand merci à @TheLethalCoder pour avoir joué au golf!
Idée basique:
Exemples:
Mona Lisa
Nuit étoilée
La persistance de la mémoire
Teddy Roosevelt VS. Bigfoot
Voici un album imgur mis à jour avec quelques exemples supplémentaires, pour montrer que c'est non déterministe.
la source
var r=new Random();c=>{double t=c.R+c.G+c.B+3,x=(c.R+1)/t,d=r.NextDouble();return d<=x?Color.Red:d<=x+(c.G+1)/t?Color.Lime:Color.Blue;};b=>{for(int x=0,y;x<b.Width;x++)for(y=0;y<b.Height;y++)b.SetPixel(x,y,g(b.GetPixel(x,y)));return b;};
Python 2,
172166162 octetsLes deuxième et troisième niveaux de retrait sont un onglet brut et un onglet brut plus un espace, respectivement; cela joue vraiment mal avec Markdown, donc les onglets ont été remplacés par deux espaces.
Utilise un format d'entrée / sortie similaire à la réponse APL d' Adám . L'entrée est un tableau 2D de n-uplets RVB; la sortie est un tableau 2D de
0
,1
ou2
représentant respectivement le rouge, le vert et le bleu. Par exemple:Vous trouverez ci-dessous ma réponse plus ancienne à Python 3 en utilisant PIL.
Python 3 + PIL,
271250245243 octetsItère sur chaque pixel et lui applique la fonction quixel. Prend le nom de fichier en entrée et enregistre sa sortie dans
o.png
.Voici quelques résultats:
la source
R, 58 octets
Entrée se compose de trois vecteurs numériques tenue à
r
,g
etb
respectivement.Nous n'avons pas besoin de normaliser les probabilités pour faire une somme de 1, cela se produit automatiquement en
rmultinom
.La sortie est de la forme
Où il y en a un
1
dans chaque colonne. Le1
est dans la première ligne pour "R" pixels, la deuxième ligne pour "G" et la troisième ligne pour "B".la source
Pyth -
11 à10 octetsPrend bitmap RVB 2D et génère une image bitmap avec une couleur indexée 3 bits.
Ce niveau de nidification me fait mal à la tête.
Essayez-le en ligne ici .
la source
J,
201817 octetsL’image est entrée sous forme de tableau de dimensions h x w x 3 représentant les valeurs RVB sous forme d’entiers compris entre 0 et 255. La sortie est un tableau de dimensions h x w où 1 est une valeur rgb de (255, 0, 0 ), 2 est (0, 255, 0) et 3 est (0, 0, 255).
Explication
Le
()"1
représente que ce verbe doit être appliqué à chaque tableau de rang 1 dans l'entrée, ce qui signifie qu'il s'appliquera à chaque pixel .la source
Gelée ,
87 octetsL'entrée est une liste 3D de dimensions h x w x 3. La sortie est une liste 2D de dimensions h x w, où 1 représente la valeur de la valeur de référence (255, 0, 0), 2 la valeur (0, 255, 0) et 3 est (0, 0, 255).
L'échantillon ci-dessous est la région 4 x 4 en haut à gauche de l'image Mona Lisa.
Essayez-le en ligne!
Explication
la source
Python 3, 119 octets
Où
m
est l'entrée prise comme un tableau 2D de pixels où chaque pixel est une liste de la forme[r,g,b]
. À la position de chaque pixel, revient0,1,2
à représenter(250,0,0), (0,250,0), and (0,0,250)
respectivement.la source
input
ou en faire une fonction et prendrem
en paramètre.