Siempre me han gustado las pantallas llenas de píxeles coloreados al azar. Son interesantes de ver y los programas que los dibujan son divertidos de ver.
El reto
Llena tu pantalla, o una ventana gráfica, con píxeles de colores.
Las normas
- Su programa debe tener una posibilidad uniforme de elegir todos los colores (es decir, en el rango
#000000
de#FFFFFF
) o todos los colores que se pueden mostrar en su sistema. - Su programa debe continuar mostrando píxeles aleatorios hasta que se detenga manualmente (no puede terminar por sí solo).
- Los píxeles pueden ser de cualquier tamaño, siempre que su salida tenga al menos 40x40 "píxeles".
- Su programa debe ejecutarse a una velocidad tal que pueda reemplazar cada píxel en la pantalla / ventana al menos una vez después de ejecutarse durante tres minutos.
- Su programa debe elegir colores y puntos verdaderamente aleatorios para reemplazar, es decir, aleatorios con todos los puntos / colores igualmente probables. No puede parecer solo al azar. Debe usar un pRNG o mejor, y la salida no puede ser la misma cada vez.
- Su programa debe tener la misma posibilidad de elegir todos los colores en cada iteración .
- Su programa debe reemplazar solo un píxel a la vez.
- Su programa no puede usar Internet ni su sistema de archivos (
/dev/random
y/dev/urandom
salvo).
Ejemplo
Su salida podría verse así si se detiene en un momento aleatorio:
El ganador
La respuesta más corta en cada idioma gana. ¡Que te diviertas!
It must use a pRNG or better
Respuestas:
Minecraft 1.12 Redstone Command Blocks,
4,3552,872 bytes(Tamaño determinado por el tamaño del archivo de bloque de estructura guardado).
Aquí hay una descripción general completa de YouTube , pero intentaré describir el código a continuación.
Configuración de rutina:
Esto configura la cuadrícula 40x40 de soportes de armadura de Minecraft. Los soportes de armadura son necesarios porque Minecraft no tiene forma de sustituir variables en coordenadas mundiales . Por lo tanto, la solución consiste en referirse a la ubicación de estas entidades de soporte de armadura.
Este soporte de armadura llamado es básicamente nuestro "cursor" para colocar todos los soportes de armadura que necesitaremos. El bloque redstone en el último paso "alimenta" los bloques cercanos (incluidos nuestros bloques de comando), por lo que inicia el siguiente ciclo:
En este punto nuestra grilla está completa:
Selector de color aleatorio
Los repetidores morados en el centro de esta imagen eligen un color aleatorio mediante el siguiente comando:
Ese "@r []" es la salsa mágica, selecciona una entidad aleatoria en el mundo que coincide con las condiciones dadas . En este caso, encuentra un soporte de armadura dentro de un radio de 9 bloques , y hemos configurado 16 soportes de armadura, uno para cada color de lana. Debajo del color seleccionado, coloca un bloque de redstone (que alimenta los dos bloques de comando a cada lado).
Selector aleatorio de píxeles
Colocar el bloque de piedra roja debajo del color de lana seleccionado activa dos bloques de comando más:
Esta primera línea usa nuestro mismo comando magic @r para elegir cualquier soporte de armadura en todo el mapa (sin restricción de radio, por lo que incluye la cuadrícula 40x40), y coloca una lana del color seleccionado sobre su cabeza. La X determina el color y varía de 0 a 15. El segundo comando elimina el bloque de redstone para que esté listo para volver a funcionar.
Tengo 5 bloques repetidores morados, y redstone funciona en "ticks" 20 veces por segundo, por lo que estoy colocando 100 píxeles por segundo (menos algunas superposiciones de color). Lo he cronometrado y generalmente cubro toda la cuadrícula en aproximadamente 3 minutos.
Esto fue divertido, intentaré buscar otros desafíos que también funcionen en Minecraft. Muchas gracias a lorgon111 por su serie de tutoriales de YouTube Command Block .
EDITAR: Hizo algunas reducciones serias en el tamaño de la estructura guardada, ahora en 2,872 bytes guardados :
Probado al llevar la estructura guardada a un mundo nuevo, todo sigue funcionando según lo diseñado.
EDIT 2 : enlace de Dropbox de solo lectura al archivo de estructura NBT
El recorrido está en mi video de YouTube , pero estos son los pasos:
\structures
carpeta que cree bajo el guardado del mundo actual./give @p structure_block
y/tp @p -12, 56, -22
salta al lugar correcto para comenzar.fuente
shortest answer in each language wins
y esta es la respuesta más corta en Minecraft: P tiene un +15 extrash + ffmpeg, 52 bytes
¿Ffmpeg cuenta como esolang? :RE
Lamentablemente, se requiere pix_fmt, ya que el valor predeterminado de ffmpeg es yuv420p. Eso falla el requisito de "debe tener la misma probabilidad de cada color de píxel posible". Convenientemente,
cif
es un atajo para un tamaño de video bastante grande que usa menos espacio que "40x40".Como era de esperar, la optimización de este gif con gifsicle no hizo absolutamente nada. Son 4MiB.
fuente
C en POSIX,
98969592 bytes-3 gracias a Tas
Elige entre 16 colores (gris oscuro, rojo, verde, azul, naranja, cian, morado, gris claro, negro, rosa, azul claro, amarillo, cian claro, magenta, blanco) y los imprime directamente en el terminal.
Tenga en cuenta que si su GPU es demasiado lenta, puede parecer que está actualizando toda la pantalla a la vez. En realidad va píxel por píxel, pero C es rápido.
Solución alternativa que hace que los colores sean más distintos:
Prueba de que va píxel por píxel (captura de pantalla del programa alternativo):
Wow, eso parece casi tridimensional ...
fuente
;
compilación correcta, ¡pero parece funcionar muy bien aparte de eso! B-)while
afor
.#define r rand()
y luego usarr%40, r%40, r%2, r%8
JS + HTML
162 + 32 (194)124 + 13 (137) bytesGracias a Luke y otros comentaristas por ahorrarme muchos bytes.
fuente
<canvas id=c>
debería ser suficiente, ya que creo que el tamaño predeterminado para elcanvas
elemento es300 x 150 px
y excede su "tamaño de ventana gráfica " de99 x 99 px
. De todos modos, buena solución.2d
. (No estoy seguro de cómo formatear esto, pero si "2d" es una plantilla literal, no necesita los paréntesis.) (Eliminando mis sugerencias anteriores.)with
declaración para deshacerse de todas las instancias deb.
:r=n=>n*Math.random()|0 setInterval("with(c.getContext`2d`)fillStyle='#'+r(2**24).toString(16),fillRect(r(99),r(99),1,1)")
MATL, 28 bytes
Pruébalo en MATL Online . He agregado una pausa de medio segundo (
.5Y.
) a esta versión.Explicación
fuente
TI-BASIC (84 + C (S) E solamente),
3735 bytesDebido a limitaciones de hardware, esto eventualmente se bloqueará, ya que cada vez que un programa se anida dentro de un programa en TI-BASIC , se asignan 15 KB de RAM para "mantener un marcador" en el programa principal. Esto funcionaría bien en una calculadora "teórica" con RAM infinita, pero si queremos que se ejecute indefinidamente en una calculadora real, podemos envolverla en un
While 1
bucle por 2 bytes adicionales :Las calculadoras de la familia TI-83 con pantallas a color (TI 84 + CE y CSE) admiten 15 colores. Tienen códigos de color a
10
través24
. Esto recorre todos los píxeles en un5!
cuadrado de 120 por 120 ( ) y asigna a cada uno un color aleatorio.Resultado:
fuente
5!
si quisiera 120 píxeles.For(
1 byte,Pxl-On(
1 byte,randInt(
2 bytes, etc.MATLAB, 56 bytes
La salida se parece a la imagen de abajo. Un "píxel" cambia a la vez, y solo uno de los colores RGB cambia.
¿Por qué? Los colores en MATLAB se representan como una matriz 3D, una capa para R, G y B. El código anterior cambia solo una de las capas por iteración. Todos los píxeles y todas las capas se pueden cambiar, por lo que si espera un poco, todos los colores son igualmente posibles en todas las posiciones.
Agregue
pause(t)
dentro del bucle para pausart
segundos entre cada imagen.Debes detenerlo con Ctrl+ C.
fuente
where
Your program must have an equal chance of picking all colors/points each iteration
. ¿Su programa cumple con esto?Bash + coreutils,
5956 bytes\e[48;5;COLORm
es la secuencia de escape al color de fondo.Cada "píxel" tiene la posibilidad de estar en el rango [0..16777215] cada vez.
fuente
jot
:for((;;)){ printf "\e[48;5;`jot -r 1 0 16777215`m ";}
Javascript + HTML 118 + 13 (131 bytes)
#7
no es un color válido, o#777
y#777777
son del mismo color (2x las probabilidades)fuente
Excel VBA,
13110285 BytesFunción de ventana inmediata VBE anónima que utiliza una función auxiliar (ver más abajo) para generar una matriz de celdas coloreadas al azar en el rango
A1:AN40
del objeto de hoja activa.Nota: Esta solución está restringida a instalaciones de 32 bits de MS Excel (y, por lo tanto, de Office en su conjunto), ya
8^8
que no se compilará en versiones de VBA de 64 bitsSalida de muestra
Versión previa
Función auxiliar
Emite un int aleatorio en el rango [0,255]
fuente
C #,
369288287 bytesAhorró 88 bytes gracias a @CodyGray.
Un programa completo que obtiene el control de la pantalla y su tamaño y luego comienza a dibujar píxeles aleatoriamente en él. Tenga en cuenta que esto podría detener su tarjeta gráfica cuando se ejecute. Además, si la pantalla o cualquier control decide volver a pintar en cualquier momento, los píxeles se perderán y deberán volver a dibujarse.
Nota: cuando se ejecuta, manténgase enfocado en la ventana, ya que para matarlo debe presionar Alt + F4 o presionar el botón de cerrar y hacerlo cuando no pueda ver la pantalla es un poco difícil.
No pude grabar esto funcionando, con ScreenToGif, ya que eso obligaba a volver a pintar para que los píxeles se eliminaran. Sin embargo, aquí hay una captura de pantalla que se ejecuta después de unos 10-15 segundos, ¡y creo que puede haber detenido mi PC! El espacio en la esquina superior derecha es donde la pantalla forzó un repintado justo cuando tomé la captura de pantalla.
Versión completa / formateada:
Una versión para
308227226 bytes que solo se basa en la región 0-40:Ejemplo de salida para este:
fuente
Graphics.FromHwnd((IntPtr)0)
también funcionaría y sería mucho más corto que P / InvocaciónGetDC
. Por supuesto, su código sigue siendo como el de Tas y pierde recursos como locos, por lo que detiene su máquina después de un corto tiempo de ejecución.GetDC
no regresa,IntPtr.Zero
así que enviar eso aFromHdc
no funcionará.FromHdc
, estoy sugiriendo que llamesFromHwnd
. Observe que cuando llamaGetDC
para obtener el DC para un identificador de ventana, pasa un puntero NULO (0) como identificador de ventana.Consola C #,
233220189188 bytesUtiliza "todos" (Windows) 16 colores de consola.
Gracias por la "característica" para poder alias de clases en C # a través de la
using
directiva.Editar # 1
Eliminado algunos espacios.
Se eliminaron los ceros de Random.Next ()
Fui a
namespace system{...}
Editar # 2
El tamaño mínimo de la cuadrícula es 40x40.
Un byte declarando Random in para el encabezado del bucle
Eliminado
public
del método principalEditar # 3
Resulta que no
using C=Console;
es lo mejor que hay.using static Console
es muy parecido a la forma VB.Net de "Importar" clasesMe rindo: TheLethalCoder hizo que esto sucediera
Código original para adaptar el tamaño de la ventana a 207 bytes:
Imagen original:
fuente
namespace System
debería guardar bytes,r.Next
puede eliminar el cero, creo, Eliminar espacios en blanco irrelevantes,namespace System{}
es más corto queusing System;
. ¿Le importaria explicar?Main
. ¡Los recuerdos infundados son los mejores!Procesamiento, 90 bytes
expandido y comentado:
Idealmente, podría usar un índice de píxeles en lugar de una ubicación x, y, pero el
pixels[]
acceso a Processing requiereloadPixels()
pre yupdatePixels()
post, de ahí el uso deset()
.point()
funcionaría también, pero tiene más caracteres y requisitosstroke()
. El área aleatoria es en realidad 99x99 para guardar algunos bytes (en lugar de 100x100), pero eso debería cubrir 40x40 con cada píxel en dicha área para ser reemplazado.Se usa el ruido Perlin () en lugar de random () para mantenerlo más pseudoaleatorio y un byte más corto. El valor se calcula una vez, pero se usa dos veces: una vez para la posición aleatoria, luego otra vez para el color.
El color es en realidad
ARGB
(00000000 a FFFFFFFF) (no RGB) (puntos de bonificación?: D).fuente
set()
es un truco muy bueno y puede ser muy útil para Consejos para jugar al golf en ProcesamientoPython, 133 bytes
No estoy muy seguro de si esto se ajusta a las especificaciones, porque está en un lienzo en un área de 40x40.
Pruébelo en línea : versión sin
eval
, que no funciona en Trinketfuente
colormode
es .1.0
255
colormode
y no tendría nada de eso: /dot(1,R(0,255),R(0,255),R(0,255))
funciona?dot
está destinado a aceptar(width,*color)
. No es Python: pJavaScript utilizando Canvas
340 316324 bytesversión completa
fuente
Procesando, 112 bytes
No puedo garantizar que cada píxel se reemplace cada 3 minutos, pero al mirarlo parece estar haciéndolo. Al menos las probabilidades de que pierda un píxel, de un total de 1600, actualizando uno aleatorio 30 veces por segundo, con un total de 5400 actualizaciones por 3 minutos, es poco probable que se pierda uno.
Sin golf:
El programa es realmente sencillo. Abra una ventana a 40x40 píxeles y cada cuadro (predeterminado 30 por segundo) obtiene un color aleatorio y dibuja un punto en una coordenada aleatoria entre 0 y el parámetro. 40 para coordenadas de píxeles, 255 para colores.
fuente
size(40,40);
y cambiarpoint
apoint(random(99),random(99));
? (o 100 en su lugar si 99 no funciona)size
función DEBE ser la primera línea de código en la función de configuración (las razones son complicadas), por lo que no puedo evitar eso. Puedo cambiar todas las apariciones de 40 a 99, simplemente no lo hice ya que no me ahorró espacio. Principalmente elegí el tamaño mínimo para aumentar las probabilidades de que cada píxel se actualice en un período de 3 minutossetup()
función en la última versión de Processing en mi máquina funciona bien sin errores.HTML + SVG + PHP, 245 bytes
Expandido
Ejemplo de salida sin metaetiqueta y en una versión mayor
fuente
C ++ en Windows, 125 bytes
Nuevas líneas necesarias e incluidas en el recuento de bytes.
Bucles para siempre, elige aleatoriamente una posición entre 0 y 255 (inclusive) para valores de fila y columna, asigna valores aleatorios R, G, B entre 0-255 (inclusive)
fuente
#include
s. (Y sí, hay compiladores que no son de Visual Studio C para Windows).Python 3.6 + Tkinter, 281 bytes
fuente
tkinter
es una biblioteca estándar, no necesita incluirla en el encabezadoc.create_image((20,20),i) File "C:\Python36\lib\tkinter\__init__.py", line 2483, in create_image return self._create('image', args, kw) File "C:\Python36\lib\tkinter\__init__.py", line 2474, in _create *(args + self._options(cnf, kw)))) _tkinter.TclError: unknown option "pyimage1"
JavaScript (ES7) + HTML usando SVG, 129 + 10 = 139 bytes
Versión SVG, fuertemente inspirada en el
<canvas>
enfoque de @ Octopus .JS
HTML
Dado que al Fragmento de pila le gusta romper el script al analizar la
<rect>
etiqueta, aquí hay un CodePen .fuente
6502 Asamblea, 92 bytes
Salida:
Explicación:
fuente
LOGOTIPO, 71 bytes
El único lenguaje que conozco, no es esotérico / especialmente diseñado para codegolfing, y tiene
forever
función. ¿Alguna idea pormap
parte?fuente
shortC ,
6656 bytes-10 bytes gracias al Dr. Rand. :PAGS
Sin enlace TIO porque obviamente no puede imprimir en el tipo de terminal que esto requiere en línea.
fuente
Perl (en * nix), 69 bytes
Los
\x1b
s son caracteres de escape literales.Se basa en el
stty
comando y funciona bien en OS X.Similar a otros enfoques, pero me gustó la combinación de todos los parámetros en una sola llamada,
printf
así que pensé en compartir. Mata mi terminal.El doble de píxeles, 83 bytes
Este enfoque utiliza un bloque unicode
▄
y un color aleatorio de primer plano y fondo que proporciona un píxel más cuadrado. También mata mi terminal, pero se ve más genial.fuente
\e
. Y en StackExchange esto puede ser representado por␛
.-e
! También necesito aumentar el número de bytes del que tiene unicode. ¡Uy! ¡Gracias por el recordatorio!Bash, 104 bytes
Los
\e
s son caracteres de escape literales.Estas son más o menos traducciones de mi presentación de Perl, ¡pero usando la sintaxis de bash fork bomb style! Me temo que no es tan inteligente como la otra entrada de bash que escribe directamente en la pantalla.
Más píxeles, 130 bytes
Igual que mi respuesta de Perl, usa un carácter unicode para el primer plano y también colorea el fondo de cada píxel.
fuente
"\e[48;5;%im"
. ¿Por qué son necesarios los 48 y 5?\e[48;2;RRR;GGG;BBBm
pero muy pocos emuladores de terminal lo admiten ... :(38;5
denota el primer plano y48;5
deona el fondo. misc.flogisoft.com/bash/tip_colors_and_formattinglenguaje de máquina x86 (modo real) para PC IBM,
2019 bytesEsto requiere un procesador con las
rdrand
instrucciones y un adaptador VGA (real o emulado). Lo anterior se puede copiar en un bloque de arranque o archivo MS-DOS * .COM.Para probar esto, compile lo siguiente y guarde la salida en un archivo como
floppy.img
e inicie la imagen en una máquina virtual.fuente
Super Chip (48) ?, 12 bytes
No estoy seguro del nombre exacto, pero tuve que usar esto en lugar del Chip-8 normal debido a la limitación de 40x40 píxeles.
fuente
QBIC , 34 bytes
Desafortunadamente, QBIC no establece un
SCREEN
modo por defecto, por lo que come algunos bytes.PSET
es un comando ilegal en el contexto gráfico predeterminado de QBIC.Explicación
Salida de muestra
@Anonymous encontró un error en la
rnd()
función de QBIC . Fijación que da la salida a continuación. ¡Gracias!fuente
FUNCTION getRandomNumber! (Bottom!, Top!) ↵ RANDOMIZE TIMER 'this sets the random number generator ↵ IF Bottom > Top THEN ... END IF ↵ getRandomNumber = INT((Top - Bottom + 1) * RND + Bottom) ↵ END FUNCTION
tus números aleatorios son solo hash de la hora actual.Conjunto 6502, 582 bytes
Menos mal, esto fue divertido. Hace más o menos lo mismo que mi solución básica de Applesoft.
fuente
PowerShell,
128126124 bytes-2 bytes gracias @Veskah
Salida:
Salida de código VS:
fuente