Desenha a bandeira nacional da Islândia


107

A UEFA Euro 2016 deste ano terminou e, além de algumas manchetes negativas, houve uma surpresa muito positiva - a seleção nacional de futebol da Islândia . Vamos desenhar sua bandeira nacional.

Entrada

Bem, obviamente esse desafio não tem entrada.

Resultado

  • Desenhe a bandeira da Islândia em qualquer formato visual aplicável de pelo menos 100 x 72 pixels ou 25 x 18 caracteres .
  • Salve a saída em um arquivo ou apresente-a instantaneamente - os formatos de exemplo são: imagens como png, jpg etc., gráficos vetoriais, desenhe na tela HTML ou use caracteres que não sejam espaços em branco para visualização.
  • Use estas cores : azul : #0048e0, branco : #ffffffe vermelho : #d72828.
  • Se o seu idioma não suportar valores de cores específicos, use os valores padrão para vermelho , azul e branco nos códigos de cores ANSI .
  • Desenhe a bandeira com as proporções corretas, como mostra a figura abaixo:

Chapa de ebulição

  • Você pode escrever um programa ou uma função. Se for uma função anônima, inclua um exemplo de como invocá-la.
  • Este é o pelo que a resposta mais curta em bytes vence.
  • As brechas padrão não são permitidas.

Entre os melhores

Se você não pode encontrar a sua resposta, formatar o seu idioma e contagem de bytes conforme explicado no "do Leaderboard Informações Seção " .


Este desafio é inspirado no Draw the flag of france .


20
Muito mais desafiadora seria a bandeira do meu país, que também se saiu muito melhor do que o esperado nos Euros deste ano - o País de Gales. :-)
Gareth

24
@Gareth Estou ansioso por uma especificação à prova d'água do dragão. ;)
Martin Ender

4
Parece que o azul na imagem acima é mais escura do que o real#0048e0
Luis Mendo

10
@MartinEnder A escultura em uma tábua de pedra conta? Isso é à prova d'água.
immibis

5
O @MartinEnder Mathematica terá um.
22616 gcampbell

Respostas:


259

Python 3, 190 172 171 169 167 160 159 147 143 bytes

Usando o PIL versão 1.1.7, que possui um método de deslocamento obsoleto, mas não removido.

from PIL.ImageDraw import*
i=Image.new('RGB',(25,18),'#d72828')
Draw(i).rectangle((1,1,23,16),'#0048e0',~0)
i.offset(9).resize((100,72)).show()

Cria uma imagem de 25 * 18 pixels preenchida com vermelho e desenha um retângulo de 23 * 16 pixels preenchido com azul com contorno branco de um pixel. Em seguida, compensa a imagem (9,9), que envolve as bordas, redimensiona para 100 * 72 e a mostra em uma janela.

Sinalizar antes da compensação:

insira a descrição da imagem aqui (redimensionado para 100 * 72)

Resultado:

insira a descrição da imagem aqui

Animado:

insira a descrição da imagem aqui

Edit1: Golpeou 18 bytes removendo o corte criando inicialmente uma imagem 25 * 18.

Edit2: Golf 1 byte usando em #fffvez de white.

Edit3: Golfed 2 bytes por aliasing importações.

Edit4: Golfou 2 bytes removendo o segundo argumento do método de deslocamento.

Edit5: Golfou 7 bytes mostrando a imagem em vez de salvar. (precisa do imagemagick instalado no Unix)

Edit6: Golf 1 byte reescrevendo importações.

Edit7: Golfou 12 bytes reescrevendo as importações novamente. (obrigado por @Dennis)

Edit8: Adicionado animação.

Edit9: Animação atualizada, pois estava faltando o último quadro.

Edit10: Golfed 4 bytes graças a Albert Renshaw!


42
Resposta muito boa.
insertusernamehere

17
Isso é genial! (Viking) Tirem o chapéu para você.
Ioannes

25
Uau, é raro eu votar em questões do tipo código-golfe no SO, mas é ainda mais raro que eu entre em uma comunidade totalmente nova para fazer isso. Esse hack de deslocamento é uma reminiscência do que costumávamos fazer antes que os jovens whippersnappers tivessem seus bytes de memória para trabalhar. Excelente trabalho.

5
gênio, sério! In
InuYaksa

3
Se você fizer isso from PIL.ImageDraw import*, Ise torna Imagee D.Drawse torna Draw, economizando 11 bytes.
1011 Dennis

117

código de máquina em modo real x86 para DOS COM, 69 65 63 62 bytes

Bandeira da Islândia produzida

O código deve ser executado como um executável COM do DOS.

Agradecimentos especiais

  • meden , salvou quatro bytes.
  • meden , salvou dois bytes e removeu a tremulação.

Código da máquina (em bytes hexadecimais)

68 00 A0 07 B8 13 00 CD      10 BE 23 01 AD 91 AD 91 
AC E3 FE 60 30 ED F3 AA      61 81 C7 40 01 FE CD 75 
F2 EB E9 FA B4 00 00 09      28 B4 46 00 0F FA 28 80 
57 0F 14 B4 0C 50 00 FA      14 0C 00 64 00 00

Fonte de montagem

A fonte é para NASM.

ORG 100h

push 0a000h
pop es

mov ax, 13h
int 10h

mov si, data


_draw:
 lodsw
 xchg ax, cx

 lodsw
 xchg ax, di

 lodsb

_cycle:
 jcxz _cycle

 ;al = color
 ;cl = col
 ;ch = row

rect:
 pusha
 xor ch, ch
 rep stosb
 popa
 add di, 320
 dec ch
 jnz SHORT rect

jmp SHORT _draw


data: 

        db 250d
        db 180d
        dw 0000h
        db 09h


        db 40d
        db 180d
        dw 0070d
        db 0fh


        db 250d
        db 40d
        dw 22400d
        db 0fh

        db 20d
        db 180d
        dw 80d
        db 0ch


        db 250
        db 20
        dw 25600d 
        db 0ch


        dw 0000h

13
Esta é uma primeira resposta muito legal! Bem vinda!
AdmBorkBork

5
Você pode salvar 2 bytes substituindo 'mov' por 'xchg' às 10h e 13h e outros 2 bytes substituindo 'test cx, cx / jz' por 'jcxz' às 16h
meden

