画冰岛国旗


107

今年的UEFA Euro 2016已经结束,除了一些负面新闻外,冰岛国家足球队也带来了非常积极的惊喜。让我们画他们的国旗。

输入值

好吧,显然,这一挑战没有任何投入。

输出量

  • 以至少100 x 72像素25 x 18字符的任何适用视觉格式绘制冰岛国旗。
  • 将输出保存到文件或立即呈现-示例格式为:png,jpg等图像,矢量图形,在HTML画布上绘制,甚至使用非空格字符进行可视化。
  • 使用这些颜色蓝色#0048e0白色#ffffff红色#d72828
  • 如果你的语言不支持特定的颜色值,使用标准值,红色蓝色白色ANSI颜色代码
  • 按照正确的比例绘制标志,如下图所示:

样板

  • 您可以编写程序或函数。如果它是一个匿名函数,请举例说明如何调用它。
  • 这是因此最短答案以字节为单位。
  • 不允许出现标准漏洞。

排行榜

如果找不到答案,请按照排行榜“ 信息部分中的说明设置语言和字节数的格式。


这项挑战的灵感来自绘制法国国旗


20
更具挑战性的将是我国的国旗。威尔士今年的表现也比预期的要好得多。:-)
Gareth

24
@Gareth我期待龙的防水规格。;)
Martin Ender's

4
它看起来像上图中的蓝色比实际更暗#0048e0
路易斯Mendo

10
@MartinEnder可以在石碑上雕刻吗?那是防水的。
immibis

5
@MartinEnder Mathematica将有一个。
gcampbell '16

Answers:


259

Python 3中,190 172 171 169 167 160个 159 147 143字节

使用PIL版本1.1.7,该版本已弃用但未删除偏移方法。

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()

创建一个用红色填充的25 * 18像素图像,然后绘制一个用蓝色填充的23 * 16像素矩形,白色轮廓为一个像素。然后将图像偏移(9,9),该图像环绕在边缘,将其调整为100 * 72,然后在窗口中显示。

偏移前的标志:

enter image description here (尺寸调整为100 * 72)

输出:

enter image description here

动画:

enter image description here

编辑1:通过最初创建25 * 18图像来消除裁剪来打高尔夫球18字节。

Edit2:使用#fff代替高尔夫球1个字节white

Edit3:通过别名导入获得2个字节。

Edit4:通过删除offset方法的第二个参数获得2个字节。

Edit5:通过显示图像而不是保存图像来打7个字节。(需要在Unix上安装imagemagick)

Edit6:通过重写导入获取1个字节的数据。

Edit7:通过再次重写导入来压缩12个字节。(感谢@Dennis)

Edit8:添加了动画。

Edit9:更新了动画,因为它缺少最后一帧。

Edit10:多亏了Albert Renshaw,获得了4个字节的高尔夫球!


42
真是个好答案。
此处插入用户名,2016年

17
这是天才!(维京人)向你致敬。
Ioannes

25
哇,我很少对SO上的代码高尔夫类型的问题进行投票,但是更罕见的是我会加入一个全新的社区来这样做。这种抵消性的黑客行为使人想起了我们以前要做的事情,即年轻的胡扯抢夺者需要几百字节的内存才能使用。很棒的工作。

5
天才,真的!💡
InuYaksa

3
如果这样做from PIL.ImageDraw import*,则会I变成ImageD.Draw成为Draw,从而节省11个字节。
丹尼斯

117

用于DOS COM的x86实模式机器代码,69 65 63 62字节

Iceland flag produced

该代码旨在作为DOS COM可执行文件执行。

特别感谢

  • meden,保存了四个字节。
  • meden,保存了两个字节并消除了闪烁。

机器码(十六进制字节)

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

汇编源

来源是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
这是一个非常酷的第一答案!欢迎!
AdmBorkBork 2016年

5
您可以在10h和13h将'mov'替换为'xchg'来保存2个字节,而在16h将'test cx,cx / jz'替换为'jcxz'则可以节省2个字节
2016年

3
还有一些想法。由于程序在无限循环中运行,因此只需缩短循环即可避免闪烁_loop: jcxz _loop。如果更改cxand 的加载顺序,也可以从数据块的末尾削减2个字节di
meden

