Esse desafio é uma homenagem às luzes de Natal brega da casa dos meus sogros.
O desafio é criar uma saída gráfica mostrando a decoração em "tempo real".
O vídeo (gif ou outro formato) terá "luzes" verticais e horizontais n-por-m . 5 <= m, n <= 40 . O tamanho e a resolução de quadro pode variar consoante n e m , mas deve ser, pelo menos, 50x50 pixels para n, m = 5 (gráficos vectoriais é OK). Uma imagem com n=6
e m=5
será mais ou menos assim:
A decoração:
Cores:
Todas as luzes terá um dos 6 RGB-cores seguintes {255,0,0}
, {0,255,0}
, {0,0,255}
, {255,255,0}
, {0,255,255}
e {255,0,255}
.
Animação:
n
em
será considerado como entrada em qualquer formato razoável e na ordem que você desejar- A imagem mudará a cada
dt = 25 ms
. Os desvios são válidos se ocorrerem devido a "fatores externos", como limitação no intérprete, computador lento etc.- Se for impossível definir a etapa do tempo manualmente, a etapa padrão será aceita.
- Todas as luzes estarão vermelhas (
{255,0,0}
) emt=0
. - Sempre há uma chance de 5% de que a primeira luz (canto superior esquerdo) mude de cor. Todas as cores (exceto a atual) devem ser igualmente prováveis.
Cada luz (exceto a primeira) terá a cor da luz à esquerda. Se a luz estiver na extrema esquerda, ela exibirá a cor da luz na extrema direita na linha acima. As luzes são numeradas como mostrado abaixo. O número da luz
k
obterá a cor do número da luzk-1
.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Em teoria, a saída deve ser executada para sempre (a menos que seu idioma / intérprete tenha alguma limitação que impeça isso).
- Forneça uma amostra de pelo menos 5 segundos, de preferência mais na resposta (isso é um incentivo, não um requisito). (Um link para o TIO ou similar também é OK: D)
- Quadros, eixos, linhas de grade etc são aceitos.
6 por 5
15 por 30
r,g,y,b,
etc são mais curtos em vários idiomas.drawnow
quando implementei isso no MATLAB, pois o resultado foi muito lento. Eu acho que a resposta deve ser: Se for uma opção de design que o intérprete tenha uma resolução de tempo mínimo fixa de> = 25 ms, tudo bem. Se for devido a uma implementação ruim / simples, um intérprete on-line sobrecarregado / lento etc., não está correto.Respostas:
JavaScript / CSS / HTML, 436 bytes
fonte
Mathematica,
186161158 bytesExplicação
Crie o quadro inicial em 1D, preenchido com vermelho. Armazene isso em
b
.Pausa por 25ms
Se um número real aleatório (pseudo-) for menor que 0,06, substitua o primeiro elemento
b
por um comprimento3
de amostra aleatório da lista{1,1,0,0}
. (ou seja, qualquer um{1, 1, 0}, {1, 0, 1}, {1, 0, 0}, {0, 1, 1}, {0, 1, 0}, {0, 0, 1}
)Cíclico gire para a direita.
Altere o valor da primeira célula para o valor da segunda célula (ou seja, desfaça o deslocamento da primeira célula)
Partição
b
em (altura).Transforme isso em uma imagem dinâmica (atualizando constantemente), cuja largura é 50 (largura)
Versão de autômato celular (186 bytes)
Saída de amostra (entradas: 16, 10)
fonte
MATLAB,
255210 bytesEste é o meu primeiro golfe, então provavelmente há melhorias a serem feitas.
Obrigado ao Luis por me ajudar a salvar 45 bytes :)
Explicação:
Infelizmente, isso não salva a animação, apenas a executa. Para salvá-lo, preciso de um programa de captura de tela ou reescrever tudo usando
imwrite
. Em vez disso, fornecerei duas fotos mostrando horários diferentes, porn=15,m=30
.fonte
dec2bin([4 2 1 6 3 5])-48
vez de[1 0 0;0 1 0;0 0 1;1 1 0; 0 1 1;1 0 1]
..95
em vez de0.95
. Você também pode substituir.95
por.94
e livrar-sek=k(k~=r);
(porque 0,94 + 0,06 / 6 = 0,95; ver a minha resposta para uma explicação mais detalhada)c=dec2bin(1:6)-48
como a ordem não importa #MATL ,
5247 bytesEntrada é uma matriz
[ncols nrows]
. Saída é uma figura com gráficos vetoriais.Exemplo de execução para 15 colunas × 10 linhas:
Como funciona
O tempo de pausa foi definido como 15 ms (para a mesma contagem de bytes de 25 ms) para tentar compensar o tempo de processamento.
Para manter a cor com probabilidade 19/20 (altere com 1/20), procedemos da seguinte maneira:
Assim, a probabilidade de manter a cor é 47/50 + 3 / (50 * 6) = 19/20.
fonte
MATLAB,
153147 bytesNota : O GIF mostrado é da versão mais antiga, o que é bom, pois não exibe eixos (consulte o histórico de edições), mas foi extremamente lento devido à implementação de
imshow
. Para a versão atual, a resposta MATLAB de Chelsea G. ou MATL de Luis Mendo mostra o mesmo resultado que minha versão atual.O tamanho é tomado como um
2x1
vetor, então chame como por exemplo:Esta resposta explora as sutilezas da linguagem MATLAB. Por exemplo,
x
é inicializado como umam x n
matriz zero, mas a chamada indexação linear permite deslocamento circular com índices unidimensionais. A digitação fraca permite a multiplicação com elementos lógicos, para que asif
instruções sejam evitadas (um truque que eu costumava usar nos dias de programação em uma calculadora TI-84). Embora um mapa de cores seja lido em linhas, o MATLAB o trata como uma matriz normal, de modo queeye(3)
pode ser usado para criar vermelho, verde e azul e1-eye(3)
as outras três cores. Um simplesreshape
traz o vetor linear de volta à forma de matriz, que é mapeada para as cores desejadas usandoind2rgb
. Finalmente,imagesc
, mostra a imagem, mostrada no tamanho padrão da figura (que é grande o suficiente para os requisitos). Como ele teria sorte,imagesc
não se importa de valores que são fora do intervalo especificado, por issoeye
pode ser usado para inicializar a matriz uma vez que ambos1
e0
são considerados vermelho.fonte
Python 3.6 (316 bytes)
Usando códigos de cores ANSI e os novos literais de string formatados do Python 3.6 ( PEP 489 ) (a
f"{X}"
mágica).Caso contrário, é apenas bastante básico, mas python ofuscado. Largura e Altura são passados como argumentos na linha de comando.
fonte
w,h=map(int,sys.argv[1:])
, descompactar funciona com qualquer iterável (do tamanho certo), a chamada para a lista é supérflua."\x1b["
=>"\33["
(usando octal em vez de hexadecimal), a abreviação X e as seqüências de caracteres de formato realmente a tornam mais longa (e se livrar def""
você obtém compatibilidade com qualquer python3). (isso reduzirá para 301 bytes).{x}
uma vez ... mas você ainda ganha ao se livrarX
.