3
Mais alguns pensamentos. Desde que o programa é executado no loop infinito, você pode evitar piscando apenas fazendo o circuito mais curto: _loop: jcxz _loop. Você também pode cortar 2 bytes do final do bloco de dados se alterar a ordem de carregamento de cxedi
meden

Mais uma vez obrigado @meden. A tremulação foi completamente desnecessária em efeito :) Também removi o mov bx, 320e movi o 320 para add di, 320(anteriormente add di, bx).
Margaret Bloom

Ótimo. Agora você tem uma vantagem firme sobre todas as respostas de código de máquina neste desafio. Apenas por uma questão de correção: ela seria melhor para mover jcxz _cyclelogo após xchg ax,cxpara que ele não iria carregar bytes além do fim dos dados. E há alguns comentários enganosos na fonte: ;dx = row. dxnão é usado em nenhum lugar do código.
Meden

55

C, 194 191 183 Bytes

#define C "\x1b["
#define A "@@@@@@"
y;f(){for(;y++<14;)printf(y>5&&y<10?y>6&&y<9?C"31m"A A A A"@\n":C"0m"A"@@"C"31m@@"C"0m"A A"@@@\n":C"34m"A"@"C"0m@"C"31m@@"C"0m@"C"34m"A A"@@\n");}

-3 adicionando um @no #define A
-8 adicionando [sobre#define C

Uso

main(){f();}

Resultado

imagem

válido com base neste comentário do OP

Saída de tamanho duplo, 204 bytes

#define C "\x1b["
#define B "████"
#define A B B B
y;f(){for(;y++<28;)printf(y>10&&y<19?y>12&&y<17?C"31m"A A A A"██\n":C"0m"A B C"31m"B C"0m"A A B"██\n":C"34m"A"██"C"0m██"C"31m"B C"0m██"C"34m"A A B"\n");}

image2


22
o quinto upvote provocou uma rede de +810 representantes em todo o mundo ... Obrigado! (Sim, é o primeiro local onde eu chegar ao 200 rep: D)
Giacomo Garabello

1
O resultado não precisa ser "pelo menos 100 x 72 unidades, onde uma unidade é um pixel ou um caractere"? Isso não atende a esse requisito, mas suspeito que o OP cometeu um erro ao formular essa definição.
Kritzefitz

4
@Kritzefitz Bem, um personagem ocupa muitos pixels, portanto pode ser um pixel em vez de um personagem. Encontrei um buraco.
Erik the Outgolfer

@GiacomoGarabello Qual é o primeiro site na foto em que você recebeu +150? Não reconheço o ícone.

@LegoStormtroopr It's PPCG !! Dê uma olhada neste projeto do GitHub!
Giacomo Garabello 14/07/16

31

Excel VBA, 254 228 153 bytes

Não foi possível encontrar uma maneira de definir o tamanho da coluna / linha para pixels (tornando-os quadrados), devido à maneira como o Excel lida com isso, para torná-los agradáveis ​​e quadrados primeiro.

Editar 1: RGB substituído com valores retornados para cores, -26 bytes

Edit 2: Tentei adicionar o máximo de sugestões possível, -75 bytes. Não pude usar &48e0como cor e não sei por que. Obrigado a todos

Sub e()
c "A1:CV72", rgbBlue
c "AC1:AR72", -1
c "A29:CV44", -1
c "AG1:AN72", 255
c "A33:CV40", 255
End Sub

Sub c(d, f)
Range(d).Interior.Color = f
End Sub

Cenário: Bandeira da Islândia


Como você fez as células quadradas? Você fez isso manualmente ou com algum outro script não incluído? Eu gostaria de vê-lo, mesmo que não faça parte do seu programa pontuado.
Mbomb007

Eu fiz isso manualmente, o código para alterar a largura da célula é fácil o suficiente onde eu poderia tê-lo adicionado, mas os tamanhos não são consistentes entre as resoluções de linha / coluna ou monitor, a menos que você defina o tamanho com base em pixels que não podem ser executados a partir de o que eu pude encontrar. Pelo que li, você tem que encontrar a resolução e fazer algumas contas para converter os pixels no tamanho que a função aceita.
Tjb1

1
Além disso, o código para convertê-lo em pixels parece exigir um código rígido ou parte da resolução ou PPI (eu realmente não entendo a fórmula), portanto parece que também não funcionaria em todos os dispositivos.
Tjb1

2
E, apenas pela integridade (relacionada à configuração de células quadradas em vez da solução em si), se você alternar para a exibição de layout de página, poderá definir a altura e a largura da célula para valores específicos, como 0.2cm. Isso será mantido assim que você voltar, e não será necessário tentar calcular as proporções bizarras do Excel :-) A propósito, se você quiser mais truques interessantes do Excel, consulte o vídeo "You suck at Excel" de Joel Spolsky.

3
Acho que espaço em branco extra pode ser removido, mesmo que seja adicionado automaticamente mais tarde.
Erik the Outgolfer

29

MATL , 57 56 52 49 48 bytes

7:g2IvtPvt!9Mh2$X>2YG[0E28]8*255/7B[43DD]51/v2ZG

Isso produz a seguinte figura (testada com o compilador em execução no Matlab e no Octave).

insira a descrição da imagem aqui

EDIT: Você pode experimentar experimentalmente o MATL Online! (pode ser necessário recarregar a página se ela não funcionar inicialmente).

Como funciona

7:g         % Range from 1 to 7 converted to logical: push array [1 1 1 1 1 1 1]
2           % Push 2
I           % Push 3
v           % Concatenate vertically into a 9×1 array
tPv         % Duplicate, flip vertically, concatenate. Gives a 18×1 array
t!          % Duplicate, transpose: 1×18 array
9M          % Push [1 1 1 1 1 1 1] again
h           % Concatenate horizontally: gives 1×25 array
2$X>        % Maximum of the two arrays, with broadcast. Gives a 18×25 array
            % with 1 for blue, 2 for white, 3 for red
2YG         % Show image with default colormap
[0E28]8*    % Push array [0 72 224] (blue)
255/        % Divide each entry by 255. Colors are normalized between 0 and 1
7B          % 7 converted into binary: push array [1 1 1] (white, normalized)
[43DD]51/   % Push array [215/255 40/255 40/255] (red, normalized)
v           % Concatenate vertically. Gives a 3×3 array
2ZG         % Use as colormap

