O desafio é simples: desenhe um arco-íris no menor número de bytes possível
As especificações para o arco-íris são as seguintes:
- A figura deve ter exatamente 400 pixels de largura e 200 pixels de altura (opcional 401x201 se você quiser um único pixel central)
- O anel vermelho deve tocar todas as bordas da figura (raio externo = 200 pixels)
- Todos os anéis devem ter a mesma largura (10 pixels)
- O anel violeta deve ter um raio interno de 130 pixels
- O arco deve ser a metade superior de um círculo perfeito
- O fundo deve ser branco (transparente também é aceito)
- A figura não deve ter bordas (exceção é feita se a borda não puder ser suprimida)
- Não são permitidas funções internas de criação de arco-íris!
As seguintes cores devem ser usadas no arco-íris:
Este é o código golf, então o código mais curto em bytes vence!
Exemplo:
code-golf
graphical-output
Stewie Griffin
fonte
fonte
Respostas:
MATL ,
1079592878483 bytesIsso funciona na versão atual (14.0.0) do idioma / compilador.
EDIT (6 de julho de 2017) : Você pode experimentá-lo no MATL Online! .
Para verificar se as cores estão corretas, remova os últimos cinco caracteres (é necessário aguardar alguns segundos e role para baixo até o final da saída).
Explicação
O código possui três etapas principais:
Etapa 1 : Gere uma matriz 201x401 com números de
1
até8
. Pixels com valor1
são fundo (branco), pixels com valores2
, ...,8
representam cada banda do arco-íris.Coordenadas horizontais vão desde
-200
a200
esquerda para a direita, e coordenadas verticais vão desde0
a200
base ao topo. Portanto, a origem (0,0) é o centro inferior, o canto superior esquerdo é (-200.200), etc.As diferentes bandas do arco-íris são geradas calculando a distância de cada pixel até a origem e quantizando em etapas de 10 pixels.
Etapa 2 : Gere uma matriz 8x3 definindo o mapa de cores. Cada linha é uma das cores necessárias (branco e as sete cores do arco-íris). Cada valor da matriz 201x401 anterior será interpretado como um índice para uma linha desse mapa de cores.
Geramos a matriz do mapa de cores usando valores entre 0 e 1 para cada componente de cor e, em seguida, multiplicando por 255 e arredondando para baixo. Dessa forma, a maioria dos valores é inicialmente 0 e 1, que mais tarde se tornará 0 e 255. Os valores intermediários são codificados como valores entre 0 e 1 com 2 ou 3 casas decimais, escolhidos para que, quando multiplicados e arredondados, forneçam o valor exato desejado.
Etapa 3 : Exiba a imagem com esse mapa de cores.
fonte
Piet , 838 codéis, vários milhares de pixels
Alguém tinha que fazer isso:
Se você salvar esta imagem, poderá experimentá-la online !
O programa Piet atual é apenas o top ~ 125 pixels, que eu criei usando um programa Python que escrevi.
Editar isso depois realmente machucou minha visão, vou ficar tropeçando por dias!
Isso gera a imagem em um formato SVG, porque o SVG é realmente (na minha opinião) a maneira mais simples de fazer isso. Roubei descaradamente o código SVG da maçaneta da porta. Saídas:
bem, isso realmente:
Boa sorte em vencer esta resposta, usuários que não são da Esolang!
fonte
Pitão,
150149128 bytesSaídas em SVG:
Obrigado a @MamaFunRoll por 16 bytes e a @PatrickRoberts por mais 6!
fonte
</svg>
tag final .red #ff7f00 #ff0 #0f0 #00f #8f00ff #fff
para a lista de cores e tomar aspas simples fora todos os valores de parâmetros que não têm espaços neles (cx
,cy
,r
efill
), mas certifique-se de deixar um espaço entre o valor do preenchimento e do/
assim que a cor não ficar mal interpretado . Remova também o</svg>
como sugerido acima.red #ff7f00 #ff0 #0f0 #00f indigo #8f00ff #fff
. Além disso, se você substituir os espaços por vírgulas,viewBox
também poderá remover aspas simples para esse parâmetro.Minecraft 1.10 (quase), 2677 caracteres com um comando, 868 blytes
Bem, eu com certeza escolhi uma linguagem detalhada.
Crie um novo mundo Superflat, cole essa bagunça em um bloco de comando Impulse, defina sua distância de renderização bastante alta e execute-a. Quebre a armadura quando o computador parar de ficar.
O resultado tem 400 blocos de largura e 200 de altura, conforme solicitado.
Eu costumava gerador de um comando de MrGarretto para embalar tudo juntos, e depois modificado o resultado de que um pouco para salvar um casal mais bytes. Aqui está a entrada para isso:
No total, são mais de 15 1,9+ blocos de comando e 838 bytes, então 15 * 2 + 838 = 868 blytes .
Aqui está a parte (quase): falta um canto e uma borda. Logicamente não deveria - o bug do Minecraft? Seriam exatamente blocos de 400x200 se não fosse por isso. Não posso fazer muito.
fonte
Mathematica
152144126 bytesObrigado @CatsAreFluffy por cortar 8 bytes e @njpipeorgan por mais 18 :)
fonte
#
vs#[[1]]
,#2
vs#[[2]]
, e@@@
vs/@
.Thread
funciona em vez deTranspose
.Graphics@MapIndexed[{#,Disk[{0,0},4-#/5&@@#2,{Pi,0}]}&,RGBColor/@TextWords@"#f00 #ff7f00 #ff0 #0f0 #00f #4b0082 #8f00ff #fff"]
salva outros 18 bytes, mas a ideia é a mesma.vim,
165142139Sim, isso é desajeitado. Tem que haver melhorias que podem ser feitas.
Saídas como SVG, como minha resposta Pyth .
Obrigado a @MyHamDJ por cortar 3 bytes!
fonte
kv3G:norm A'/><cr>
<circle cx...
sequência na linha 2 pela primeira vez, em vez de digitar todas as cores e inseri-la depois.HTML + SVG + ES6, 169
fonte
height=200
e emcx=200 cy=200 r=${--r}0
vez deviewBox='0 0 40 20'
. Isso deve economizar 7 bytes..replace
método ...r-=1
no golfe código ...Rubi com Sapatos, 155 bytes
Saída de amostra:
fonte
JavaScript (ES6),
171158 bytesCrédito para @ edc65 pela idéia de converter
para
Pode parecer mais longo, mas a quantidade de bytes salvos na compactação da matriz em uma cadeia vale bem a conversão. (Ele salva 13 bytes neste caso)
Demo
fonte
HTML (162) + CSS (146)
HTML (224) + CSS (128)
fonte
SpecBAS -
318254 bytesSe estamos desenhando arco-íris, parece um bom lugar para usar o sucessor do ZX Spectrum BASIC.
A linha 2 configura a paleta para os valores RGB específicos necessários (e provavelmente não está ajudando na contagem de bytes), pois as cores padrão do Spectrum não coincidem.
O
DRAW
comando pode usar um parâmetro extra que faz girar váriosgrausradianos entre x1, y1 e x2, y2. Por fim, encontra uma lacuna nos semicírculos que acabamos de desenhar e a cor atual é preenchida.fonte
Tcl / Tk , 263 bytes
Infelizmente, esse tipo de pergunta sempre favorece algumas linguagens esotéricas ... Dito isso, o Tcl / Tk realmente faz operações gráficas: fácil, curto e legíveis .
Dito isso, sacrifiquei a legibilidade para reduzir as opções até o mínimo de caracteres possível. Eu não imagino triturar a lista de cores ajudará muito em comparação com o código para descompactá-lo ...
Para comparação, aqui está o código não criptografado (380 bytes):
o
after
comando foi infelizmente necessário, pois não rolagem (de origem de coordenadas do canvas) pode ser feito antes que a janela é mapeada para a tela.Além disso, o código crunched realmente desenha um completo arco-íris (usando um círculo em vez de um arco) e depende apenas do recorte da janela ...
Enfim, espero que gostem. : O)
fonte
lmap
vez deforeach
encurtar.pack [canvas .c -bg #FFF -bo 0 -highlightt 0] -e 1 -f both
create oval
; não destruído fazcreate arc
. Você pode explicar, por favor?LaTeX, 290 bytes
Experimente aqui .
Explicações
fonte
Java, 354 bytes
Apenas usa a
Graphics2D
classe para desenhar 7 arcos, com uma matriz para armazenar as cores. Tenho certeza que pode ser melhorado ainda mais.Código não destruído:
fonte
0x0000ff
pode ser justo0xff
ou mesmo255
igual ao0x00ff00
ser0xff00
.0xff0000
pode ser255<<16
salvar outro byte. Seu loop poderia ser salvar mais alguns bytes. Você pode salvar mais um byte adicionando a,q
à suaint
declaração. Você teria que fazê-loint c[]=
em vez deint[] c
por issoq
é umint
e não umint[]
. Isso permite adicionar umq=390-v*20;
ao seu loop. e substitua390-v*20
por um q. É muito trabalho para um byte, mas um byte é um byte, certo ?!drawOval
e apenas tornar a metade superior da imagem ... pode ser um pouco embora mais caro ...void r()throws Exception{BufferedImage i=new BufferedImage(400,200,2);Graphics2D g=i.createGraphics();g.setStroke(new BasicStroke(10));for(int c[]={255<<16,16744192,16776960,65280,255,4915330,9371903},v=0,t;v<7;g.drawArc(t=v*10+5,t,t=390-v++*20,t,0,360))g.setColor(new Color(c[v]));ImageIO.write(i,"PNG",new File("a.png"));}}
( 325 bytes )Chiclete ,
139119 bytesHexdump:
Infelizmente, isso é mais curto que minha resposta de Pyth . :(
Gera o mesmo arquivo SVG.
fonte
CSS,
244242240 bytesEditar: salvou 2 bytes, contornando um bug no Chrome. Economizei mais 2 bytes graças a @TrangOul.
Nota: o trecho usa
<div>
devido a limitações dos trechos de pilha.Mostrar snippet de código
fonte
Javascript
271251fonte
{ ... }
para dentro da última seção, separada por,
. por exemplofor(i=0;i<8;x.beginPath(),x.arg(...etc...))
. Você provavelmente também pode usarslice
/splice
of substr se não me engano. Também pode ser mais curto usar o <canvas>.innerHTML
. Ou até mesmo uma resposta HTML + JS e dar o <canvas> e idc
e, em seguida, ele deve ser adicionado automaticamente como uma variável global JSsubstr
tem a vantagem aqui, pois seu segundo parâmetro é um comprimento, não um deslocamento. Quanto ao golfe,document.body
parece proporcionar uma economia considerável.C,
220217213 bytesA saída é PPM (o tipo binário).
Editar: salvou alguns bytes graças a @tucuxi.
Editar 2: código reorganizado para economizar ainda mais.
fonte
i;s;t;main()
->s;t;main(i)
e outro colocando parte do corpo do loop for dentro do for:;)code1,code2;
->;code2)code1;
(salva uma vírgula!).Google Blockly , 48 blocos, 75 bytes
Clique no gif abaixo para navegar até a solução, onde você pode ver de perto como ela funciona.
Quanto a uma explicação, acho que uma imagem vale mais que mil palavras e, portanto, um gif vale mais que mil imagens.
link para o grande gif legível
Nota: Não tenho certeza de como contar no Blockly, portanto contei cada bloco como 1 byte e todas as variáveis da maneira regular, de modo que
0
== 1 byte,530
== 3 bytes,Arial
== 5 bytes ebold
== 4 bytes.Contei o caractere especial que usei para cortar o arco-íris em 2 bytes. Por favor, relate quaisquer erros ou sugestões da contagem de bytes nos comentários
fonte
Postscript (87 bytes)
Despejo hexagonal:
Saída:
fonte
HTML + CSS,
310307 bytesMarcação inválida do superdobrador (pode ou não parecer correta no seu navegador). Só queria ver se era possível.
fonte
white
também pode ser reduzido), é claro - não sei por que não vi isso. Eu tenteibgcolor
antes de postar, porém, mas, infelizmente, ele não é mais suportado (aqui no Chrome qualquer maneira)PHP, 285 bytes
Saídas:
fonte
header()
chamada e até a tag PHP de abertura. No Linux, o mais simples é executarphp -r '$a=imagecreate(400,200);const b=255;for($c=[b,b,b,b,0,0,b,127,0,b,b,0,0,b,0,0,0,b,75,0,130,143,0,b,b,b,b];$i<9;)imagefilledellipse($a,200,200,$r=420-$i*20,$r,imagecolorallocate($a,$c[$j=$i++*3],$c[$j+1],$c[$j+2]));imagepng($a);' | display
no prompt de comando e contá-lo como 227 caracteres. (Usando PHP 5.6.11.)Bash + ImageMagick,
159125 caracteresSaída de amostra:
fonte
Processamento,
196186181179169163 bytesEconomizou 10 bytes graças a Kritixi Lithos
... e outros 6 bytes graças a dzaima
fonte
for(int i=0;i<8;i++)
parafor(int i=0;i++<8;)
ou similarsize()
background(-1)
é um byte menor do quebackground(255)
, e você pode mudar o255
em ordemc
para-1
salvar outro byteR,
184bytes 170Criar uma imagem com dimensões fixas de pixel é surpreendentemente complicado com R, cujas funções de plotagem são destinadas principalmente a estatísticos. Em particular, R deixa espaço extra para etiquetas e eixos de coordenadas, a menos que você defina explicitamente as margens como largura zero chamando
par
.Por outro lado, algumas das cores necessárias (especificamente vermelho, amarelo e azul) são encontradas na paleta padrão e podem ser referenciadas simplesmente por índices inteiros.
fonte
Quarto Salão Haiku (184 bytes)
Não posso satisfazer as restrições de dimensão com esse formato, mas achei que valeria a pena compartilhar de qualquer maneira.
fonte
Excel VBA,
213202196192172 BytesCódigo
Função de janela imediata VBE anônima que não recebe entrada e gera um arco-íris, como uma imagem vetorial, para o objeto de folhas (1)
Versão da sub-rotina
-11 bytes para remover
.Adjustments(3)=3/80
chamadas e adicionar um oitavo arco branco-6 bytes para usar
-1
sobre&HFFFFFF
-3 bytes para usar
Sheet1
sobreSheets(1)
-6 bytes para converter a
with
instrução emset
instrução-14 bytes para converter de
Sub
a função VBE anônimaSaída
fonte
DIV Games Studio (184 bytes)
Não é o mais curto, mas é bastante simples. Usa a paleta padrão do DIV
Explicação
Defina o início do programa (chamado "r" para economizar espaço)
pesquisa na paleta de configuração
Código de programa BEGIN
Defina o modo de vídeo para 400.200
loop x (variável predefinida) de -80 (que bg hack) a 80 (7 cores + centro branco)
definir restrições elipse
draw elipse - na primeira iteração, desenha um círculo maior que a tela em branco total (índice -8)
draw (tipo (5 = elipse preenchida), cor, opacidade, x0, y0, x1, y1)
uma vez feito o primeiro, bata x até zero para começar a desenhar a faixa vermelha
fim para loop
loop infinito, tela de desenho.
fim (corresponde a COMEÇAR no início do programa)
fonte
Perl, 175 + 1 = 176 bytes
fonte
PHP, 190 bytes
Execute-o assim:
Também trabalhando teoricamente em 179 bytes (mas a imagem parece um pouco bagunçada, GD ruim):
Também não é uma imagem perfeita, mas muito melhor que a anterior (e @ 166 bytes):
fonte