Eu sempre gostei de telas cheias de pixels coloridos aleatoriamente. Eles são interessantes de se ver e os programas que os desenham são divertidos de assistir.
O desafio
Preencha sua tela, ou uma janela gráfica, com pixels coloridos.
As regras
- Seu programa deve ter uma chance uniforme de escolher todas as cores (ou seja, no intervalo
#000000
de#FFFFFF
), ou todas as cores que podem ser exibidas no seu sistema. - Seu programa deve continuar exibindo pixels aleatórios até que seja interrompido manualmente (ele não pode terminar sozinho).
- Os pixels podem ter qualquer tamanho, desde que sua saída tenha pelo menos 40x40 "pixels".
- Seu programa deve ser executado a uma velocidade que possa substituir todos os pixels na tela / janela pelo menos uma vez após a execução por três minutos.
- Seu programa deve escolher cores e pontos verdadeiramente aleatórios para substituir, ou seja, aleatórios com todos os pontos / cores igualmente prováveis. Não pode parecer aleatório. Ele deve usar um pRNG ou melhor e a saída não pode ser a mesma sempre.
- Seu programa deve ter a mesma chance de escolher todas as cores a cada iteração .
- Seu programa deve substituir apenas um pixel de uma vez.
- Seu programa não pode usar a Internet nem seu sistema de arquivos (
/dev/random
e/dev/urandom
exceto).
Exemplo
Sua saída pode ficar assim se for interrompida aleatoriamente:
O vencedor
A resposta mais curta em cada idioma vence. Diverta-se!
It must use a pRNG or better
Respostas:
Blocos de comando do Minecraft 1.12 Redstone,
4.3552.872 bytes(Tamanho determinado pelo tamanho do arquivo do bloco de estrutura salvo.)
Aqui está uma visão geral completa do YouTube , mas tentarei descrever o código abaixo.
Rotina de instalação:
Isso configura a grade 40x40 dos suportes de armadura do Minecraft. Suportes de armadura são necessários porque o Minecraft não tem como substituir variáveis nas coordenadas do mundo . Portanto, a solução alternativa é se referir ao local dessas entidades de suporte de armadura.
Esse suporte de armadura nomeado é basicamente o nosso "cursor" para colocar todos os suportes de armadura que precisaremos. O bloco redstone na última etapa "aciona" os blocos próximos (incluindo nossos blocos de comando), então inicia o próximo loop:
Neste ponto, nossa grade está completa:
Seletor de cores aleatórias
Os repetidores roxos no centro desta imagem escolhem uma cor aleatória através do seguinte comando:
Como "@r []" é o molho mágico, ele seleciona uma entidade aleatória no mundo que corresponde às condições especificadas . Nesse caso, ele encontra uma armadura dentro de um raio de 9 blocos , e montamos 16 armaduras, uma para cada cor de lã. Sob a cor selecionada, ele coloca um bloco de redstone (que alimenta os dois blocos de comando de cada lado).
Random Pixel Selector
A colocação do bloco redstone sob a cor de lã selecionada aciona mais dois blocos de comando:
Essa primeira linha usa nosso mesmo comando magic @r para escolher qualquer suporte de armadura em todo o mapa (sem restrição de raio, de modo que inclua a grade 40x40) e coloca uma lã da cor selecionada acima de sua cabeça. O X determina a cor e varia de 0 a 15. O segundo comando remove o bloco de redstone para que esteja pronto para voltar novamente.
Eu tenho 5 blocos repetidores roxos e o redstone funciona em "ticks" 20 vezes por segundo, então estou colocando 100 pixels por segundo (menos algumas sobreposições de cores). Eu cronometrei, e normalmente costumo cobrir toda a grade em cerca de 3 minutos.
Foi divertido, vou tentar procurar outros desafios que também possam funcionar no Minecraft. Muito obrigado a lorgon111 por sua série de tutoriais sobre blocos de comando do YouTube .
EDIT: Realizou algumas reduções sérias no tamanho da estrutura salva, agora com 2.872 bytes salvos :
Testado ao colocar a estrutura salva em um novo mundo, tudo ainda funciona como projetado.
EDIT 2 : Link Dropbox somente leitura para o arquivo de estrutura NBT
Walk through está no meu vídeo do YouTube , mas aqui estão as etapas:
\structures
Quando o mundo existir, copie o arquivo NBT para uma nova pasta criada com o salvamento mundial atual./give @p structure_block
e/tp @p -12, 56, -22
pule para o lugar certo para começar.fonte
shortest answer in each language wins
e esta é a resposta mais curta em Minecraft: P tem um extra de 15sh + ffmpeg, 52 bytes
O ffmpeg conta como um esolang? : D
Infelizmente, o pix_fmt é necessário, pois o ffmpeg assume o padrão yuv420p. Caso contrário, o requisito "deve ter a mesma probabilidade de todas as cores possíveis de pixel". Convenientemente,
cif
é um atalho para um tamanho de vídeo bastante grande que utiliza menos espaço que "40x40".Sem surpresa, otimizar esse gif com gifsicle não fez absolutamente nada. É 4MiB.
fonte
C no POSIX,
98969592 bytes-3 graças a Tas
Isso escolhe entre 16 cores (cinza escuro, vermelho, verde, azul, laranja, ciano, roxo, cinza claro, preto, rosa, azul claro, amarelo, ciano claro, magenta, branco) e as imprime diretamente no terminal.
Observe que, se sua GPU estiver muito lenta, isso pode parecer que está atualizando a tela inteira de uma só vez. Na verdade, está indo pixel por pixel, mas C é rápido.
Solução alternativa que torna as cores mais distintas:
Prova de que ele vai pixel por pixel (captura de tela do programa alternativo):
Uau, isso parece quase tridimensional ...
fonte
;
para compilar corretamente, mas parece funcionar bem diferente disso! Bwhile
parafor
.#define r rand()
e, em seguida, usandor%40, r%40, r%2, r%8
JS + HTML
162 + 32 (194)124 + 13 (137) bytesAgradeço a Luke e outros comentadores por me economizarem muitos bytes.
fonte
<canvas id=c>
deve ser suficiente, pois acho que o tamanho padrão para ocanvas
elemento é300 x 150 px
e, portanto, excede o seu "tamanho da viewport" de99 x 99 px
. Enfim, boa solução.2d
. (Não tenho certeza como formatar isso, mas se "2d" é um literal modelo, ele não precisa dos parênteses.) (Excluindo minhas sugestões anteriores.)with
declaração para se livrar de todas as instâncias 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
Experimente no MATL Online . Adicionei uma pausa de meio segundo (
.5Y.
) a esta versão.Explicação
fonte
TI-BASIC (apenas 84 + C (S) E)),
3735 bytesDevido a limitações de hardware, isso eventualmente trava, pois toda vez que um programa é aninhado dentro de um programa na TI-BASIC , 15 KB de RAM são alocados para "manter um marcador" no programa pai. Isso funcionaria bem em uma calculadora "teórica" com RAM infinita, mas se quisermos que ela seja executada indefinidamente em uma calculadora real, podemos envolvê-la em um
While 1
loop por 2 bytes extras :As calculadoras da família TI-83 com telas coloridas (TI 84 + CE e CSE) suportam 15 cores. Eles têm códigos de cores
10
completamente24
. Isso percorre todos os pixels em um5!
quadrado de 120 por 120 ( ) e atribui a cada uma uma cor aleatória.Resultado:
fonte
5!
se quisesse 120 pixels.For(
é de 1 byte,Pxl-On(
é de 1 byte,randInt(
é de 2 bytes, etc.MATLAB, 56 bytes
A saída se parece com a imagem abaixo. Um "pixel" muda de cada vez, e apenas uma das cores RGB muda.
Por quê? As cores no MATLAB são representadas como uma matriz 3D, uma camada para R, G e B. O código acima altera apenas uma das camadas por iteração. Todos os pixels e todas as camadas podem ser alterados; portanto, se você esperar um pouco, todas as cores serão igualmente possíveis em todas as posições.
Adicione
pause(t)
dentro do loop para pausart
segundos entre cada imagem.Você deve pará-lo com Ctrl+ C.
fonte
where
Your program must have an equal chance of picking all colors/points each iteration
. Seu programa cumpre isso?Bash + coreutils,
59.56 bytes\e[48;5;COLORm
é a segurança de escape para a cor de fundo.Cada "pixel" tem a chance de estar sempre no intervalo [0..16777215].
fonte
jot
:for((;;)){ printf "\e[48;5;`jot -r 1 0 16777215`m ";}
Javascript + HTML 118 + 13 (131 bytes)
#7
não é uma cor válida, ou#777
e#777777
são da mesma cor (2x as probabilidades)fonte
Excel VBA,
13110285 BytesFunção de janela imediata VBE anônima que usa uma função auxiliar (veja abaixo) para enviar uma matriz de células coloridas aleatoriamente para o intervalo
A1:AN40
do objeto da planilha ativa.Nota: Esta solução está restrita às instalações de 32 bits do MS Excel (e, portanto, do Office como um todo), pois
8^8
não será compilado nas versões de 64 bits do VBASaída de amostra
Versão anterior
Função auxiliar
Emite um int aleatório no intervalo [0,255]
fonte
C #,
369288287 bytesEconomizou 88 bytes graças a @CodyGray.
Um programa completo que pega a tela e seu tamanho e começa a desenhar pixels nela aleatoriamente. Observe que isso pode atrapalhar sua placa gráfica quando executada. Além disso, se a tela ou qualquer controle decidir repintar a qualquer momento, os pixels serão perdidos e terão que ser redesenhados.
Nota: Ao executar, mantenha o foco na janela para matá-la. Você deve pressionar Alt + F4 ou pressionar o botão Fechar e fazê-lo quando não conseguir ver a tela está um pouco difícil.
Não consegui gravar esse trabalho, com ScreenToGif, pois isso continuava forçando uma repintura para que os pixels fossem removidos. No entanto, aqui está uma captura de tela dele sendo executada após cerca de 10 a 15 segundos, e eu acho que posso parar meu PC! A lacuna no canto superior direito é onde a tela forçou uma nova pintura, assim como tirei a captura de tela.
Versão completa / formatada:
Uma versão para
308227226 bytes que apenas desenha na região 0-40:Exemplo de saída para este:
fonte
Graphics.FromHwnd((IntPtr)0)
também funcionaria e seria muito menor do que P / InvocaçãoGetDC
. Obviamente, seu código ainda é como o de Tas e vaza recursos como um louco, e é por isso que paralisa sua máquina após apenas um curto período de execução.GetDC
não retorna,IntPtr.Zero
então enviar isso paraFromHdc
não funcionará.FromHdc
, estou sugerindo que você ligueFromHwnd
. Observe que quando você chamaGetDC
para obter o controlador de domínio para um identificador de janela, você passa um ponteiro NULL (0) como identificador de janela.Console C #,
233220189188 bytesUsa "todas" (janelas) 16 cores do console.
Obrigado pelo "recurso" para poder aliasar classes em C # através da
using
diretiva.Editar # 1
Removidos alguns espaços.
Removidos zeros de Random.Next ()
Frequentou
namespace system{...}
Editar # 2
O tamanho mínimo da grade é 40x40
Um byte declarando Random no cabeçalho do loop
Removido
public
do método MainEditar # 3
Acontece que não
using C=Console;
é o melhor que existe. é muito parecido com o modo VB.Net de "Importar" classesusing static Console
Eu desisto: TheLethalCoder fez isso acontecer
Código original para adaptar o tamanho da janela em 207 bytes:
Imagem original:
fonte
namespace System
deve salvar bytes,r.Next
pode remover a zero, creio eu, Remover espaço em branco irrelevante,namespace System{}
é mais curto queusing System;
. Gostaria de explicar?Main
. Memórias infundadas são as melhores!Processando, 90 bytes
expandido e comentado:
Idealmente, eu poderia usar um índice de pixels em vez da localização x, y, mas o
pixels[]
acesso do Processing exigeloadPixels()
pré eupdatePixels()
pós, daí o uso deset()
.point()
funcionaria também, mas tem mais caracteres e requerstroke()
. A área aleatória é na verdade 99x99 para salvar alguns bytes (em vez de 100x100), mas isso deve cobrir 40x40 com cada pixel em uma área a ser substituída.O ruído Perlin () é usado em vez de random () para mantê-lo mais pseudo-aleatório e com um byte menor. O valor é calculado uma vez, mas usado duas vezes: uma vez para a posição aleatória e depois novamente para a cor.
A cor é realmente
ARGB
(00000000 a FFFFFFFF) (não RGB) (pontos de bônus?: D).fonte
set()
é um truque muito interessante e pode ser muito útil para Dicas de golfe no processamentoPython, 133 bytes
Não tenho certeza se isso se encaixa nas especificações, porque está em uma tela em uma área de 40x40.
Experimente on-line - versão sem
eval
, que não funciona no Trinketfonte
colormode
é .1.0
255
colormode
e ele não teria nada disso: /dot(1,R(0,255),R(0,255),R(0,255))
não funciona?dot
é para aceitar(width,*color)
. Não é Python: pJavaScript usando Canvas
340 316324 bytesversão completa
fonte
Processando, 112 bytes
Não posso garantir que cada pixel seja substituído a cada 3 minutos, mas olhando para ele parece estar fazendo isso. Pelo menos as chances de ele perder um pixel, de um total de 1600, atualizando um aleatório 30x por segundo, totalizando 5400 atualizações por 3 minutos, torna improvável que um deles seja perdido.
Ungolfed:
O programa é realmente simples. Abra uma janela em 40x40 pixels, e cada quadro (padrão 30 por segundo) terá uma cor aleatória e desenhe um ponto em uma coordenada aleatória entre 0 e o parâmetro. 40 para coordenadas de pixel, 255 para cores.
fonte
size(40,40);
e alterarpoint
parapoint(random(99),random(99));
? (ou 100 em vez se 99 não está funcionando)size
função DEVE ser a primeira linha de código na função de configuração (razões pelas quais são complicadas), então não consigo contornar isso. Posso alterar todas as ocorrências de 40 a 99, mas não o fiz, pois não me salvou espaço. Eu fui principalmente com o tamanho mínimo para aumentar as chances de que cada pixel será atualizada em um período de 3 minutossetup()
função da versão mais recente do Processing na minha máquina funciona bem, sem erros.HTML + SVG + PHP, 245 bytes
Expandido
Exemplo de saída sem meta tag e em uma versão maior
fonte
C ++ no Windows, 125 bytes
Novas linhas necessárias e incluídas na contagem de bytes.
Laços para sempre, escolhe aleatoriamente uma posição entre 0 e 255 (inclusive) para valores de linha e coluna, atribui valores aleatórios de R, G, B entre 0 e 255 (inclusive)
fonte
#include
s. (E sim, há não-visuais compiladores Studio C para Windows.)Python 3.6 + Tkinter, 281 bytes
fonte
tkinter
é uma biblioteca padrão, você não precisa incluí-la no cabeçalhoc.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
Versão SVG, fortemente inspirada na
<canvas>
abordagem da @ Octopus .JS
HTML
Como o snippet de pilha gosta de quebrar o script analisando a
<rect>
tag, aqui está um CodePen .fonte
6502 Assembly, 92 bytes
Resultado:
Explicação:
fonte
LOGO, 71 bytes
A única linguagem que eu conheço, não sendo esotérica / especialmente projetada para codegolfing, e tem
forever
função. Alguma idéia damap
parte?fonte
shortC ,
6656 bytes-10 bytes graças ao Dr. Rand. : P
Não há link TIO, porque você obviamente não pode imprimir no tipo de terminal que isso requer online.
fonte
Perl (em * nix), 69 bytes
Os
\x1b
s são caracteres de escape literais.Confia no
stty
comando e funciona bem no OS X.Semelhante a outras abordagens, mas gostei da combinação de todos os parâmetros em uma única chamada,
printf
então pensei em compartilhar. Mata meu terminal.O dobro de pixels, 83 bytes
Essa abordagem usa um bloco unicode
▄
e uma cor aleatória de primeiro plano e plano de fundo que fornece um pixel mais quadrado. Mata meu terminal também, mas parece mais frio.fonte
\e
. E no StackExchange, isso pode ser representado por␛
.-e
! Também preciso aumentar a contagem de bytes daquele com unicode. Opa! Obrigado pela lembrança!Bash, 104 bytes
Os
\e
s são caracteres de escape literais.Estas são praticamente traduções do meu envio Perl, mas usando a sintaxe do estilo bash fork bomb! Receio que não seja tão inteligente quanto a outra entrada do bash que escreve diretamente na tela.
Mais pixels, 130 bytes
Igual à minha resposta Perl, isso usa um caractere unicode para o primeiro plano e também colore o fundo de cada pixel.
fonte
"\e[48;5;%im"
. Por que os 48 e 5 são necessários?\e[48;2;RRR;GGG;BBBm
mas poucos emuladores de terminal o suportam ... :(38;5
indica primeiro plano e48;5
deona o plano de fundo. misc.flogisoft.com/bash/tip_colors_and_formattinglinguagem de máquina x86 (modo real) para IBM PC,
2019 bytesIsso requer um processador com o
rdrand
instruções e um adaptador VGA (real ou emulado). O acima pode ser copiado em um bloco de inicialização ou em um arquivo MS-DOS * .COM.Para tentar isso, compile o seguinte e salve a saída em um arquivo como
floppy.img
e inicialize a imagem em uma máquina virtual.fonte
Super Chip (48) ?, 12 bytes
Não tenho certeza do nome exato, mas tive que usá-lo em vez do Chip-8 normal por causa da limitação de 40x40 pixels.
fonte
QBIC , 34 bytes
Infelizmente, o QBIC não define um
SCREEN
modo por padrão, o que consome alguns bytes.PSET
é um comando ilegal no contexto gráfico padrão do QBIC.Explicação
Saída de amostra
O @Anonymous encontrou um erro na
rnd()
função do QBIC . Correção que fornece a saída abaixo. Obrigado!fonte
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
Seus números aleatórios são apenas hashes do tempo atual.6502 Assembly, 582 bytes
Uau, isso foi divertido. Faz mais ou menos a mesma coisa que minha solução Applesoft BASIC.
fonte
Conector de força,
128126124 bytes-2 bytes obrigado @Veskah
Resultado:
Saída do código VS:
fonte