再次感谢@meden。实际上,闪烁是完全不必要的:)我还卸下了,mov bx, 320然后将320移入add di, 320(以前是add di, bx)。
玛格丽特·布鲁姆

大。现在,您已经在此挑战中的所有机器码答案上都拥有了坚定的优势。只是为了正确起见:最好向后移动jcxz _cyclexchg ax,cx以免加载超出数据末尾的字节。来源中存在一些误导性评论:;dx = rowdx在代码的任何地方都没有使用。
默登

55

C,194 191 183个字节

#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 @#define A-8 加一个
[#define C

用法

main(){f();}

输出量

image

根据OP的评论有效

双倍大小输出,204字节

#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
第5次投票触发了整个网络+810代表 ...谢谢!(是的,这是我达到200名代表的第一个网站:D)
Giacomo Garabello 2016年

1
结果不是必须是“至少100 x 72个单位,其中一个单位是像素或字符”吗?这不满足此要求,但是我怀疑OP在制定该定义时犯了一个错误。
Kritzefitz '16

4
@Kritzefitz好吧,一个字符占用很多像素,因此它可以是像素而不是字符。发现一个洞。
暴民埃里克

@GiacomoGarabello什么是at图片中的第一个站点,您获得了+150的收益?我无法识别该图标。

@LegoStormtroopr是PPCG!看看这个GitHub项目!
贾科莫·加拉贝洛

31

Excel VBA中,254个 228 153字节

由于Excel的处理方式,因此无法真正找到一种将列/行大小设置为像素(从而将它们设置为正方形)的方法,因此请先使其美观和正方形。

编辑1:用-26字节的颜色返回值替换RGB

编辑2:尝试添加尽可能多的建议,-75字节。我无法&48e0用作颜色,我不确定为什么。感谢大家

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

图片: Iceland Flag


您是如何使单元格方形的?您是手动执行此操作,还是使用其他未包含的脚本执行操作?我希望看到它,即使它不是计分程序的一部分。
mbomb007'7

我是手动完成的,更改单元格宽度的代码很容易在我可以添加的地方进行,但是行/列或监视器分辨率之间的大小不一致,除非您根据像素设置大小无法做到我能找到的。从我阅读的内容中,您必须找到分辨率并做一些数学运算以将像素转换为函数可以接受的大小。
tjb1

1
同样,将其转换为像素的代码看起来也需要您对分辨率或PPI的某些部分进行硬编码(我不太了解该公式),因此似乎也无法在所有设备上使用。
tjb1

2
而且,仅出于完整性考虑(与设置方形单元而不是解决方案本身有关),如果切换到页面布局视图,则可以将单元的高度和宽度设置为,例如0.2cm。切换回去后,该设置将保持不变,并且无需尝试计算出奇异的Excel宽高比:-)顺便说一句,如果您想使用其他更酷的Excel技巧,请查阅Joel Spolsky的“ You suck at Excel”视频。

3
我认为可以删除多余的空格,即使以后会自动添加。
暴民埃里克(Erik the Outgolfer)'16

29

MATL57 56 52 49 48字节

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

这将产生下图(经过在Matlab和Octave上运行的编译器的测试)。

enter image description here

编辑:您可以尝试在MATL Online上尝试(如果该页面最初无法正常工作,则可能需要重新加载该页面)。

这个怎么运作

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字节

*,: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

感谢@insertusernamehere,节省了1个字节。

@ user2428118,通过删除所有pxs 节省了20个字节。请注意,这要求页面以怪癖模式呈现,因此它在堆栈片段中不起作用。

我可以复制Python的方法,即以一定的偏移量包装图像,但这并不有趣。

取消高尔夫:

*, *::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 }

这使用伪元素(不是用HTML编写的元素)::before::after在标志上创建行。它不支持HTML的原因是,在HTML5中,<html>and <body>元素是可选的,因此如果不存在,浏览器会自动创建它们。

更多乐趣:


2
您仍然可以通过替换为保存1个字节white#fff
此处插入用户名,2016年

@insertusername此处是,谢谢。
gcampbell '16

