Wprowadzenie
Quixel to piksel kwantowy. Podobnie jak klasyczny piksel, jest reprezentowany przez 3 wartości całkowite (czerwony, zielony, niebieski). Jednak piksele są w super pozycji tych 3 stanów zamiast kombinacji. Ta super pozycja trwa tylko do momentu zaobserwowania piksella, w którym to momencie zapada się w jeden z trzech klasycznych pikseli; RGB(255,0,0)
, RGB(0,255,0)
I RGB(0,0,255)
.
Specyfikacja
- Reprezentacja
- Każdy Quixel jest reprezentowany jako tablica 3 liczb całkowitych od 0 do 255 r, gi bodpowiednio.
- Super Pozycje
- Każdy Quixel znajduje się w położeniu pomiędzy super-czerwony, niebieski i zielony członkowskie reprezentowane przez R, Gi Bodpowiednio.
- Obserwacja
- Kiedy obserwuje się każdy piksel, zapada się w jeden z trzech stanów. Prawdopodobieństwo każdego stanu klasycznego to
R = (r + 1) / (r + g + b +3)
:G = (g + 1) / (r + g + b + 3)
iB = (b + 1) / (r + g + b + 3)
. W ten sposób każdy stan klasyczny zawsze pojawia się jako niezerowe prawdopodobieństwo.
- Kiedy obserwuje się każdy piksel, zapada się w jeden z trzech stanów. Prawdopodobieństwo każdego stanu klasycznego to
- Wkład
- Funkcja lub program powinien wykonać zdjęcie w postaci quikseli. Jak to robi, jest elastyczny. Akceptowana jest nazwa pliku, tablica wielowymiarowa itp.
- Wydajność
- Funkcja lub program powinien generować obraz klasycznych pikseli. Struktura danych dla tego wytworzonego obrazu jest również elastyczna. Zauważ, że wszystkie piksele powinno być jednym z tych trzech:
RGB(255,0,0)
,RGB(0,255,0)
iRGB(0,0,255)
- Wynik nie powinien być deterministyczny ; to są piksele kwantowe ! To samo wejście powinno dawać różne wyniki.
- Jeśli twój język nie ma możliwości wygenerowania losowej liczby, możesz pobrać losowe bajty jako dane wejściowe
- Funkcja lub program powinien generować obraz klasycznych pikseli. Struktura danych dla tego wytworzonego obrazu jest również elastyczna. Zauważ, że wszystkie piksele powinno być jednym z tych trzech:
- Punktacja
- To jest golf golfowy, więc wygrywa najmniej bajtów.
Zdjęcia
Mona Lisa przez Leonardo da Vinci
Starry Night przez Vincenta van Gogha
Trwałość pamięci przez Salvador Dali
Teddy Roosevelt VS. Bigfoot firmy SharpWriter
code-golf
graphical-output
random
image-processing
Nieliniowe Owoce
źródło
źródło
RGBK
, gdzieK=255*3-R-G-B
, a następnie ustaw piksele kwantowe na dowolne z 4. (Jeśli wybrano K, wyświetl (0,0,0). Rozszerz równania RGB w oczywisty sposób, zmiana 3s na 4s, dodanie K, gdy dodasz R + G + B itp.). Rozmycie po wykonaniu tej czynności powinno zrekonstruować całkiem przyzwoitą, hałaśliwą kopię oryginału. (K oznacza czarny lub klucz, na wypadek gdybyś się zastanawiał)Odpowiedzi:
Dyalog APL ,
232119 bajtówPobiera tabelę trypletów (R, G, B).
Inspirowany algorytmem mil
Zwraca tabelę indeksów do {(255, 0, 0), (0, 255, 0), (0, 0, 255)}. Okropnie marnotrawstwo.
(
?∘≢
losowy indeks⊃
wybiera⊢
z)¨
każdego z nich(
⊂
wszystkie⍳3
trzy pierwsze wskaźniki)/¨⍨
powielone przez każdy z1+⊢
inkrementowane trojaczkiTryAPL!
Stara wersja
Zwraca tabelę indeksów opartych na 0 na {(255, 0, 0), (0, 255, 0), (0, 0, 255)}
{
...}
¨ dla każdego quixela w tabeli znajdź:+/
suma (tj. liczba prawd)(?0)≥
losowe 0 <liczba <1 jest większa lub równa+\
skumulowana suma(1+⍵)÷
przyrostowe wartości RGB podzielone przez3+
trzy plus+/⍵
suma quixelUwaga: Dyalog APL pozwala wybrać między liniowym generatorem kongruencjalnym Lehmera , Mersenne Twister i RNG ¹ ² systemu operacyjnego .
Na przykład obraz:
może dać
Zauważ, jak trzy „czyste” piksele rozpadły się na swoje kolory.
Wypróbuj APL online!
źródło
Mathematica, 53 bajty
Funkcja anonimowa. Pobiera Mathematica
Image
jako dane wejściowe i zwracaImage
jako dane wyjściowe. Pamiętaj, że obraz wejściowy musi mieć przestrzeń kolorów RGB.źródło
<...>~ImageApply~#
stosuje się funkcję w stosunku do wszystkich pikseli w obrazie, iRandomChoice[255#+1->IdentityMatrix@3]
wykorzystuje pewną ważonej RNG do wytworzenia rzędu macierzy jednostkowej 3 x 3 (to znaczy{1, 0, 0}
,{0, 1, 0}
czy{0, 0, 1}
), która odpowiada na czerwony, zielony lub niebieski.C #,
366243 bajtówOgromne podziękowania dla @TheLethalCoder za grę w golfa!
Podstawowy pomysł:
Przykłady:
Mona Lisa
Gwieździsta noc
Trwałość pamięci
Teddy Roosevelt VS. Bigfoot
Oto zaktualizowany album imgur z kilkoma innymi przykładami, aby pokazać, że jest to niedeterministyczne.
źródło
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;};
I wciąż można wprowadzićPython 2,
172166162 bajtówPoziomy tiret drugie i trzecie to odpowiednio tabulator surowy i tabulator surowy oraz spacja; gra działa naprawdę źle z Markdown, więc karty zostały zastąpione dwoma spacjami.
Używa podobnego formatu wejścia / wyjścia , co odpowiedź APL firmy Adám . Dane wejściowe to tablica 2D krotek RGB; Wyjście jest tablicą 2D
0
,1
lub2
, co stanowi czerwonym, zielonym i niebieskim. Na przykład:Poniżej znajduje się moja starsza odpowiedź w języku Python 3 przy użyciu PIL.
Python 3 + PIL,
271250245243 bajtówIteruje po każdym pikselu i stosuje do niego funkcję quixel. Pobiera nazwę pliku jako dane wejściowe i zapisuje dane wyjściowe
o.png
.Oto kilka wyników:
źródło
R, 58 bajtów
Wejściowy składa się z trzech wektorów numerycznych przeznaczonych do
r
,g
ib
odpowiednio.Nie musimy znormalizować prawdopodobieństwa, aby sumować się do jednego, co dzieje się automatycznie w
rmultinom
.Dane wyjściowe mają postać
Gdzie jest jeden
1
w każdej kolumnie.1
Jest w pierwszym rzędzie dla pikseli „R”, w drugim rzędzie do „G” i trzecim rzędzie „B”.źródło
Pyth -
1110 bajtówPobiera bitmapę RGB 2d i wysyła bitmapę z indeksowanym 3-bitowym kolorem.
Ten poziom zagnieżdżania mnie boli.
Wypróbuj online tutaj .
źródło
J,
201817 bajtówObraz jest wprowadzany jako tablica o wymiarach h x w x 3 reprezentujących wartości RGB jako liczby całkowite w zakresie 0 - 255. Dane wyjściowe to tabela o wymiarach h x w, gdzie 1 jest wartością rgb (255, 0, 0 ), 2 to (0, 255, 0), a 3 to (0, 0, 255).
Wyjaśnienie
()"1
Oznacza, że ten czasownik ma być stosowana do każdej tablicy rangi 1 na wejściu, co oznacza, że będzie ona miała zastosowanie do każdego piksela .źródło
Galaretka ,
87 bajtówDane wejściowe to lista 3d o wymiarach h x w x 3. Dane wyjściowe to lista 2d o wymiarach h x w, gdzie 1 oznacza wartość rgb (255, 0, 0), 2 to (0, 255, 0), a 3 oznacza (0, 0, 255).
Przykładowe dane wejściowe poniżej to górny lewy region 4 x 4 obrazu Mona Lisa.
Wypróbuj online!
Wyjaśnienie
źródło
Python 3, 119 bajtów
Gdzie
m
dane wejściowe są traktowane jako dwuwymiarowa tablica pikseli, gdzie każdy piksel jest listą formy[r,g,b]
. W pozycji każdego piksela zwraca odpowiednio0,1,2
reprezentację(250,0,0), (0,250,0), and (0,0,250)
.źródło
input
tej funkcji lub ustawić jąm
jako parametr.