Introducción
Un quijel es un píxel cuántico. Similar a un píxel clásico, se representa con 3 valores enteros (rojo, verde, azul). Sin embargo, los quijels están en una súper posición de estos 3 estados en lugar de una combinación. Esta súper posición solo dura hasta que se observa el quijel, momento en el que colapsa en uno de los tres píxeles clásicos; RGB(255,0,0)
, RGB(0,255,0)
Y RGB(0,0,255)
.
Especificación
- Representación
- Cada quijel se representa como una matriz de 3 enteros entre 0 y 255 r, gy brespectivamente.
- Super Posiciones
- Cada quijel está en una súper posición entre los estados Rojo, Azul y Verde representados por R, Gy Brespectivamente.
- Observación
- Cuando se observa cada quijel, colapsa en uno de los tres estados. La probabilidad de cada estado clásico es
R = (r + 1) / (r + g + b +3)
,G = (g + 1) / (r + g + b + 3)
yB = (b + 1) / (r + g + b + 3)
. De esta manera, cada estado clásico siempre tiene una probabilidad distinta de cero de aparecer.
- Cuando se observa cada quijel, colapsa en uno de los tres estados. La probabilidad de cada estado clásico es
- Entrada
- La función o programa debe tomar una imagen de quijels. Cómo lo hace es flexible. Un nombre de archivo, utilizando una matriz multidimensional, etc., son aceptables.
- Salida
- La función o programa debe producir una imagen de píxeles clásicos. La estructura de datos para esta imagen producida también es flexible. Nótese que todos los píxeles debería ser uno de estos tres:
RGB(255,0,0)
,RGB(0,255,0)
yRGB(0,0,255)
- La salida no debe ser determinista ; ¡Son píxeles cuánticos ! La misma entrada debería dar como resultado diferentes salidas.
- Si su idioma no tiene forma de generar un número aleatorio, puede tomar bytes aleatorios como entrada
- La función o programa debe producir una imagen de píxeles clásicos. La estructura de datos para esta imagen producida también es flexible. Nótese que todos los píxeles debería ser uno de estos tres:
- Tanteo
- Este es el código de golf, por lo que ganan menos bytes.
Imágenes
Mona Lisa de Leonardo da Vinci
Noche estrellada de Vincent van Gogh
Persistencia de la memoria por Salvador Dali
Teddy Roosevelt VS. Bigfoot por SharpWriter
code-golf
graphical-output
random
image-processing
Fruta no lineal
fuente
fuente
RGBK
, dondeK=255*3-R-G-B
, luego, haga que sus píxeles cuánticos sean cualquiera de los 4. (Si se selecciona K, muestre (0,0,0). Extienda sus ecuaciones RGB en el forma obvia, cambiando 3s a 4s, agregando K cuando agregaría R + G + B, etc. Un desenfoque después de hacer esto debería reconstruir una copia ruidosa bastante decente del original. (K significa negro o clave, en caso de que se lo haya preguntado)Respuestas:
Dyalog APL ,
232119 bytesToma la tabla de trillizos (R, G, B).
Inspirado en el algoritmo de millas
Devuelve la tabla de índices en {(255, 0, 0), (0, 255, 0), (0, 0, 255)}. Horriblemente derrochador.
(
?∘≢
índice aleatorio⊃
selecciona⊢
de)¨
cada uno de(
⊂
los⍳3
primeros tres índices completos)/¨⍨
replicados por cada uno de1+⊢
los tripletes incrementadosTryAPL!
Versión antigua
Devuelve la tabla de índices basados en 0 en {(255, 0, 0), (0, 255, 0), (0, 0, 255)}
{
...}
¨ para cada quijel en la tabla, encuentre el:+/
la suma de (es decir, el recuento de verdades de)(?0)≥
un 0 aleatorio <número <1 es mayor o igual que+\
la suma acumulativa de(1+⍵)÷
los valores RGB incrementados divididos por3+
tres más+/⍵
la suma del quijelNota: Dyalog APL le permite elegir entre el generador congruencial lineal de Lehmer , el Mersenne Twister y el RNG ¹ ² del sistema operativo .
Por ejemplo, la imagen:
puede dar
Observe cómo los tres quijels "puros" colapsaron en sus respectivos colores.
TryAPL en línea!
fuente
Mathematica, 53 bytes
Función anónima. Toma un Mathematica
Image
como entrada y devuelve unImage
como salida. Tenga en cuenta que la imagen de entrada debe tener un espacio de color RGB.fuente
<...>~ImageApply~#
aplica una función sobre todos los píxeles de la imagen, yRandomChoice[255#+1->IdentityMatrix@3]
utiliza algunos RNG ponderada para producir una fila de la matriz de identidad 3 × 3 (es decir{1, 0, 0}
,{0, 1, 0}
o{0, 0, 1}
), que corresponde a rojo, verde o azul.C #,
366243bytes¡Muchas gracias a @TheLethalCoder por jugar al golf!
Idea básica:
Ejemplos:
Mona Lisa
Noche estrellada
Persistencia de la memoria
Teddy Roosevelt VS. Pie Grande
Aquí hay un álbum de imgur actualizado con algunos ejemplos más, para mostrar que esto no es determinista.
fuente
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;};
Y todavía hay mejoras que se pueden hacerPython 2,
172166162 bytesLos niveles de sangría segundo y tercero son una pestaña sin procesar y una pestaña sin procesar más un espacio, respectivamente; esto juega muy mal con Markdown, por lo que las pestañas han sido reemplazadas por dos espacios.
Utiliza un formato de entrada / salida similar a la respuesta APL de Adám . La entrada es una matriz 2D de tuplas RGB; la salida es una matriz 2D de
0
,1
o2
, que representa rojo, verde y azul, respectivamente. Por ejemplo:A continuación se muestra mi respuesta anterior de Python 3 usando PIL.
Python 3 + PIL,
271250245243 bytesItera sobre cada píxel y le aplica la función de quijel. Toma el nombre de archivo como entrada y guarda su salida en
o.png
.Aquí hay algunos resultados:
fuente
R, 58 bytes
La entrada consta de tres vectores numéricos mantenidos en
r
,g
yb
respectivamente.No necesitamos normalizar las probabilidades para sumar uno, eso sucede automáticamente en
rmultinom
.La salida es de la forma
Donde hay un solo
1
en cada columna. El1
está en la primera fila para los píxeles "R", la segunda fila para "G" y la tercera fila para "B".fuente
Pyth -
1110 bytesToma un mapa de bits RGB 2d y genera un mapa de bits con color indexado de 3 bits.
Ese nivel de anidación me duele la cabeza.
Pruébelo en línea aquí .
fuente
J,
201817 bytesLa imagen se ingresa como una matriz con dimensiones h x w x 3 que representan los valores RGB como enteros en el rango de 0 a 255. La salida es una tabla con dimensiones h x w donde 1 es un valor rgb de (255, 0, 0 ), 2 es (0, 255, 0) y 3 es (0, 0, 255).
Explicación
El
()"1
representa que este verbo se debe aplicar a cada matriz de rango 1 en la entrada, lo que significa que se aplicará a cada píxel .fuente
Jalea ,
87 bytesLa entrada es una lista 3d con dimensiones h x w x 3. La salida es una lista 2d con dimensiones h x w donde 1 representa el valor rgb (255, 0, 0), 2 es (0, 255, 0) y 3 es (0, 0, 255).
La entrada de muestra a continuación es la región 4 x 4 superior izquierda de la imagen de Mona Lisa.
Pruébalo en línea!
Explicación
fuente
Python 3, 119 bytes
¿Dónde
m
se toma la entrada como una matriz de píxeles en 2-d donde cada píxel es una lista de la forma[r,g,b]
? En la posición de cada píxel, vuelve0,1,2
a representar(250,0,0), (0,250,0), and (0,0,250)
respectivamente.fuente
input
o hacer de esto una función y tomarlom
como parámetro.