1
如果以怪癖模式(没有doctype的页面)应用CSS,则可以通过省略px所有地方来将其缩减为264字节。
user2428118 2016年

@ user2428118考虑到没有HTML,因此更加有用<!doctype html>
wizzwizz4 2016年

@ user2428118由于某种原因,它在移动Safari中对我不起作用。我下次看电脑时会看看。
gcampbell '16

26

击+ ImageMagick的7,94 90 86 85个字节

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

@manatwork节省了8个字节,@ GlennRanders-Pehrson节省了1个字节


5
如果指定x:而不是输出文件名,convert则将结果显示在一个窗口中,这也是可以接受的。并且足以逃脱尖锐的技巧,无需引用:\#d72828
manatwork 2016年

2
通常我们将这样的答案标记为Bash + Imagemagick。在 bash旁边,您还可以保存4个字符:convert -size 84x56 xc:#0048e0 ${s=-splice 8x8}+28+28 -background \#d72828 $s+32+32 x:
manatwork 2016年

只是一个愚蠢的问题:你可以${s=-splice 8x8}+56吗?
暴民埃里克

@EʀɪᴋᴛʜᴇGᴏʟғᴇʀ +56被视为+56+0,而不是+28+28
bodqhrohro

2
您可以使用ImageMagick的最新版本来保存另一个字节。那么命令可以是“ magick”而不是“ convert”。
Glenn Randers-Pehrson '16

20

ZX光谱BASIC,210 141 92个字节

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

enter image description here

大小确定为通过磁带上BASIC程序的大小SAVE。许多高尔夫运动归功于Facebook上ZX Spectrum小组的某些成员,尤其是@impomatic和Johan Koelman。


看到这些PAPERBRIGHT带来了许多美好的回忆:-)
路易斯·门多

ZX Spectrum BASIC程序占用多少内存?我认为这是一种“标记化”的语言,即我所料FORNOT等占用只有1或也许各2个字节
路易斯Mendo

1
@LuisMendo是的,它是标记化的- FOR恰好是一个字节。但是,数字是“反令牌化的”,因为它们既以文本形式又以二进制形式存储,并且比您期望的多占用5个字节,因此NOT PI而不是零等。
菲利普·肯德尔

删除AT并调整边界测试,从而获得132个字节twitter.com/john_metcalf/status/752760203007791105
没用的2016年

1
122字节,并进行了进一步的优化twitter.com/john_metcalf/status/752783690179211264
不切实际的2016年

15

ZX Spectrum Z80组件,65字节

    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

Icelandic Flag


14

Minecraft 1.10.2,734个字符

可能是734个字符,但这是迄今为止唯一由实际羊毛制成的材料!

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]}]}]}]}

转到-5x -5z,粘贴到Impulse命令块中,将其设置为“ Always Active”,然后按Done。

标志范围从0、0到100、72;并且位于命令块上方3个块。它会投射出相当大的阴影,并且在其下方会生成怪物。有人猜测这对冰岛国家是否正确。

公平警告- MinecartCommandBlock为了保存四个字符,将杀死世界上的所有人。不要在您过于依恋的世界中运行它。

Flag

使用MrGarretto的命令组合器并稍微调整输出(808- > 734)


1
“这对冰岛国家是否准确...”
约旦,

2
您不能在没有目标选择器参数的情况下使用kill @e吗?它会杀死玩家,但是嘿,旗帜仍然会存在
李奎琳

11

标志,216个 188字节

使用Calormen.com的实现。对于纯粹主义者,该实现使用一些消除锯齿的抗锯齿功能。不过,我确实浪费了3个字节来隐藏乌龟,所以应该弥补它。

如果您的徽标实现允许您设置窗口的大小,则可以大大减少这种情况。然后,您可以wrap让乌龟犁开,四次划过十字架,而不必用边框修剪。

generated flag screenshot

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

我不知道Logo的英文版本!
文森特

1
绝对。我想我30多年前在Apple IIe上首次看到它。我的TRS-80彩色计算机上也有它。在我正式在学校学习它之前的几年,这是我第一次在几何学中使用角度。
GuitarPicker

为什么周围有白色边框?
所罗门·乌科2016年

