Einführung
Ein Quixel ist ein Quantenpixel. Ähnlich wie bei einem klassischen Pixel wird es mit 3 ganzzahligen Werten (Rot, Grün, Blau) dargestellt. Anstelle einer Kombination befinden sich die Pixel jedoch in einer Superposition dieser drei Zustände. Diese Superposition hält nur so lange an, bis das Quixel beobachtet wird und zu einem von drei klassischen Pixeln zusammenfällt. RGB(255,0,0)
, RGB(0,255,0)
Und RGB(0,0,255)
.
Spezifikation
- Darstellung
- Jede QUIXEL ist als eine Anordnung von 3 ganzen Zahlen dargestellt zwischen 0 und 255 r, gund bjeweils.
- Super Positionen
- Jeder QUIXEL ist in einer Superposition zwischen dem Rot, Blau und Grün Staaten vertreten durch R, Gund Bjeweils.
- Überwachung
- Wenn jedes Pixel beobachtet wird, kollabiert es in einen der drei Zustände. Die Wahrscheinlichkeit eines jeden klassischen Zustand ist
R = (r + 1) / (r + g + b +3)
,G = (g + 1) / (r + g + b + 3)
undB = (b + 1) / (r + g + b + 3)
. Auf diese Weise zeigt sich jeder klassische Zustand immer mit einer Wahrscheinlichkeit ungleich Null.
- Wenn jedes Pixel beobachtet wird, kollabiert es in einen der drei Zustände. Die Wahrscheinlichkeit eines jeden klassischen Zustand ist
- Eingang
- Die Funktion oder das Programm sollte ein Bild von Pixeln aufnehmen. Wie das geht ist flexibel. Ein Dateiname, der ein mehrdimensionales Array usw. verwendet, ist akzeptabel.
- Ausgabe
- Die Funktion oder das Programm sollte ein Bild von klassischen Pixeln erzeugen. Die Datenstruktur für dieses erzeugte Bild ist ebenfalls flexibel. Beachten Sie, dass alle Pixel eines dieser drei sein sollte:
RGB(255,0,0)
,RGB(0,255,0)
undRGB(0,0,255)
- Die Ausgabe sollte nicht deterministisch sein . Das sind Quantenpixel ! Der gleiche Eingang sollte zu unterschiedlichen Ausgängen führen.
- Wenn Ihre Sprache keine Möglichkeit hat, eine Zufallszahl zu generieren, können Sie Zufallsbytes als Eingabe verwenden
- Die Funktion oder das Programm sollte ein Bild von klassischen Pixeln erzeugen. Die Datenstruktur für dieses erzeugte Bild ist ebenfalls flexibel. Beachten Sie, dass alle Pixel eines dieser drei sein sollte:
- Wertung
- Dies ist Code-Golf, so dass nur wenige Bytes gewinnen.
Bilder
Mona Lisa von Leonardo da Vinci
Sternennacht von Vincent van Gogh
Beharrlichkeit der Erinnerung von Salvador Dali
Teddy Roosevelt VS. Bigfoot von SharpWriter
code-golf
graphical-output
random
image-processing
NichtlinearFruit
quelle
quelle
RGBK
, woK=255*3-R-G-B
, dann machen Sie Ihre Quantenpixel zu einem der 4. (Wenn K ausgewählt ist, zeigen Sie (0,0,0) an. Erweitern Sie Ihre RGB-Gleichungen in offensichtliche Weise, Ändern von 3s zu 4s, Hinzufügen von K, wenn Sie R + G + B hinzufügen würden, etc). Eine Unschärfe danach sollte eine recht ordentliche, verrauschte Kopie des Originals erzeugen. (K steht für Schwarz oder Schlüssel, falls Sie sich gefragt haben)Antworten:
Dyalog APL ,
232119 BytesNimmt Tabelle von (R, G, B) Drillingen.
Inspiriert vom Meilenalgorithmus
Gibt die Indextabelle in {(255, 0, 0), (0, 255, 0), (0, 0, 255)} zurück. Schrecklich verschwenderisch.
(
?∘≢
Zufallsindex⊃
wählt⊢
aus)¨
jedem von(
⊂
die gesamten⍳3
ersten drei Indizes)/¨⍨
von jedem von repliziert1+⊢
die inkrementierten DrillingeTryAPL!
Alte Version
Gibt eine Tabelle mit 0-basierten Indizes in {(255, 0, 0), (0, 255, 0), (0, 0, 255)} zurück.
{
...}
¨ Finden Sie für jedes Pixel in der Tabelle Folgendes:+/
die Summe von (dh Anzahl der Wahrheiten von)(?0)≥
eine zufällige 0 <Zahl <1 ist größer oder gleich+\
die kumulative Summe von(1+⍵)÷
Die inkrementierten RGB-Werte geteilt durch3+
drei plus+/⍵
die Summe der QuixelHinweis: Dyalog APL können Sie wählten zwischen dem Lehmer Kongruenzgenerator , der Mersenne Twister und das Betriebssystem des RNG ¹ ² .
Zum Beispiel das Bild:
kann geben
Beachten Sie, wie die drei "reinen" Pixel auf ihre jeweiligen Farben reduziert wurden.
TryAPL online!
quelle
Mathematica, 53 Bytes
Anonyme Funktion. Nimmt eine Mathematica
Image
als Eingabe und gibt eineImage
als Ausgabe zurück. Beachten Sie, dass das Eingabebild einen RGB-Farbraum haben muss.quelle
<...>~ImageApply~#
wendet eine Funktion über alle Pixel in dem Bild undRandomChoice[255#+1->IdentityMatrix@3]
verwendet einige gewichtet RNG eine Zeile der 3 × 3 - Einheitsmatrix zu erzeugen (dh{1, 0, 0}
,{0, 1, 0}
oder{0, 0, 1}
) entspricht , zu rot, grün oder blau.C #,
366243 BytesVielen Dank an @TheLethalCoder für das Golfen!
Grundidee:
Beispiele:
Mona Lisa
Sternenklare Nacht
Beharrlichkeit der Erinnerung
Teddy Roosevelt VS. Bigfoot
Hier ist ein aktualisiertes Imgur-Album mit ein paar weiteren Beispielen, um zu zeigen, dass dies nicht deterministisch ist.
quelle
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;};
Und es gibt noch Verbesserungen, die gemacht werden könnenPython 2,
172166162 BytesDie Ebenen für den zweiten und dritten Gedankenstrich bestehen aus einem unformatierten Tabulator und einem unformatierten Tabulator sowie einem Leerzeichen. Dies spielt wirklich schlecht mit Markdown, so dass die Tabulatoren durch zwei Leerzeichen ersetzt wurden.
Verwendet ein ähnliches Eingabe- / Ausgabeformat wie die APL-Antwort von Adám . Die Eingabe ist ein 2D-Array von RGB-Tupeln. Ausgang ist ein 2D - Array aus
0
,1
oder2
, was rot, grün und blau sind. Beispielsweise:Unten ist meine ältere Python 3-Antwort mit PIL.
Python 3 + PIL,
271250245243 BytesIteriert über jedes Pixel und wendet die Quixel-Funktion darauf an. Übernimmt den Dateinamen als Eingabe und speichert die Ausgabe in
o.png
.Hier sind einige Ergebnisse:
quelle
R, 58 Bytes
Eingabe besteht aus drei numerischen Vektoren gehalten in
r
,g
undb
jeweils.Wir müssen die Wahrscheinlichkeiten nicht normalisieren, um eine Summe zu bilden, was automatisch in geschieht
rmultinom
.Die Ausgabe erfolgt in der Form
Wo gibt es eine einzelne
1
in jeder Spalte. Das1
steht in der ersten Zeile für "R" -Pixel, in der zweiten Zeile für "G" und in der dritten Zeile für "B".quelle
Pyth -
1110 BytesNimmt RGB 2d-Bitmap auf und gibt Bitmap mit indizierter 3-Bit-Farbe aus.
Diese Verschachtelungsebene verletzt meinen Kopf.
Probieren Sie es hier online aus .
quelle
J,
20 -18 -17 BytesDas Bild wird als Array mit den Abmessungen h x w x 3 eingegeben, die die RGB-Werte als Ganzzahlen im Bereich von 0 bis 255 darstellen. Die Ausgabe ist eine Tabelle mit den Abmessungen h x w, wobei 1 ein RGB-Wert von (255, 0, 0) ist ), 2 ist (0, 255, 0) und 3 ist (0, 0, 255).
Erläuterung
Das
()"1
bedeutet , dass dieses VERB jedes Array des Rangs 1 in dem Eingang angelegt werden soll, was bedeutet , dass es für jeden gelten Pixel .quelle
Gelee ,
87 BytesDie Eingabe ist eine 3D-Liste mit den Abmessungen h x w x 3. Die Ausgabe ist eine 2D-Liste mit den Abmessungen h x w, wobei 1 den RGB-Wert (255, 0, 0) darstellt, 2 (0, 255, 0) und 3 ist (0, 0, 255).
Die folgende Beispieleingabe ist der 4 x 4-Bereich oben links im Mona Lisa-Bild.
Probieren Sie es online!
Erläuterung
quelle
Python 3, 119 Bytes
Wobei
m
die Eingabe als 2D-Array von Pixeln verwendet wird, wobei jedes Pixel eine Liste des Formulars ist[r,g,b]
. Kehrt an jeder Pixelposition zurück0,1,2
, um(250,0,0), (0,250,0), and (0,0,250)
jeweils darzustellen .quelle
input
eine Funktion verwenden oder machen undm
als Parameter nehmen.