Em 2015, o Aeroporto Internacional de Portland iniciou a substituição de seu tapete icônico . Quero que você escreva um programa para desenhar o tapete antigo no menor número de bytes possível.
O tapete:
Especificações
Aqui está um link para uma imagem em PDF escalável de um bloco. Sua saída deve corresponder às dimensões relativas e ao posicionamento dessa imagem.
Todas as cores na sua imagem final devem estar dentro de 15 de cada valor RGB na imagem especificada. Estes estão listados abaixo para sua conveniência.
Red Green Blue Teal: 0, 168, 142 Magenta: 168, 108, 185 Orange: 247, 58, 58 Light Blue: 90, 166, 216 Dark Blue: 0, 77, 117
Sua saída deve ter pelo menos 150 x 150 pixels e deve ser quadrada. Se você optar por imprimir em um formato escalável como uma imagem vetorial, deverá corresponder exatamente à imagem.
Você pode imprimir a imagem em qualquer formato de imagem preexistente.
Isso é código-golfe, então você deve tentar minimizar o número de bytes no seu código.
fonte
Respostas:
HTML puro, 873 bytes
HTML + CSS, 625 bytes
fonte
TikZ,
725693681671 bytesExperimente Online!
Explicação
Uma boa parte do código é um wrapper:
Essa é uma pequena variação no invólucro padrão do Tikz, pois ele também possui a linha
\usepackage{xcolor}
para que possamos criar as cores corretamente.A primeira coisa que é feita é
line width=20,every node/.style={minimum size=20}]
que define as linhas e os nós para o tamanho adequado.Feito isso, definimos as cores que usaremos para as várias partes da imagem:
Agora que tudo está configurado, pintamos o plano de fundo da tela azul-petróleo:
(Não incluirei uma imagem disso porque é apenas um quadrado verde-azulado, mas incluirei imagens uma da outra)
O primeiro nó que adicionamos é o nó laranja, à esquerda do centro da tela.
Agora vamos desenhar os nós azul claro e magenta. Existem 7 nós azuis e 4 nós azuis, mas podemos desenhar nós extras que serão cobertos por linhas posteriormente, portanto, desenharemos 7 de cada um.
Agora vamos desenhar todos os grupos de 3 pontos usando um único
\foreach
loopAgora desenhamos a linha certa. Essa linha será uma linha simples com deslocamentos de
.35
em cada direção para corresponder ao tamanho de um nó.Agora devemos desenhar as linhas e quadrados azuis escuros no eixo x. Vamos desenhá-los com uma linha usando um padrão de traço personalizado.
Este padrão é
[dash pattern=on20off8.5on162.5off8.5]
Isso cria um quadrado com uma cauda longa e sólida. Nossa linha começará do fundo e não cobrirá exatamente 2 ciclos do padrão.E agora terminamos.
fonte
\definecolor
com aHTML
especificação (em vez deRGB
) permite especificar cores usando hex.arquivo PNG literal,
283,234227 bytesEDIT : Usando o serviço de compactação de imagem on-line https://compress-or-die.com/ , isso diminuiu outros 7 bytes.
albn @ alexhi
Os 227 bytes são o tamanho real do arquivo binário carpet.png. Quando codificado em base64, conforme exibido no bloco acima, é alguns bytes mais longo (308 bytes). Encapsular isso em um trecho de html que renderiza a imagem diretamente adicionará mais alguns bytes:
HTML,
414,343, 336 bytesEdit : Eu removi as aspas e fechei> como Shaggy sugeriu. Também compactou a imagem em outros
17, 24 bytesfonte
=
e final>
. Aqui está uma versão de 366 bytes em que eu estava trabalhando antes de ver sua resposta:<img src=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJgAAACYBAMAAADq7D0SAAAAD1BMVEUAqI4ATXWobLlaptj3OjrqGXAuAAAAp0lEQVRo3u3YQQqFMAxFUbeQLbiFbsH9r8k3y8CmTiKm7b2Dwv/CgUAD4jF3TYGBRdgKmRqPCQa28gaMZ20KDGz5DQhnbQoMTG2wAcPR/ScY2HeYVw4zBQYWYDUvbRLWFS/lBxhYhM3bpXzMcWBgEVa5U70cpsDAnkf1FxcwMDAwMLBczP8DAwuwmpc2HzMFBhY8qHlp8zFTYGCdyn8GKrhOYBtjv3QDvf+Zic+8bOsAAAAASUVORK5CYII
Mathematica, 285 bytes
Mais fácil de ler:
As linhas 1 a 3 definem nomes abreviados para funções, a mais importante delas é
s
que desenha um quadrado centrado nas coordenadas que recebe (na verdade, 3 vezes suas coordenadas, para o dimensionamento apropriado). A Linha 4 define uma função de cor usando o sistema RGB de "atalho" do Mathematica:,RGBColor["#xyz"]
ondexyz
são dígitos hexadecimais, significaRGBColor[{17x, 17y, 17z}]
(de modo que cada coordenada tenha 16 opções igualmente espaçadas, de 0 a 255). Os primeiros comandos nas linhas 6–10 alternam a cor atual, usando as cores de atalho mais próximas das cinco cores designadas (nenhum valor é desativado em mais de 8 quando arredondamos para o múltiplo mais próximo de 17).A linha 6 desenha o quadrado grande verde-azulado. A linha 7 desenha a linha dos quadrados magenta, a linha 8 desenha a linha dos quadrados laranja e o único quadrado laranja. A linha 9 desenha a linha de quadrados azuis claros. A linha 11 desenha as três linhas diagonais dos quadrados azuis escuros, bem como o único quadrado azul escuro na parte inferior. Finalmente, a linha 12 desenha os três longos retângulos azuis escuros. A saída está abaixo:
(Dica de golfe: o comando
Cuboid
, destinado a objetos gráficos 3D, funciona bem em 2D e é mais curto queRectangle
.)fonte
Python, 420
fonte
HTML / SVG,
550542521 bytesfonte
HTML, 366 bytes
O domingo recebeu uma resposta do Base64 enquanto eu ainda estava trabalhando nisso; se ele optar por usá-lo, excluirei esta resposta.
Se a string Base64 por si só for uma resposta válida, serão apenas 335 bytes:
fonte
HTML / SVG + JavaScript (ES6),
500499 bytesÉ
>
necessário um extra para que ele funcione como um trecho; consulte este Fiddle para obter o código real.Explicação
Uma matriz de matrizes é mapeada para a função
a
, a criação de clones dorect
no HTML, inserindo-os após o inicialrect
e definindo as respectivasfill
,x
,y
,width
eheight
atributos. Cada matriz contém valores para esses atributos, nessa ordem, com qualquer valor ausente sendo definido pelos parâmetros padrão dea
. O aparentemente desnecessárior.id++
permite o uso decloneNode()
enquanto garante que só exista 1rect
com umid
de c; isso economiza a necessidade de usar o ridiculamente carodocument.createElementNS("http://www.w3.org/2000/svg","rect")
.fonte
PHP + SVG, 425 bytes
expandido
O resultado do código em um snippet HTML
PHP + SVG, 375 bytes
Essa contagem de bytes pode ser alcançada com a compactação do SVG
fonte