Introdução
Um quixel é um pixel quântico. Semelhante a um pixel clássico, é representado com 3 valores inteiros (vermelho, verde, azul). No entanto, os quixels estão em uma super posição desses 3 estados, em vez de uma combinação. Essa super posição dura apenas até que o quixel seja observado, no ponto em que cai para um dos três pixels clássicos; RGB(255,0,0)
, RGB(0,255,0)
E RGB(0,0,255)
.
Especificação
- Representação
- Cada quixel é representado como uma matriz de 3 números inteiros entre 0 e 255 r, ge brespectivamente.
- Super Posições
- Cada Quixel está em uma posição de super entre o vermelho, azul e verde estados representados por R, Ge Brespectivamente.
- Observação
- Quando cada quixel é observado, ele entra em colapso em um dos três estados. A probabilidade de cada estado clássico é
R = (r + 1) / (r + g + b +3)
,G = (g + 1) / (r + g + b + 3)
eB = (b + 1) / (r + g + b + 3)
. Dessa forma, cada estado clássico sempre tem uma probabilidade diferente de zero de aparecer.
- Quando cada quixel é observado, ele entra em colapso em um dos três estados. A probabilidade de cada estado clássico é
- Entrada
- A função ou programa deve ter uma imagem de quixels. Como isso é flexível. Um nome de arquivo, usando uma matriz multidimensional, etc, são aceitáveis.
- Saída
- A função ou programa deve produzir uma imagem de pixels clássicos. A estrutura de dados para esta imagem produzida também é flexível. Note-se que todos os pixels deve ser um destes três:
RGB(255,0,0)
,RGB(0,255,0)
eRGB(0,0,255)
- A saída não deve ser determinística ; estes são pixels quânticos ! A mesma entrada deve resultar em saídas diferentes.
- Se seu idioma não tem como gerar um número aleatório, você pode usar bytes aleatórios como entrada
- A função ou programa deve produzir uma imagem de pixels clássicos. A estrutura de dados para esta imagem produzida também é flexível. Note-se que todos os pixels deve ser um destes três:
- Pontuação
- Este é o código-golfe, pois o menor número de bytes vence.
Imagens
Mona Lisa por Leonardo da Vinci
Noite estrelada por Vincent van Gogh
Persistência da Memória por Salvador Dali
Teddy Roosevelt VS. Bigfoot por SharpWriter
code-golf
graphical-output
random
image-processing
NonlinearFruit
fonte
fonte
RGBK
ondeK=255*3-R-G-B
, em seguida, faça com que seus pixels quânticos sejam um dos 4. (Se K estiver selecionado, exiba (0,0,0). maneira óbvia, alterando 3s para 4s, adicionando K quando você adicionaria R + G + B, etc). Um borrão depois de fazer isso deve reconstruir uma cópia barulhenta bastante decente do original. (K significa preto ou chave, no caso de você se perguntou)Respostas:
Dyalog APL ,
232119 bytesToma a tabela de trigêmeos (R, G, B).
Inspirado no algoritmo das milhas
Retorna a tabela de índices em {(255, 0, 0), (0, 255, 0), (0, 0, 255)}. Terrivelmente inútil.
(
?∘≢
índice aleatório⊃
seleciona⊢
de)¨
cada um(
⊂
os⍳3
três primeiros índices inteiros)/¨⍨
replicados por cada um dos1+⊢
os trigêmeos incrementadosTryAPL!
Versão antiga
Retorna a tabela de índices baseados em 0 em {(255, 0, 0), (0, 255, 0), (0, 0, 255)}
{
...}
¨ para cada quixel na tabela, encontre o:+/
a soma de (isto é, contagem de verdades de)(?0)≥
um aleatório 0 <número <1 sendo maior ou igual a+\
a soma acumulada de(1+⍵)÷
os valores RGB incrementados divididos por3+
mais três+/⍵
a soma do quixelNota: O Dyalog APL permite escolher entre o gerador congruencial linear Lehmer , o Mersenne Twister e o RNG G ² do sistema operacional .
Por exemplo, a imagem:
pode dar
Observe como os três quixels "puros" desmoronaram em suas respectivas cores.
TryAPL online!
fonte
Mathematica, 53 bytes
Função anônima. Pega um Mathematica
Image
como entrada e retorna umImage
como saída. Observe que a imagem de entrada deve ter um espaço de cores RGB.fonte
<...>~ImageApply~#
aplica uma função ao longo do todos os pixels da imagem, eRandomChoice[255#+1->IdentityMatrix@3]
utiliza alguns RNG ponderado para produzir uma linha da matriz identidade 3 × 3 (isto é{1, 0, 0}
,{0, 1, 0}
, ou{0, 0, 1}
) que corresponde ao vermelho, verde ou azul.C #,
366243 bytesMuito obrigado a @TheLethalCoder por jogar isso!
Ideia básica:
Exemplos:
Monalisa
Noite estrelada
Persistência de memória
Teddy Roosevelt VS. Pé Grande
Aqui está um álbum imgur atualizado com mais alguns exemplos, para mostrar que isso não é determinístico.
fonte
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;};
E ainda há melhorias que podem ser feitasPython 2,
172166162 bytesO segundo e o terceiro níveis de recuo são uma guia bruta e uma guia bruta mais um espaço, respectivamente; isso funciona muito mal com o Markdown, então as guias foram substituídas por dois espaços.
Usa um formato de entrada / saída semelhante à resposta do Adám no APL . A entrada é uma matriz 2D de tuplas RGB; saída é uma matriz 2D de
0
,1
ou2
, representando vermelho, verde e azul, respectivamente. Por exemplo:Abaixo está minha resposta mais antiga do Python 3 usando PIL.
Python 3 + PIL,
271250245243 bytesRepete cada pixel e aplica a função quixel a ele. Pega o nome do arquivo como entrada e salva sua saída em
o.png
.Aqui estão alguns resultados:
fonte
R, 58 bytes
A entrada consiste em três vetores numéricos mantidos em
r
,g
eb
respectivamente.Não precisamos normalizar as probabilidades de somar uma, o que acontece automaticamente
rmultinom
.Saída é da forma
Onde existe um único
1
em cada coluna. A1
é em primeira linha para pixels "R", a segunda linha de "L" e a terceira fila para "B".fonte
Pitão -
1110 bytesPega bitmap RGB 2d e gera bitmap com cores indexadas de 3 bits.
Esse nível de aninhamento está doendo minha cabeça.
Experimente online aqui .
fonte
J,
201817 bytesA imagem é inserida como uma matriz com dimensões h x w x 3 representando os valores RGB como números inteiros no intervalo de 0 a 255. A saída é uma tabela com dimensões h x w em que 1 é um valor rgb de (255, 0, 0 ), 2 é (0, 255, 0) e 3 é (0, 0, 255).
Explicação
O
()"1
representa que esse verbo deve ser aplicado a cada matriz da classificação 1 na entrada, o que significa que será aplicado a cada pixel .fonte
Gelatina ,
87 bytesA entrada é uma lista 3d com dimensões h x w x 3. A saída é uma lista 2d com dimensões h x w em que 1 representa o valor rgb (255, 0, 0), 2 é (0, 255, 0) e 3 é (0, 0, 255).
A entrada de amostra abaixo é a região 4x4 superior esquerda da imagem da Mona Lisa.
Experimente online!
Explicação
fonte
Python 3, 119 bytes
Onde
m
é feita a entrada como uma matriz bidimensional de pixels em que cada pixel é uma lista do formulário[r,g,b]
. Na posição de cada pixel, retorna0,1,2
para representar(250,0,0), (0,250,0), and (0,0,250)
respectivamente.fonte
input
ou tornar isso uma função e tomarm
como parâmetro.