1
我用大笔画了线条,在十字架的尖端留下了圆角,所以我不得不用一个大的橡皮擦在它周围扫平。我正在编写此版本的另一个版本,该版本在Logo中使用了完全不同的方法,结果变小了。我还正在研究第三个版本,该版本可以打印一个大的Unicode拉丁十字并进行绘制,但是比例不正确,尺寸看起来可能会超过这个尺寸。
GuitarPicker

10

Java的8,449个 447字节:

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);}}

很显然,这是一个很晚的答案,也是这里最长的答案。使用java.awt.Graphics该类创建并打开一个带有标志的窗口,该窗口由5个矩形组成,其中1个用于蓝色块,2个用于白色条纹,2个用于红色条纹。使用7像素:1单位比例。换句话说,对于每个单元,使用7个像素。这是带有OS X 10.11的Macintosh上的输出图像:

Example Output

现在找到一种打高尔夫球的方法...


尝试覆盖paint而不是paintComponent。考虑为JPanel使用匿名类。考虑只使用BufferedImage并输出到文件。
贾斯汀

@Justin实际上,我已经在使用Blue1个大矩形作为背景了。我只是在这个和我用Python制作的另一个版本之间混为一谈。无论如何,感谢其他提示!:)
R. Kap

其他一些建议:不要使用JPanel,只需覆盖即可JFrame。如果执行此操作并仅覆盖paint,则不需要Swing,仅需要AWT,因此将更JFrame改为Frame并删除导入。不要打电话super.paint。重新排列主要方法;将移到我们setSizepaint方法中Frame,删除变量J,然后追加.setVisible(true)到匿名类的末尾。最后,将其更改.setVisible(true)show(),是的,这是不推荐使用的方法,但是它更短。使用从主要方法中interface删除public
贾斯汀

最终结果为338个字符(由于它是框架,因此还必须更改高度):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();}}
贾斯汀

1
更好的是:不要绘制第一个矩形,只需调用即可setBackground(color)(尺寸仍然不正确)。现在在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();}}
贾斯汀

10

R,197个 195 187字节

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()

缩进,带有新的行和说明:

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()

Island flag

编辑:结果是frame(),与默认情况相反plot()plot.new()默认情况下不添加边框,这bty="n"在这里是不必要的。


9

Atari 8位可执行文件,123字节

另一个“只是为了好玩”条目,该程序旨在在Atari 8位计算机或仿真器上运行。例如,要在Atari800上加载程序,只需运行:

atari800 iceland.xex

机器码(十六进制字节)

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

汇编程序源代码(可以使用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

这个怎么运作:

该程序使用基于ANTIC Mode 8(每行40像素,2 bpp)的自定义显示列表。重复的行从相同的存储位置加载。设置显示后,程序进入无限循环。

屏幕截图:

iceland.xex running on Atari800


9

FFmpeg,339 184个字节

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

会尝试把它打下去..进一步。

100x72 image of Iceland flag


9

Python,第119 118 114 112字节

没什么特别的,简单的:

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

输出为二进制PPM,用法

python golf_iceland.py > iceland.ppm
  • Edit1:推之间一个字节 print和引号
  • Edit2:略短于二进制PPM
  • Edit3:想通了\0可以代替\x00

如果有人知道如何直接使用不可打印的ASCII字符,请告知。

Converted to PNG


2
恭喜你!d:你受了不少打我
的Gabor菲克特

2
@GáborFekete以字节为单位击败您,是的。但是您的回答要比这个偏移量更聪明
Karl Napf

为什么没有转义的结果而不是转义本身?
所罗门·乌科2016年

我尝试b,w,r="\0Hà"*28,"ÿ"*12,"×(("*8并使用Python 3的@SolomonUcko ,但是它不起作用。
Karl Napf

@KarlNapf,它怎么失败了?它绘制不正确还是给出错误消息?这也可能是编码问题。
Solomon Ucko '16

8

JavaScript,267字节

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
确定左右蓝色宽度的7-14比率正确吗?
manatwork 2016年

1
@manatwork糟糕,出于某种原因,我认为100/25 = 5,所以一切最终都变得太宽了25%。
尼尔,2016年

8

Java,335字节

该功能是

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"));}

然后将所需的图像写为f.png,尺寸为100x72

(请注意,这不是该产品的直接竞争对手 R. Kap Answer,因为它会写入文件,并且不会在屏幕上显示图像)

这是可以编译和运行的非公开版本:

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"));
    }
}