26

CSS, 285 284 264 bytes

*,:before,:after{background:#fff;width:100;height:72}body{background:#0048e0;margin:0}:before,:after{content:"";position:fixed}:after{background:#d72828}html:before{top:28;height:16}body:before{left:28;width:16}html:after{top:32;height:8}body:after{left:32;width:8

Guardou 1 byte graças a @insertusernamehere.

Economizou 20 bytes graças a @ user2428118, removendo todos os pxs. Observe que isso requer que a página seja renderizada no modo quirks, para que não funcione nos snippets de pilha.

Eu poderia copiar a abordagem Python de agrupar uma imagem em um deslocamento, mas não seria interessante.

Ungolfed:

*, *::before, *::after {
  background: #fff;
  width: 100px;
  height: 72px;
}

body {
  background: #0048e0;
  margin: 0;
}

*::before, *::after {
  content: "";
  position: fixed;
}

*::after { background: #d72828 }

html::before { top: 28px; height: 16px }
body::before { left: 28px; width: 16px }
html::after { top: 32px; height: 8px }
body::after { left: 32px; width: 8px }

Isso usa os pseudoelementos (elementos que não são escritos em HTML) ::beforee ::afterpara criar as linhas no sinalizador. O motivo pelo qual ele funciona sem HTML é que, no HTML5, os elementos <html>e <body>são opcionais; portanto, os navegadores os criam automaticamente se não estiverem presentes.

Mais divertido:


2
Você ainda pode salvar 1 byte substituindo whitepor #fff.
insertusernamehere

@insertusernamehere Sim, obrigado.
gcampbell

1
Se você aplicar o CSS no modo quirks (página sem doctype), poderá reduzi-lo para 264 bytes, omitindo-o em pxqualquer lugar.
user2428118

@ user2428118 Ainda mais útil, considerando que não há HTML; portanto, não <!doctype html>!
wizzwizz4

@ user2428118 Por alguma razão, isso não funciona para mim no Safari móvel. Vou dar uma olhada quando for o próximo em um computador.
Gcampbell

26

Bash + Imagemagick 7, 94 90 86 85 bytes

magick -size 84x56 xc:#0048e0 ${s=-splice 8x8}+28+28 -background \#d72828 $s+32+32 x:

Economizou 8 bytes, graças a @manatwork, e 1 byte, graças a @ GlennRanders-Pehrson


5
Se você especificar, em x:vez do nome do arquivo de saída, convertexibirá o resultado em uma janela, o que também é aceitável. E é apenas o suficiente para escapar da afiada, não há necessidade de citar: \#d72828.
manatwork

2
Normalmente, rotulamos respostas como Bash + Imagemagick . No bashlado você pode economizar mais 4 caracteres: convert -size 84x56 xc:#0048e0 ${s=-splice 8x8}+28+28 -background \#d72828 $s+32+32 x:.
manatwork

Apenas uma pergunta estúpida: você pode fazer ${s=-splice 8x8}+56?
Erik the Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ +56é tratado como +56+0, não +28+28.
bodqhrohro

2
Você pode salvar outro byte usando uma versão recente do ImageMagick; então o comando pode ser "magick" em vez de "convert".
Glenn Randers-Pehrson

20

ZX Spectrum BASIC, 210 141 92 bytes

1 LET n=-VAL "8.5": FOR y=n TO -n: FOR x=n TO VAL "16": LET p=VAL "271"(PI-(ABS x<SQR PI OR ABS y>SQR PI)-NOT INT ABS x*INT ABS y): PRINT PAPER p; BRIGHT p>PI;" ";: NEXT x: PRINT : NEXT y

insira a descrição da imagem aqui

Tamanho determinado como o tamanho do programa BASIC em fita via SAVE. Muito do crédito do golfe para alguns membros do grupo ZX Spectrum no Facebook , em particular @impomatic e Johan Koelman.


Vendo aqueles PAPERe BRIGHTtraz tantas lembranças boas :-)
Luis Mendo

Existe alguma informação sobre quanta memória um programa ZX Spectrum BASIC leva? Eu pensei que era uma linguagem "tokenized", ou seja, eu esperava FOR, NOTetc para ocupar apenas 1 ou talvez 2 bytes cada
Luis Mendo

1
@LuisMendo Sim, é tokenizado - FORé precisamente um byte. No entanto, os números são "anti-tokenizados", pois são armazenados como texto e forma binária e ocupam 5 bytes a mais do que você esperaria, portanto, em NOT PIvez de zero e similares.
Philip Kendall

132 bytes por remoção do NO e ajustando o limite de teste twitter.com/john_metcalf/status/752760203007791105
impomatic

1
122 bytes com alguns mais optimizações twitter.com/john_metcalf/status/752783690179211264
impomatic

15

Conjunto ZX Spectrum Z80, 65 bytes

    ld hl,22528
    ld b,7
    ld de,120*256+8 ; white, blue
    ld a,16         ; red

; create the first row

blueleft:
    ld (hl),e
    inc hl
    djnz blueleft

    ld (hl),d
    inc hl
    ld (hl),a
    inc hl
    ld (hl),a
    inc hl
    ld (hl),d
    inc hl

    ld b,14
blueright:
    ld (hl),e
    inc hl
    djnz blueright

; copy the first row to the next 17 rows

    ld l,b
    ld de,22528+32
    ld bc,17*32
    ldir

; add the horizontal stripe

    ld hl,22528+7*32
    dec d
    ld e,b
    ld c,2
midrep:
    ld b,25
midstripe:
    cp (hl)
    jr z,red
    ld (hl),120
red:
    ld (de),a
    inc hl
    inc de
    djnz midstripe

    ld hl,22528+10*32
    ld e,9*32
    dec c
    jr nz,midrep
    ret

Bandeira da Islândia


14

Minecraft 1.10.2, 734 caracteres

Pode ter 734 caracteres, mas é a única submissão feita até agora de lã real!

summon FallingSand ~ ~1 ~ {Block:log,Time:1,Passengers:[{id:FallingSand,Block:redstone_block,Time:1,Passengers:[{id:FallingSand,Block:activator_rail,Time:1,Passengers:[{id:MinecartCommandBlock,Command:"fill 0 ~ 0 100 ~ 72 wool 11"},{id:MinecartCommandBlock,Command:"fill 28 ~ 0 44 ~ 72 wool"},{id:MinecartCommandBlock,Command:"fill 0 ~ 28 100 ~ 44 wool"},{id:MinecartCommandBlock,Command:"fill 32 ~ 0 40 ~ 72 wool 14"},{id:MinecartCommandBlock,Command:"fill 0 ~ 32 100 ~ 40 wool 14"},{id:MinecartCommandBlock,Command:setblock ~ ~ ~1 command_block 0 replace {Command:fill ~ ~-3 ~-1 ~ ~ ~ air}},{id:MinecartCommandBlock,Command:setblock ~ ~-1 ~1 redstone_block},{id:MinecartCommandBlock,Command:kill @e[type=MinecartCommandBlock]}]}]}]}

Vá para -5x -5z, cole em um bloco de comando Impulse, defina-o como "Sempre ativo" e pressione Concluído.

A extensão da bandeira varia de 0, 0 a 100, 72; e fica 3 quarteirões acima do bloco de comando, conforme colocado. Ele lança uma bastante grande sombra , e monstros desovar sob ele. Se isso é exato para o país da Islândia, no entanto, é uma incógnita.

Aviso justo - matará todos os MinecartCommandBlocks no mundo, com o objetivo de salvar quatro caracteres. Não execute isso em um mundo ao qual você esteja excessivamente apegado.

Bandeira

Usado combinador de comando do MrGarretto e ajustados a saída um pouco (808 -> 734)


1
"Se isso é exato para o país da Islândia ..." 😂
Jordan

2
Você não pode simplesmente usar kill @e sem o argumento do seletor de destino? Isso matará o jogador, mas ei, a bandeira ainda estará lá #
Kuilin Li

11

Logotipo, 216 188 bytes

Usando a implementação do Calormen.com . Para você, purista, a implementação usa alguns antialiasing que cobrem um pouco as bordas. Eu desperdicei 3 bytes escondendo a tartaruga, então isso deve compensar isso.

Isso pode ser bastante reduzido se a implementação do seu logotipo permitir definir o tamanho da janela. Então você poderia wrape fazer a tartaruga passar para fazer a cruz em quatro tacadas, e pular a necessidade de apará-la com uma borda.

captura de tela da bandeira gerada

TO X :C :S
setpc :C
setpensize :S
home
pd
setx 100
setx 36
bk 36
fd 72
pu
END
setpc "#48e0
fill
X 7 16
X "#d72828 8
fd 4
pe
pd
setx -4
bk 80
setx 104
fd 80
setx 0
ht

Eu não sabia que havia uma versão em inglês do Logo!
22416 Vincent Vincent

1
Absolutamente. Acho que vi pela primeira vez há mais de 30 anos em um Apple IIe. Eu também o tinha no meu computador em cores TRS-80. Foi o meu primeiro gosto de usar ângulos em geometria, anos antes de eu aprender oficialmente na escola.
GuitarPicker 13/07/16

Por que a borda branca em torno dele?
Solomon Ucko

1
Desenhei as linhas usando uma caneta grande, que deixa bordas arredondadas nas pontas da cruz, então tive que varrê-la com uma borracha grande para quadrá-las. Eu estava escrevendo outra versão disso, que usou um método completamente diferente no Logo e acabou sendo menor. Eu também estava trabalhando em uma terceira versão que imprime uma grande cruz em latim Unicode e a pinta, mas as proporções não eram corretas e o tamanho parecia exceder essa.
GuitarPicker

10

Java 8, 449 447 bytes:

import java.awt.*;import javax.swing.*;class A extends JPanel{public void paintComponent(Graphics G){super.paintComponent(G);G.setColor(new Color(0,72,224));G.fillRect(0,0,175,126);G.setColor(Color.WHITE);G.fillRect(49,0,28,126);G.fillRect(0,49,175,28);G.setColor(new Color(215,40,40));G.fillRect(56,0,14,126);G.fillRect(0,56,175,14);}public static void main(String[]a){JFrame J=new JFrame();J.add(new A());J.setSize(175,147);J.setVisible(true);}}

Uma resposta muito tardia, e também a mais longa aqui, aparentemente. Usa a java.awt.Graphicsclasse para criar e abrir uma janela com a bandeira, criada por 5 retângulos totais, consistindo em 1 para os blocos azuis, 2 para as listras brancas e 2 para as listras vermelhas. Usa 7 pixels: 1 unidade de proporção. Em outras palavras, para cada unidade, 7 pixels são usados. Aqui está uma imagem da saída em um Macintosh com OS X 10.11:

Saída de exemplo

Agora, para encontrar uma maneira de jogar isso um pouco mais ...


Tente substituir em paintvez de paintComponent. Considere usar uma classe anônima para o JPanel. Considere apenas usar um BufferedImage e gerar um arquivo.
Justin

@ Justin Na verdade, eu já estava usando Blueum retângulo enorme para o fundo. Acabei de me misturar entre esta e outra versão que criei em Python. Independentemente disso, obrigado pelas outras dicas! :)
R. Kap

