Quando me deparei com essa pergunta , lembrei-me de que também já havia visto regras precisas para a construção da bandeira sul-coreana. E essa é uma construção bem diferente.
Então você deve desenhar uma construção exata dessa agora!
Especificação
Você pode renderizar a bandeira em arquivo ou tela usando gráficos vetoriais ou raster. Se sua saída for rasterizada, sua imagem deverá ter dimensões de 450x300 pixels ou mais.
Todas as proporções e posições de comprimento precisam ser exatamente como mostrado no diagrama a seguir:
Observe que os centros dos dois pequenos círculos estão alinhados com a diagonal.
Para as cores, você deve usar a seguinte paleta:
- Branco: #FFFFFF
- Preto: # 000000
- Vermelho: # C60C30
- Azul: # 003478
O limite preto não deve ser desenhado, a menos que o sistema de desenho não permita que você especifique uma tela 3: 2 por motivos técnicos (caso contrário, você deve usar uma tela 3: 2 e o sinalizador deve preencher tudo). Se você precisar adicionar o limite, ele pode ser arbitrariamente grosso - a bandeira deve ser considerada estritamente dentro do limite preto. Quaisquer outras linhas de ajuda ou indicadores de comprimento não devem ser desenhadas. Ou seja, a bandeira deve aparecer exatamente como na primeira imagem.
Pontuação
Isso é código de golfe, então a resposta mais curta (em bytes) vence.
Como uma palavra de aviso, o uso da compactação existente (como incorporar um GIF compactado) cai em várias brechas padrão .
fonte
CountryData["ROK","Flag"]
que não conta?Respostas:
PHP / HTML / SVG, 324
(quebras de linha adicionadas para legibilidade)
Os dados compactados se expandem para os mesmos dados SVG da minha resposta anterior mostrada abaixo, mas com duas alterações para ajudar na compactação:
As duas
<use>
seções são expandidas para o conteúdo original da<defs>
seção. Isso torna o texto de origem mais longo, mas reduz a entropia para compactar melhor.No primeiro
<g>
elemento, mudeitransform=translate(36,24)rotate(33.69)
paratransform=rotate(33.69)translate(43.27)
. Isso tem o mesmo efeito geometricamente, mas compacta melhor porque a sequência><g transform=rotate(
agora aparece duas vezes.Por padrão, o PHP servirá como
Content-Type: text/html
isso; portanto, a sintaxe XML inválida não deve ser um problema.SVG / HTML, 463
O analisador HTML não se preocupa muito com a sintaxe correta; portanto, podemos eliminar aspas nos parâmetros, desde que eles não contenham espaços. Deve ser possível reduzir ainda mais isso com um pouco de Javascript.
fonte
Python + Pycairo,
371 370366 bytesProduz um pequeno arquivo SVG chamado
F
.fonte
C(*[.77,0,.05,.2,.19,.47][i::2])
é mais curto queC(*[(.77,.05,.19),(0,.2,.47)][i%2])
s=SVGSurface("F",12,8);c=Context(s)
vez de apenasc=Context(SVGSurface("F",12,8))
?HTML + CSS,
966 906 843 792762 bytesNão é um vencedor a qualquer momento, mas é muito divertido desenhar em CSS. Isso pode ser jogado muito embora.
CSS, HTML :
;border:1px solid
é apenas para exibição, pois a<body>
tag possui limites claros que podem ser observados pelo Inspetor ou ferramentas similares, conforme declarado pelo OPNOTA Funciona apenas no Firefox (ou Chrome canary / dev) devido ao uso de transformações e gradientes não específicos do fornecedor.
Veja em ação
fonte
0deg
->0
(duas vezes) e removerleft:0
dea:before
. Em HTML você pode usar<p><ul></ul>
. (<p>
Será implicitamente fechado antes<ul>
):before{content:''}
e:after{content:''}
são mais do que apenas adicionando outro elemento (apesar deste facto, olhando melhor).-webkit-
antes de todos ostransform:
s, mas nem é preciso dizer que isso o tornaria um pouco mais longo!BBC Basic,
349343 caracteres ASCII, tamanho do arquivo tokenised 330Faça o download do emulador em http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
Usar as cores corretas adicionou muito, mas jogar todos os comandos gráficos até os códigos VDU brutos permite economizar 6 caracteres no geral, em comparação com o meu post original. Todos os gráficos no micro da BBC são feitos através de códigos de controle ASCII específicos da máquina; portanto, em vez de usar comandos gráficos de alto nível, você pode alimentar bytes diretamente para o controlador VDU (geralmente mais curto, mas com grande custo para facilitar a leitura). Um valor que termina em ponto e vírgula em vez de vírgula é uma representação little endian de 16 bits de 2 bytes.
Versão ungolfed
No início do programa, movo a origem para o centro da tela.
Não desenho semicírculos coloridos grandes. Em vez disso, corro um loop que desenha pequenos círculos vermelhos e azuis, girando no sentido anti-horário. Faço quase 3 rotações completas (começando com azul à direita), o que é obviamente mais do que suficiente para preencher o disco. Paro na 3ª revolução, exatamente quando o azul no canto inferior direito está na posição correta para alinhar com as barras (que precisam ser plotadas).
Quando o ângulo está correto, eu desenho uma das barras. o vetor x, y para desenhar o pequeno círculo azul atual serve para indicar em que direção a barra deve estar. Para cada uma das três rotações,
a*7DIV44
é calculado um valor diferente do número inteiro , que informa se a primeira, segunda ou terceira barra deve ser desenhada, com sua aresta interna 6 / 8,7 / 8 ou 8/8 unidades a partir do centro ( de acordo com as unidades usadas na pergunta espec.) Como as unidades de programa são 1/4 daquelas na especificação, ainda é uma meia unidade, então dividimos por 2 novamente antes de salvar na variável 'b' para evitar a metade repetida mais tarde.As barras são desenhadas sólidas e, em seguida, o meio é excluído, se necessário. Isso evita que as dobras juntem meias barras. A variável z indica se uma barra deve ser cortada. Ou seja, quando y é negativo para as barras do meio e quando x é positivo para as outras barras.
MOVE
é uma jogada absoluta.MOVEBY
é um movimento relativo.PLOT133
considera as duas últimas posições do cursor gráfico, mais a nova especificada (em coordenadas relativas) como três cantos de um paralelogramo e plota esse paralelogramo.Saída (e discussão das limitações de idioma)
Selecionei um modo de tela de 1280x800 pixels lógicos = 640x400 pixels físicos, que por padrão tem um fundo preto. Sobre isso, desenho um retângulo branco de -600, -400 a 600.400 para atuar como minha "tela".
O BBC Basic pode lidar com 16 cores de uma só vez, a partir de um palete reprogramável. Mas ele suporta apenas cores de 18 bits, enquanto a pergunta especifica as cores como 24 bits. As cores o mais próximo possível.
fonte
Tartaruga Python 3 (
552549 bytes)( Imagem em tamanho real )
Edit: Agora que temos os snippets de pilha, aqui está um teste de snippet de pilha usando o Skulpt , com a ajuda da resposta do ArtOfCode aqui . Infelizmente, o Skulpt ainda não implementou completamente o Python, então tive que mutilar metade do meu código para que isso funcionasse. Em outras palavras, esse trecho destina-se apenas a indicar como meu programa funciona (sem a necessidade de acessar o Python).
(Além disso, estou descobrindo que isso pode não funcionar em alguns navegadores ...)
Código atual:
Como a tartaruga é tão lenta, se você quiser resultados instantâneos, poderá adicionar
t.tracer(0)
após a primeira linha antes de executar o script.Nota: Por alguma razão, a tartaruga continua desenhando o que parece pixels pretos extras, mesmo que eu já tenha ligado
up()
, e não faço ideia do porquê ...fonte
HTML + ES6, 388
Se o seu navegador suportar o ES6, você poderá visualizá-lo no JSFiddle ou executar o snippet.
Ele constrói a bandeira com algumas formas básicas, girando a tela primeiro para explicar os ângulos.
fonte
<canvas width=576 height=384 id=D><script>c=D.getContext('2d')
é 9 bytes menos. Além disso, como a página inteira é branca, acho que você precisa desenhar a borda.Mathematica
404450fonte
C ++ MUITO GRANDE
Tentei isso usando minha biblioteca de desenhos de PPM feita em casa . É tecnicamente escalável, mas estou limitado pela minha função de preenchimento recursivo, porque não é confiável e gosta de segfault, acho que está gastando muita memória, por isso não permitirei que o usuário defina a escala. A imagem está irregular porque as coordenadas que inseri para cada canto das barras estão um pouco desligadas.
Eu o configurei para começar com um fundo preto, depois coloquei um círculo branco no meio, depois círculos vermelhos e azuis. Usou preenchimentos recursivos para adicionar o restante de vermelho e azul. Em seguida, desenhou retângulos com linhas brancas para marcar as barras pretas. Divida o fundo preto em 4 seções com linhas brancas e use 4 preenchimentos recursivos para tornar cada seção branca. Fazer isso em 1 passagem teria causado um segfault. Ainda é muito lento para renderizar.
Código principal ungolfed (o resto da biblioteca é muito grande, jogar golfe não importa)
fonte
PostScript ,
572477 bytesCódigo de golfe:
Código não destruído:
Resultado:
fonte
Python 2, 483 bytes
Possíveis melhorias:
Saída como texto PPM, uso:
versão beta ungolfed
fonte