关于相关问题的旁注:也许应该挑战一下,以标出

  • 印度尼西亚
  • 波兰
  • 芬兰
  • 法国
  • 荷兰
  • 泰国
  • 挪威

与此同时:

在此处输入图片说明


7

SVG +的Javascript,190个 165 164字节

那里没有专家,重复一条路径只是为了更改颜色和线宽,看起来真是太傻了

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">`)

更具可读性:

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">`)

您可以使用path d="m0,0h100v72H0"而不是矩形来保存两个字节。同样,M0 36H100M36 0V72用于其他路径的数据,这将节省另外五个字节。您可以删除该style属性,以便同时声明stroke-widthstroke作为属性来保存另外五个字节。
乔伊,

7

处理,136字节

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);

不打高尔夫球

//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);

输出:

在此处输入图片说明


1
您可以使用fillrect代替size和剃除另外两个字节background。134个字节: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

加上GuitarPicker所说的内容,fill(-1)它比fill(255)
牛嘎嘎

7

Mathematica 174157字节

没有内置函数:

157个字节

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}]}

在此处输入图片说明

或者

232字节

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]}]

在此处输入图片说明


1
别客气。同样可以应用于第二个更长的版本。u=Unitize;c=ConstantArray等等^ _ ^
Dan Oak

1
等一下,Mathematica有没有内置的功能?我很惊讶。
Morgan Thrapp '16

@MorganThrapp我敢肯定,过去曾经有一个内置的Mathematica答案。
gcampbell '16

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

7

JavaScript(ES6),231 240

下面的代码段中的代码。运行它进行测试。

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

ZX Spectrum Z80组件,51字节

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

在此处输入图片说明


7

J,86 84 83字节

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

该方法与使用Python的@GáborFekete相同。

左侧参数colorsviewmat是RGB值的数组,在我们的例子:

255 255 255
  0  72 224
215  40  40