Mais algumas sugestões: não use a JPanel, apenas substitua a JFrame. Se você fizer isso e simplesmente substituir paint, não precisará do Swing, apenas do AWT; portanto, altere JFramepara Framee remova a importação. Não ligue super.paint. Reorganize o método principal; mover o setSizepara o paintmétodo da nossa Frame, remover a variável J, e anexar .setVisible(true)ao final da classe anónimo. Finalmente, mude .setVisible(true)para ser show(), sim, é um método obsoleto, mas é mais curto. Use um interfacepara remover o publicdo método principal.
Justin

Resultado final em 338 caracteres (também tive que alterar a altura, pois é um quadro):import java.awt.*;interface A{static void main(String[]a){new Frame(){public void paint(Graphics G){setSize(175,119);G.setColor(new Color(0,72,224));G.fillRect(0,0,175,126);G.setColor(Color.WHITE);G.fillRect(49,0,28,126);G.fillRect(0,49,175,28);G.setColor(new Color(215,40,40));G.fillRect(56,0,14,126);G.fillRect(0,56,175,14);}}.show();}}
Justin

1
Melhor ainda: não pinte o primeiro retângulo, apenas chame setBackground(color)(também o tamanho ainda estava errado). Agora, às 317:import java.awt.*;interface A{static void main(String[]a){new Frame(){public void paint(Graphics G){setSize(175,126);setBackground(new Color(0,72,224));G.setColor(Color.WHITE);G.fillRect(49,0,28,126);G.fillRect(0,49,175,28);G.setColor(new Color(215,40,40));G.fillRect(56,0,14,126);G.fillRect(0,56,175,14);}}.show();}}
Justin

