Este desafío es en honor a las horteras luces navideñas en la casa de mis suegros.
El desafío es crear una salida gráfica que muestre la decoración en "tiempo real".
El video (gif u otro formato) tendrá "luces" verticales y horizontales n-por-m . 5 <= m, n <= 40 . El tamaño de imagen y resolución pueden variar dependiendo de n y m , pero deben ser al menos de 50x50 píxeles para n, m = 5 (gráficos vectoriales es OK). Una imagen con n=6y m=5se verá más o menos así:
La decoración:
Colores:
Todas las luces tendrán una de las siguientes 6-colores RGB {255,0,0}, {0,255,0}, {0,0,255}, {255,255,0}, {0,255,255}y {255,0,255}.
Animación:
nymse tomará como entrada en cualquier formato razonable y en el orden que desee- La imagen cambiará cada
dt = 25 ms. Las desviaciones están bien si se debe a "factores externos" como la limitación en el intérprete, la computadora lenta, etc.- Si es imposible establecer el paso de tiempo manualmente, entonces se acepta el paso de tiempo predeterminado.
- Todas las luces serán rojas (
{255,0,0}) ent=0. - Siempre hay un 5% de posibilidades de que la primera luz (arriba a la izquierda) cambie de color. Todos los colores (excepto el color que tiene actualmente) deberían ser igualmente probables.
Cada luz (excepto la primera) obtendrá el color de la luz a su izquierda. Si la luz está en el extremo izquierdo, obtendrá el color de la luz en el extremo derecho en la fila de arriba. Las luces están numeradas como se muestra a continuación. El número de luz
kobtendrá el color del número de luzk-1.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18En teoría, el resultado debería ejecutarse para siempre (a menos que su idioma / intérprete tenga alguna limitación que lo impida).
- Proporcione una muestra de al menos 5 segundos, preferiblemente más en la respuesta (esto es un estímulo, no un requisito). (Un enlace a TIO o similar, por supuesto, también está bien: D)
- Se aceptan marcos, ejes, líneas de cuadrícula, etc.
6 por 5
15 por 30




r,g,y,b,etc son más cortos en varios idiomas.drawnowcuando implementé esto en MATLAB, ya que el resultado fue demasiado lento. Creo que la respuesta debe ser: si es una elección de diseño que el intérprete tenga una resolución de tiempo mínima fija de> = 25 ms, entonces está bien. Si se debe a una implementación pobre / simple, un intérprete en línea que está sobrecargado / lento, etc., entonces no está bien.Respuestas:
JavaScript / CSS / HTML, 436 bytes
fuente
Mathematica,
186161158 bytesExplicación
Crea el tablero inicial en 1D, lleno de rojo. Almacene eso en
b.Pausa de 25 ms
Si un número real (pseudo-) aleatorio es menor que 0.06, reemplace el primer elemento de
bcon una longitud3de muestra aleatoria de la lista{1,1,0,0}. (es decir, cualquiera de{1, 1, 0}, {1, 0, 1}, {1, 0, 0}, {0, 1, 1}, {0, 1, 0}, {0, 0, 1})Cíclico rotar a la derecha.
Cambie el valor de la primera celda al valor de la segunda celda (es decir, deshaga el desplazamiento de la primera celda)
Partición
ben (altura).Conviértalo en una imagen dinámica (en constante actualización), cuyo ancho es 50 (ancho)
Versión de autómata celular (186 bytes)
Salida de muestra (entradas: 16, 10)
fuente
MATLAB,
255210 bytesEste es mi primer golf, por lo que probablemente haya mejoras por hacer.
Gracias a Luis por ayudarme a ahorrar 45 bytes :)
Explicación:
Desafortunadamente, esto no guarda la animación, solo la ejecuta. Para guardarlo, necesito un programa de captura de pantalla o lo reescribo todo usando
imwrite. En cambio, proporcionaré dos imágenes que muestran tiempos diferentes, paran=15,m=30.fuente
dec2bin([4 2 1 6 3 5])-48lugar de[1 0 0;0 1 0;0 0 1;1 1 0; 0 1 1;1 0 1]..95en lugar de0.95. También puede reemplazar.95por.94y deshacerse dek=k(k~=r);(0,94 + 0,06 porque / 6 = 0,95; ver mi respuesta para una explicación más detallada)c=dec2bin(1:6)-48como el orden no importaMATL ,
5247 bytesLa entrada es una matriz
[ncols nrows]. La salida es una figura con gráficos vectoriales.Ejemplo ejecutado para 15 cols × 10 filas:
Cómo funciona
El tiempo de pausa se ha establecido en 15 ms (para el mismo número de bytes que 25 ms) para intentar compensar el tiempo de procesamiento.
Para mantener el color con una probabilidad de 19/20 (cámbielo con 1/20), procedemos de la siguiente manera:
Por lo tanto, la probabilidad de mantener el color es 47/50 + 3 / (50 * 6) = 19/20.
fuente
MATLAB,
153147 bytesNota : El GIF que se muestra es de la versión anterior, lo cual es bueno ya que no muestra ejes (ver el historial de edición), pero fue extremadamente lento debido a la implementación de
imshow. Para la versión actual, la respuesta MATLAB de Chelsea G. o la respuesta MATLAB de Luis Mendo muestran el mismo resultado que mi versión actual.El tamaño se toma como un
2x1vector, así que llame como, por ejemplo:Esta respuesta explota las sutilezas del lenguaje MATLAB. Por ejemplo,
xse inicializa como unam x nmatriz cero, pero la denominada indexación lineal permite el desplazamiento circular con índices unidimensionales. La escritura débil permite la multiplicación con lógica, por lo queifse evitan las declaraciones (un truco que utilicé mucho en los días de programación en una calculadora TI-84). Aunque un mapa de colores se lee en hileras, MATLAB lo trata como una matriz normal, de modo queeye(3)se puede usar para crear rojo, verde y azul, y1-eye(3)los otros tres colores. Un simplereshapedevuelve el vector lineal a la forma de matriz, que se asigna a los colores deseados utilizandoind2rgb. Finalmente,imagesc, muestra la imagen, que se muestra con el tamaño de figura predeterminado (que es lo suficientemente grande para los requisitos). La suerte quiso queimagescno le importa valores que se están fuera del rango especificado, por lo queeyese puede utilizar para inicializar la matriz, ya que ambos1y0son considerados rojo.fuente
Python 3.6 (316 Bytes)
Usando códigos de color ANSI y los nuevos literales de cadena formateados de Python 3.6 ( PEP 489 ) (la
f"{X}"magia).De lo contrario, es bastante básico, pero Python ofuscado. Ancho y Altura se pasan como argumentos en la línea de comando.
fuente
w,h=map(int,sys.argv[1:]), desempaquetar funciona con cualquier iterable (del tamaño correcto), la llamada a la lista es superflua."\x1b["=>"\33["(usando escapes octales en lugar de hexadecimales), luego la abreviatura X y las cadenas de formato en realidad lo hacen más largo (y al deshacerse def""usted obtendrá compatibilidad con cualquier python3). (Esto lo reducirá a 301 bytes).{x}una vez ... pero aún así ganas al deshacerte de élX.