正确的论点是的索引矩阵colors
(_9 _9 |. matrix)指示matrix在每个维度上移动9个项目。
可怕的建筑(border ([,~[,.~[,[,.]) matrix)包裹matrix着数字border
(14 21 $ 1)制作一个14×21的矩阵。

输出显示在单独的可调整大小的窗口中,默认情况下很大。 在此处输入图片说明

谢谢

英里-通过重新排列颜色节省了2个字节,并使用了,复制形状协议中的数字(255)的功能。


1
看起来旗帜的高度是26个单位,而不是25个。
GáborFekete

@GáborFeketehm,您是说身高是19而不是18?没提到,只是在您发表评论后才注意到
Dan Oak

哦,对了我写的高度,但使用的宽度值...
的Gabor菲克特

是的,的确如此。我在价值观上犯了一个错误。初始矩阵的形状应为14 2118 25 - 4 4)。纠正...谢谢!
Dan Oak

1
您可以保存2个字节来重新排序rgb值(255,0 72 224,:215 40 40)viewmat _9 _9|.2(b=.[,~[,.~[,[,.])0 b 14 21$1
英里

6

TI-BASIC(非竞争),323字节

为TI-84、83及其变体编写了代码。我肯定希望尺寸不会因设备而异,并且代码未着色也不会成为问题。

设定:

: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)

打高尔夫球:

: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

是的,缺乏)是故意的。

尺寸:

Line(所有类似的命令占用一个字节,每个数字占用一个字节。那是323个字节。

那绝对是乏味的。我希望能在模拟器上得到它(我必须手动输入所有内容),但实际上它只是标志形状的线条。


1
@ Random832奇怪的是,是的!在此处检查令牌的大小:tibasicdev.wikidot.com/line我不确定字节的确切位置。但是我确实知道在计算器上,它实际上被视为一个字符。
charredgrass 2016年

1
@ Random832的字节为Line(0x9C。你可以在这里看到的一个字节的令牌表:tibasicdev.wikidot.com/one-byte-tokens
F“”

1
您不能使用区域(使用<>)而不是线条来绘制图形以获得灰度阴影吗?
mbomb007'7

7
为什么这种不竞争?
Mego

1
请注意,现在有了颜色TI-84,因此您可能只需稍作修改即可在该颜色上运行它。
Moshe Katz

6

C#, 384 346 317 292 291 289字节

Windows窗体和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");

用法

启动一个新的控制台项目,并将上面的代码放入主方法中,添加System.Drawing-Namespace。

这个怎么运作

该代码创建一个新图像并在其上绘制一些线。它将图像保存到磁盘。线的某些端点在可见区域之外。

在此处输入图片说明


欢迎来到PPCG!很棒的第一个代码高尔夫,但是看起来您可以改进它。首先,我认为你可以在这里删除了一些空间,有(b = new=> b=newusing ()=> using(),后不使用空格;■如果你愿意,你可以阅读我们的。提示在C#高尔夫找到一些建议。
Katenkyo

谢谢,空格已删除,我也删除了using语句。我现在也使用匿名变量。
soema

确定要Process.Start(f);吗?据我了解,这类似于cmd start。由于您可以选择保存或显示图像并且已经保存了图像,因此这一步骤似乎毫无意义。在这种情况下,您也可以避免声明变量f。
manatwork 2016年

是! 立即保存,无需再开放...
soema 2016年

您应该为命名空间using以及方法声明或程序模板计算字节数。这就是所需要的全部内容(任务使您可以选择函数或程序,而不仅仅是选择一堆语句)。
乔伊,

6

Python IDLE,191 172 156字节

IDLE是Python的标准IDE。除非具有自定义主题,否则它STDOUT是蓝色,STDERR红色,背景是白色。因此,以下代码:

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()

产生以下输出:

在此处输入图片说明

由于打印的字符不是正方形,因此略有偏离,但是如果我们将1个单位宽为2个字符,高为1个字符,则比例是准确的。

可以通过将宽度尺寸减半并将其使用ASCII字符作为块来打高尔夫球,例如'#',但效果并不完全相同。


说明

此刻的代码本身似乎还很草率,可以肯定可以使用,但是基本思想是:

  • 构造一个矩阵,其中0代表空白,1代表一个蓝色块,2代表一个红色块。
    • 构造前半部分(主要通过列表切片/乘法),并将其添加到自身的相反部分以生成完整标志。
  • 通过矩阵回路,打印每个值作为任一空白或块STDERR/ STDOUT相应。在每行之后打印换行符。

6

Python Turtle,176个字节

另一个Python Turtle实现,但是这次基于冲压而不是绘图

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()

使用印记并没有使其易于扩展,可以节省大约60个字节的代码。

在此处输入图片说明

有趣的是,您可以在通话"square"中用"turtle"多边形选项替换多边形选项,shape()并获得一个ecogroovy徽标:

在此处输入图片说明


5

Perl,134个字节

注意:\x1b实际上是ASCII转义字符,计为1个字节

($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

用法

另存为iceland-flag.pl并通过以下方式运行:

perl iceland-flag.pl

压扁的旗帜

使用ANSI转义序列,并假定Linux终端显示该标志。使用提供的测量值看起来有点怪异。

Perl,141个字节

这个版本看起来更接近真实尺寸...

($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

压扁国旗


1
怪异来自于字符比宽度高的事实。
暴民埃里克

@EʀɪᴋᴛʜᴇGᴏʟғᴇʀ确实,我确实想知道是否存在方形的固定宽度字体,但是我不认为它们看起来会特别好!我可能会更新第二个版本,以使其看起来更接近(它不应该占用比当前更多的字节,而是时间...)
Dom Hastings 2016年

在TTY上,您不会感到奇怪,字体是THE FONT!您不能仅仅因为不喜欢它而改变它。
暴民埃里克(Erik the Outgolfer)'16年

5

SpecaBAS-150字节

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

读取墨水颜色,x,y,宽度和高度,并绘制具有这些坐标/尺寸的矩形。

在此处输入图片说明


每次之后需要空格:吗?哦,它是151个字节。
暴民埃里克(Erik the Outgolfer)'16年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.