10

R, 197 195 187 bytes

w="white";r="#d72828";png(w=100,h=72);par(mar=rep(0,4),bg="#0048e0",xaxs="i",yaxs="i");frame();rect(c(0,7,0,8)/25,c(7,0,8,0)/18,c(1,.44,1,.4),c(11/18,1,5/9,1),c=c(w,w,r,r),b=NA);dev.off()

Recuado, com novas linhas e explicações:

w="white"
r="#d72828"
png(w=100,h=72) #Creates in working directory a png called Rplot001.png 
                #with a width and a height of 120 and 72 pixels respectively.
par(mar=rep(0,4), #No margin around the plot
    bg="#0048e0", #Blue background
    xaxs="i",yaxs="i") #Axes fits range exactly
frame() #Creates an empty plot which range is xlim=c(0,1) & ylim=c(0,1)
rect(c(0,7,0,8)/25, #Because rect is vectorized
     c(7,0,8,0)/18,
     c(1,.44,1,.4), #i. e. c(25,11,25,10)/25
     c(11/18,1,5/9,1), #i. e. c(11,18,10,18)/18
     c=c(w,w,r,r), # c= is the same as col=, thanks to argument name completion
     b=NA)#No borders
dev.off()

Bandeira da ilha

Editar : ao frame()contrário, ao contrário de plot()ou plot.new()não adiciona uma borda à plotagem, o significado bty="n"era desnecessário aqui.


9

Atari executável de 8 bits, 123 bytes

Outra entrada "just for fun", este programa deve ser executada em um computador ou emulador de 8 bits da Atari. Por exemplo, para carregar o programa no Atari800, basta executar:

atari800 iceland.xex

Código da máquina (em bytes hexadecimais)

ff ff 00 06 74 06 a9 1b 8d 30 02 a9 06 8d 31 02
a9 44 8d c4 02 a9 0f 8d c5 02 a9 84 8d c6 02 d0
fe 70 70 70 48 57 06 48 57 06 48 57 06 48 57 06
48 57 06 48 57 06 48 57 06 48 61 06 48 6b 06 48
6b 06 48 61 06 48 57 06 48 57 06 48 57 06 48 57
06 48 57 06 48 57 06 48 57 06 41 1b 06 ff fe 5b
ff ff ff c0 00 00 00 aa aa 5a aa aa aa 80 00 00
00 55 55 55 55 55 55 40 00 00 00

Código fonte do assembler (pode ser compilado com o MADS ):

        org $0600
        lda <dlist
        sta $0230
        lda >dlist
        sta $0231
        lda #$44
        sta $02c4
        lda #$0f
        sta $02c5
        lda #$84
        sta $02c6
loop    bne loop
dlist   dta $70, $70, $70
        dta $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1)
        dta $48, a(line2)
        dta $48, a(line3), $48, a(line3)
        dta $48, a(line2)
        dta $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1)
        dta $41, a(dlist)
line1   dta $ff, $fe, $5b, $ff, $ff, $ff, $c0, $00, $00, $00
line2   dta $aa, $aa, $5a, $aa, $aa, $aa, $80, $00, $00, $00
line3   dta $55, $55, $55, $55, $55, $55, $40, $00, $00, $00

Como funciona:

O programa usa uma lista de exibição personalizada baseada no modo ANTIC 8 (40 pixels por linha, 2 bpp). Linhas repetidas são carregadas a partir do mesmo local de memória. Após configurar o display, o programa entra em um loop infinito.

Captura de tela:

iceland.xex em execução no Atari800


9

FFmpeg, 339 184 bytes

ffplay -f lavfi color=d72828:100x36[r];color=white:64x32[w];color=0048e0:56x28[b];[w][b]overlay=4,split[x][y];[r][x]overlay=-32[d];[d][y]overlay=40,split[t][m];[m]vflip[n];[t][n]vstack

Vou tentar jogar isso para baixo .. ainda mais.

Imagem 100x72 da bandeira da Islândia


9

Python, 119 118 114 112 bytes

Nada de especial, direto:

b,w,r="\0H\xe0"*28,"\xff"*12,"\xd7(("*8
A,B=28*(b+w+r+w+2*b),4*(8*w+r+15*w)
print"P6 100 72 255 "+A+B+100*r+B+A

Saída como PPM binário, uso

python golf_iceland.py > iceland.ppm
  • Edit1: empurrou um byte entre printe as aspas
  • Edit2: ligeiramente mais curto como PPM binário
  • Edit3: Figurado que \0pode ser usado em vez de\x00

Se alguém souber usar diretamente o caractere ASCII não imprimível, informe-o.

Convertido em PNG


2
Parabéns! Você me venceu muito: D
Gábor Fekete 12/07

2
@ GáborFekete vencê-lo em bytes, sim. Mas sua resposta é muito mais inteligente com que compensar
Karl Napf

Por que não ter os resultados das fugas em vez das próprias fugas?
Solomon Ucko

@SolomonUcko Tentei b,w,r="\0Hà"*28,"ÿ"*12,"×(("*8usar o Python 3, mas não funciona.
1913 Karl Napf

@KarlNapf, como isso falhou? Ele desenhou incorretamente ou deu uma mensagem de erro? Também pode ser um problema de codificação.
Solomon Ucko

8

JavaScript, 267 bytes

document.write("<div style='width:250px;height:180px;background:"+[[b="bottom",44.4,d="d72828",55.6],[r="right",32,d,40],[b,38.9,e="fff",61.1],[r,28,e,44]].map(([d,a,c,o])=>`linear-gradient(to ${d+(t=",transparent ")+a}%,#${c} ${a}%,#${c} ${o}%${t+o}%)`)+",#003897'")


1
Certo, a proporção 7 - 14 das larguras esquerda e direita do azul está correta?
manatwork

1
@manatwork Opa, por algum motivo pensei 100/25 = 5, então tudo acabou 25% demais.
Neil

8

Java, 335 bytes

A função é

void w()throws Exception{int w=100,h=72;BufferedImage i=new BufferedImage(w,h,1);Graphics g=i.getGraphics();g.setColor(new Color(18656));g.fillRect(0,0,w,h);g.setColor(WHITE);g.fillRect(0,28,w,16);g.fillRect(28,0,16,h);g.setColor(new Color(14100520));g.fillRect(0,32,w,8);g.fillRect(32,0,8,h);ImageIO.write(i,"png",new File("f.png"));}

E grava a imagem desejada como f.png, com um tamanho de 100x72

(Observe que este não é um concorrente direto da resposta de R. Kap , porque grava um arquivo e não exibe a imagem na tela)

Aqui está a versão não destruída que pode ser compilada e executada:

import static java.awt.Color.WHITE;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

public class Iceland
{
    public static void main(String[] args) throws Exception
    {
        Iceland i = new Iceland();
        i.w();
    }

    void w() throws Exception
    {
        int B=0x0048e0,R=0xd72828,w=100,h=72;
        BufferedImage i=new BufferedImage(w,h,1);
        Graphics g=i.getGraphics();
        g.setColor(new Color(B));
        g.fillRect(0,0,w,h);
        g.setColor(WHITE);
        g.fillRect(0,28,w,16);
        g.fillRect(28,0,16,h);
        g.setColor(new Color(R));
        g.fillRect(0,32,w,8);
        g.fillRect(32,0,8,h);
        ImageIO.write(i,"png",new File("f.png"));
    }
}

Uma observação lateral, sobre as questões relacionadas: Talvez alguém deva criar um desafio para pintar as bandeiras dos

  • Indonésia
  • Polônia
  • Finlândia
  • França
  • Países Baixos
  • Tailândia
  • Noruega

ao mesmo tempo:

insira a descrição da imagem aqui


7

SVG + Javascript, 190 165 164 bytes

Nenhum especialista por lá, repetir um caminho apenas para alterar a cor e a largura da linha parece bobo javascript ftw!

document.write(`<svg><rect width=100 height=72 fill="#0048e0"/>${a='<path d="M0 36L100 36M36 0L36 72"style="stroke-width:'}16;stroke:#fff"/>${a}8;stroke:#d72828">`)

Mais legível:

document.write(`<svg><rect width=100 height=72 fill="#0048e0"/>
${a='<path d="M0 36L100 36M36 0L36 72"style="stroke-width:'}16;stroke:#fff"/>
${a}8;stroke:#d72828">`)

Você pode usar em path d="m0,0h100v72H0"vez do retângulo para salvar dois bytes. Da mesma forma, use M0 36H100M36 0V72para os dados do outro caminho, que salva outros cinco bytes. E você pode descartar o styleatributo em favor da declaração de ambos stroke-widthe strokecomo atributos para salvar outros cinco bytes.
Joey

7

Processando , 136 bytes

size(100,72);noStroke();background(#0048e0);fill(255);rect(28,0,16,72);rect(0,28,100,16);fill(#d72828);rect(0,32,100,8);rect(32,0,8,72);

Ungolfed

//open the window
size(100,72);
//turn off borders that surround shapes by default
noStroke();
//draw blue as the background
background(#0048e0);
//set color to white
fill(255);
//draw 2 white bars
rect(28,0,16,72);
rect(0,28,100,16);
//set color to red
fill(#d72828);
//draw 2 red bars
rect(0,32,100,8);
rect(32,0,8,72);

Resultado:

insira a descrição da imagem aqui


1
Você pode cortar mais dois bytes usando fille em rectvez de sizee background. 134 bytes:noStroke();fill(#0048e0);rect(0,0,100,72);fill(255);rect(0,28,100,16);rect(28,0,16,72);fill(#d72828);rect(0,32,100,8);rect(32,0,8,72);
GuitarPicker

Adicionando-se ao que GuitarPicker disse, fill(-1)é um byte menor do quefill(255)
Vacas quack

7

Mathematica 174 157 bytes

Sem builtins:

157 bytes

r=Rectangle;c=RGBColor;Graphics@{c[{0,72,224}/255],r[{0,0},{25,18}],White,r[{7,0},{11,18}],r[{0,7},{25,11}],c[{43,8,8}/51],r[{8,0},{10,18}],r[{0,8},{25,10}]}

insira a descrição da imagem aqui

ou alternativamente

232 bytes

x=Join[Unitize/@Range@7,{0},{2,2},{0},Unitize/@Range@14]&/@Range@7;y=Join[ConstantArray[0,8],{2,2},ConstantArray[0,15]];z=ConstantArray[2,25];ArrayPlot[Join[x,{y},{z,z},{y},x]/.{2->RGBColor[{43,8,8}/51],1->RGBColor[{0,72,224}/255]}]

insira a descrição da imagem aqui


1
de nada. o mesmo pode ser aplicado à sua segunda versão mais longa. u=Unitize;c=ConstantArrayetc ^ _ ^
Dan Oak

1
Espere, há algo para o qual o Mathematica não tem um builtin? Estou surpreso.
23416 Morgan Thrapp

@MorganThrapp Tenho certeza que costumava haver outra resposta do Mathematica usando um builtin.
Gcampbell

3
CountryData["Iceland", "Flag"]
dwa

7

JavaScript (ES6), 231 240

Código dentro do snippet abaixo. Execute-o para testar.

d=(w,h,c)=>`<div style=float:left;width:${w}em;height:${h}em;background:#${['0048e0','fff','d72828'][~~c]}>`;document.write(d(25)+(a=[252,61,94,61,476]).concat(b=[261,70,485],810,b,a).map(v=>d(v>>5,v/4&7,v&3)).join(e='</div>')+e+e)


7

Conjunto ZX Spectrum Z80, 51 bytes

https://github.com/ralphbecket/Z80/blob/master/IcelandFlag/IcelandFlag.asm

                zeusemulate "48K", "ULA+"
ZeusEmulate_PC  equ Main
ZeusEmulate_SP  equ $FF40

                org $8000

MinWhite        equ 7
MinRed          equ MinWhite + 1
TopRed          equ MinRed + 2
TopWhite        equ TopRed + 1
Height          equ TopWhite + MinWhite - 2
Width           equ TopWhite + 2 * MinWhite - 1

White           equ %01111000
Red             equ %01010000
Blue            equ %01001000

Main            ld hl, $5800 + ((Height - 1) * 32) + (Width - 1)
                ld c, Height

YLoop           ld b, Width

XLoop           ld (hl), Red
                ld de, MinRed * $100 + TopRed
                call Test
                jr c, Next

                ld (hl), White
                ld de, MinWhite * $100 + TopWhite
                call Test
                jr c, Next

                ld (hl), Blue

Next            dec hl
                djnz XLoop
                ld de, -(32 - Width)
                add hl, de
                dec c
                jr nz, YLoop
                ret

Test            equ *
TestX           ld a, b
                cp d
                jr c, TestY
                cp e
                ret c
TestY           ld a, c
                cp d
                ccf
                ret nc
                cp e
                ret

insira a descrição da imagem aqui


7

J, 86 84 83 bytes

   load'viewmat'
   (255,0 72 224,:215,2#40)viewmat _9 _9|.2(b=.[,~[,.~[,[,.])0 b 14 21$1

A abordagem é a mesma de @ Gábor Fekete's com Python.

O argumento esquerdo colorspara viewmaté uma matriz de valores RGB, no nosso caso:

255 255 255
  0  72 224
215  40  40

E o argumento certo é uma matriz de índices de colors.
(_9 _9 |. matrix)instrui a mudar matrix9 itens em cada dimensão.
Construção assustadora (border ([,~[,.~[,[,.]) matrix)envolve o matrixnúmero border.
E (14 21 $ 1)faz 14 × 21 matriz de uns.

A saída é exibida em uma janela redimensionável separada, bastante grande por padrão. insira a descrição da imagem aqui

obrigado

miles - economizou 2 bytes ao reordenar as cores, usou o recurso ,que duplica os números (255) para o acordo de forma.


1
Parece que a altura da bandeira é de 26 unidades em vez de 25.
Gábor Fekete

@ GáborFekete hm, você quis dizer altura é 19 em vez de 18? não mencionou que, só notei após o seu comentário
Dan Oak

Oh certo eu escrevi altura, mas usou os valores de largura ...
Gábor Fekete

sim, de fato. eu cometi um erro de valores. o formato da matriz inicial deve ser 14 21( 18 25 - 4 4). corrigindo ... obrigado!
Dan Oak

1
Você pode salvar 2 bytes reordenar os valores RGB(255,0 72 224,:215 40 40)viewmat _9 _9|.2(b=.[,~[,.~[,[,.])0 b 14 21$1
milhas

6

TI-BASIC (não concorrente), 323 bytes

O código foi escrito para a TI-84, 83 e variantes. Espero que não seja um problema que as dimensões variem por dispositivo e que o código não seja colorido.

Configuração:

:18→Xmax:¯18→Xmin
:10→Ymin:¯10→Ymin
:AxesOff

Desenhando:

:Line(¯15,9,¯8,9)
:Line(¯8,9,¯8,2)
:Line(¯8,2,¯15,2)
:Line(¯15,2,¯15,9)

:Line(¯15,¯9,¯8,¯9)
:Line(¯8,¯9,¯8,¯2)
:Line(¯8,¯2,¯15,¯2)
:Line(¯15,¯2,¯15,¯9)

:Line(¯4,9,10,9)
:Line(¯4,2,10,2)
:Line(¯4,9,¯4,2)
:Line(10,9,19,2)

:Line(¯4,¯9,10,¯9)
:Line(¯4,¯2,10,¯2)
:Line(¯4,¯9,¯4,¯2)
:Line(10,¯9,19,¯2)

:Line(¯15,1,¯7,1)
:Line(¯15,¯1,¯7,¯1)
:Line(¯5,1,20,1)
:Line(¯5,¯1,¯20,¯1)
:Line(¯7,¯1,¯7,¯9)
:Line(¯5,¯1,¯5,¯9)
:Line(¯7,1,¯7,9)
:Line(¯5,1,¯5,9)

Golfe:

:18→Xmax:¯18→Xmin:10→Ymin:¯10→Ymin:AxesOff:Line(¯15,9,¯8,9:Line(¯8,9,¯8,2:Line(¯8,2,¯15,2:Line(¯15,2,¯15,9:Line(¯15,¯9,¯8,¯9:Line(¯8,¯9,¯8,¯2:Line(¯8,¯2,¯15,¯2:Line(¯15,¯2,¯15,¯9:Line(¯4,9,10,9:Line(¯4,2,10,2:Line(¯4,9,¯4,2:Line(10,9,19,2:Line(¯4,¯9,10,¯9:Line(¯4,¯2,10,¯2:Line(¯4,¯9,¯4,¯2:Line(10,¯9,19,¯2:Line(¯15,1,¯7,1:Line(¯15,¯1,¯7,¯1:Line(¯5,1,20,1:Line(¯5,¯1,¯20,¯1:Line(¯7,¯1,¯7,¯9:Line(¯5,¯1,¯5,¯9:Line(¯7,1,¯7,9:Line(¯5,1,¯5,9

Sim, a falta de )é intencional.

Tamanho:

Line(e todos os comandos como esse ocupam 1 byte, cada número recebe um byte. Isso é 323 bytes.

Isso foi absolutamente entediante. Espero que isso aconteça em um emulador (eu tenho que inserir tudo manualmente), mas literalmente são apenas linhas no formato da bandeira.


1
@ Random832 Curiosamente, sim! Verifique o tamanho do token aqui: tibasicdev.wikidot.com/line Não sei ao certo qual é o byte. No entanto, eu sei que na calculadora, ele é tratado essencialmente como um caractere.
Charredgrass

1
@ Random832 O byte para Line(é 0x9C. Você pode ver uma tabela de tokens de um byte aqui: tibasicdev.wikidot.com/one-byte-tokens
f '':

1
Não foi possível representar graficamente usando regiões (usando <e >) em vez de linhas para obter sombreamento em escala de cinza?
mbomb007

7
Por que isso não é competitivo?
Mego

1
Observe que agora existe uma TI-84 colorida; portanto, você provavelmente poderá executá-la com apenas pequenas modificações.
Moshe Katz

6

C #, 384 346 317 292 291 289 bytes

Solução simples com Windows Forms e GDI

Func<int,int,Point>p=(x,y)=>new Point(x*10,y*10);var b=new Bitmap(250,180);var g=Graphics.FromImage(b);g.Clear(Color.Blue);g.DrawLines(new Pen(Color.White,40),new[]{p(0,9),p(50,9),p(9,-20),p(9,18)});g.DrawLines(new Pen(Color.Red,20),new[]{p(0,9),p(50,9),p(9,-20),p(9,18)});b.Save("b.png");

Uso

Inicie um novo projeto de console e coloque o código acima no método principal, adicione System.Drawing-Namespace.

Como funciona

O código cria uma nova imagem e desenha algumas linhas nela. Ele salva a imagem em disco. Alguns dos pontos finais das linhas estão fora da área visível.

insira a descrição da imagem aqui


Bem-vindo ao PPCG! Ótimo primeiro codegolf, mas parece que você poderia melhorá-lo. Primeiro, acho que você pode remover alguns espaços aqui e ali ( b = new=> b=new, using ()=> using(), não use espaços após ;s. Se você quiser, pode ler nossas Dicas para jogar golfe em C # para encontrar alguns conselhos.
Katenkyo

Obrigado, os espaços são removidos e também excluo a instrução using. Eu também uso variáveis ​​anônimas agora.
So13

Você precisa Process.Start(f);? Pelo que entendi, isso é semelhante a cmd start. Como você pode optar por salvar ou exibir a imagem e já a salvou, essa etapa parece inútil. Nesse caso, talvez você também possa evitar declarar a variável f.
13136 manatwork

Sim! Apenas salve agora e não abra mais ...
soema

Você deve contar os bytes para o namespace usings, bem como para uma declaração de método ou clichê do programa. Isso tudo faz parte do necessário (a tarefa oferece a opção de uma função ou um programa, mas não a escolha de apenas um monte de instruções).
Joey

6

Python IDLE, 191 172 156 bytes

IDLE é o IDE padrão do Python. A menos que tenha um tema personalizado, STDOUTseja azul, STDERRvermelho e o fundo seja branco. Então, o seguinte código:

from sys import*
x=[1]*7;y=[0]*7;z=[0,2,2,0]
f=[x+z+x*2]*4+[y+z+y*2,[2]*25]
for s in f+f[::-1]:[[stderr,stdout][-x].write(' █'[x>0]*2)for x in s];print()

Produz esta saída:

insira a descrição da imagem aqui

Como caracteres impressos e não quadrados, isso está um pouco desligado, mas se considerarmos 1 unidade com 2 caracteres e 1 caractere de altura, as proporções são exatas.

Isso pode ser jogado ao meio pela metade da dimensão da largura e usando um caractere ASCII para blocos como '#', mas não tem exatamente o mesmo efeito.


Explicação

O código em si parece bastante desleixado no momento e pode ser definitivamente jogado, mas a idéia básica é:

  • Construa uma matriz em que 0represente espaço em branco, 1represente um bloco azul e 2represente um bloco vermelho.
    • A primeira metade é construída (principalmente através de fatias / multiplicação de listas) e adicionada ao reverso de si mesma para gerar o sinalizador completo.
  • Faça um loop pela matriz, imprimindo cada valor como espaço em branco ou bloco para STDERR/ de STDOUTacordo. Imprima uma nova linha após cada linha.

6

Tartaruga Python, 176 bytes

Outra implementação do Python Turtle, mas desta vez com base no carimbo em vez de no desenho :

from turtle import*
shape("square")
c=color
c("navy")
z=shapesize
z(18,25)
s=stamp
s()
c("white")
z(4,25)
s()
bk(70)
seth(90)
s()
c("#d72828")
z(2,18)
s()
home()
z(2,25)
done()

Usar o carimbo e não torná-lo facilmente escalável, economiza cerca de 60 bytes de código.

insira a descrição da imagem aqui

A parte divertida é que você pode substituir a "square"opção de "turtle"polígono pela opção de polígono na shape()chamada e obter um logotipo ecogroovy:

insira a descrição da imagem aqui


5

Perl, 134 bytes

Nota: \x1bé realmente o caractere de escape ASCII e conta como 1 byte

($b,$w,$r)=map"\x1b[48;5;${_}m",18,15,1;print@l=("$b "x7,"$w $r  $w $b",$"x14,$/)x7,@m=("$w "x8,"$r  ","$w "x15,$/),("$r "x25,$/)x2,@m,@l

Uso

Salvar como iceland-flag.ple executar por:

perl iceland-flag.pl

Bandeira Squished

Usa seqüências de escape ANSI e assume um terminal Linux para exibir o sinalizador. Parece um pouco estranho usando as medidas fornecidas.

Perl, 141 bytes

Esta versão parece um pouco mais próxima das dimensões genuínas ...

($b,$w,$r)=map"\x1b[48;5;${_}m",18,15,1;print@l=("$b "x14,"$w  $r    $w  $b",$"x28,$/)x7,@m=("$w "x16,"$r "x4,"$w "x30,$/),("$r "x50,$/)x2,@m,@l

Bandeira menos esmagada


1
A estranheza vem do fato de os caracteres serem mais altos que sua largura.
Erik the Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ De fato, eu me perguntei se havia fontes quadradas de largura fixa, mas não imagino que ficariam particularmente boas! Eu poderia atualizar essa segunda versão para olhar ainda mais perto (não deve tomar quaisquer mais bytes do que é atualmente, mas o tempo ...)
Dom Hastings

Em um TTY, você não pode imaginar uma coisa dessas, a fonte é A FONTE! Você não pode mudar isso apenas porque não gosta.
Erik the Outgolfer

5

SpecaBAS - 150 bytes

1 a=15,b=250,c=180: FOR i=1 TO 5: READ k,x,y,w,h: RECTANGLE INK k;x,y,w,h FILL: NEXT i
2 DATA 1,0,0,b,c,a,71,0,40,c,a,0,71,b,40,2,81,0,20,c,2,0,81,b,20

Lê a cor da tinta, x, y, largura e altura e desenha um retângulo com essas coordenadas / dimensões.

insira a descrição da imagem aqui


Você precisa de espaços após cada um :? Ah, e tem 151 bytes.
Erik the Outgolfer
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.