画瑞士国旗


46

任务:输出瑞士国旗。

瑞士国庆节快乐/ Schweizer Bundesfeiertag /瑞士国庆日/ Fes nazionale svizzera / Fiasta naziunala svizra!

详细信息: 标记由#FFFFFF红色(#FF0000)背景上的白色()叉组成。十字架由一个6x6的正方形组成,每个侧面粘贴有尺寸为6x7的手臂。十字在32x32正方形背景的中心,每边相距6个单位。(来源

参与者可以选择输出大小,但是图像必须与这些比例完全匹配,这意味着其大小必须是32的倍数。

最低版本如下所示:


1
在某些版本的标志挑战赛中,允许使用彩色ASCII输出,但您尚未包括ascii-art。只是为了确认,不允许ASCII输出?
斯蒂芬,

1
正确,只允许在屏幕上输出众所周知的图像格式。
瑕疵的

20
echo 🇨🇭-我认为这是不允许的
Digital Trauma

我看到一个蓝色的CH,我不明白为什么要允许这样做。
瑕疵的

1
@Tutleman我认为确实如此
Luis

Answers:


40

SVG(HTML5),94 83 82 64字节

<svg><path d=M0,0V32H32V0M6,13h7V6h6v7h7v6H19v6H13V19H6 fill=red

由于@ThePirateBay,节省了2个字节。感谢@ATaco,节省了1个字节。由于@CraigAyre指出可以接受32×32的图像,因此节省了18个字节。正如@Shaggy所指出的那样,这假定您的默认背景是白色。为在任何背景下均可使用的标志添加22个字节:

<svg><path d=M0,0V32H32V0 fill=red /><path d=M6,13h7V6h6v7h7v6H19v6H13V19H6 fill=#FFF


无需关闭路径。您可以通过保留路径打开来节省4个字节。

正如ThePirateBay所说,>您的path标签中的右边是可选的。
ATaco

6
SVG有自己的“高尔夫语言”吗?Oo
ETHproductions '17

16
习惯于编写XML语法,这段代码使我
大失所望

3
您可以删除viewBox最低版本吗?<svg><path d=M0,0V32H32V0M6,13h7V6h6v7h7v6H19v6H13V19H6 fill=red
Craig Ayre

31

x86-16 DOS的机器代码,43字节

               ; Draw 32x32 red square
B8 0C 28          mov  ax, 0x0C28   ; AL == color red, AH == set pixel function
B9 00 1F          mov  cx, 31
               DrawBox:
BA 00 1F          mov  dx, 31
               DrawRow:
CD 10             int  0x10
4A                dec  dx
75 FB             jnz  DrawRow
E2 F6             loop DrawBox

               ; Draw the interior white cross
B0 0F             mov  al, 0x0F    ; high byte already set
B1 06             mov  cl, 6       ; high byte already 0
               DrawCross:
B2 0D             mov  dl, 13      ; high byte already 0
               DrawCrossInner:
CD 10             int  0x10        ; plot CX, DX
87 D1             xchg dx, cx
CD 10             int  0x10        ; plot DX, CX
87 D1             xchg dx, cx
42                inc  dx
80 FA 12          cmp  dl, 13+6
75 F2             jne  DrawCrossInner
41                inc  cx
80 F9 19          cmp  cl, 6+(32-6-6)
75 EA             jne  DrawCross

C3                ret

上面的代码旨在组装成COM文件,然后在DOS下运行。它调用ROM BIOS视频服务来绘制标志的各个像素,从而在屏幕的左上角形成Swiss标志的32×32表示形式。

该代码假定视频模式已设置为模式0x13,这也意味着它需要VGA显示。可以使用其他视频模式,但要求VGA可以为您提供两件事:(1)正方形像素,和(2)包含真实100%红色(0xFF0000)的默认调色板(这意味着您不必浪费字节来更改调色板颜色)。因此,在运行该程序之前,您将需要将显示切换为模式0x13。下面的代码就是您要做的所有事情:

mov  ax, 0x13
int  0x10

该代码没有其他假设,并且应在DOS兼容操作系统下的任何x86兼容硬件上运行。

但是,该程序在绘制标记后立即终止,因此通常会在屏幕的左上角重新打印DOS提示符,并覆盖标记的前几行。因此,如果您想惊叹于真正的输出,则需要在系统启动之前挂起/暂停系统RET。这是在FreeDOS虚拟机中运行的屏幕截图:

通过直接将像素数据写入视频缓冲区,有可能进一步降低难度,尤其是因为我已经假设模式为0x13。我还没有尝试过。INT 0x10这已经是很短的指令了,但是如果我可以使用一个字节的字符串指令将像素数据直接写入内存,那么可以节省大量代码。


令人印象深刻!我没有看到很多asm,但是当我这样做时,它总是非常有趣
Adrian Zhang

很高兴见到ASM的粉丝。
Billal Begueradj

您可以通过在所有行上迭代三个32像素宽的图块来完成此操作。它使用更多的数据,但节省了操作数。另外,您可以在左侧使用三个16像素宽的图块,并通过反转左侧来执行对称操作。
ATL_DEV

21

MATL,29个字节

2Y66t&Y"OJQht3$)6thYaQK7hBoYG

MATL在线上尝试一下

说明

2Y6     % Push predefined literal: 3×3 matrix [0 1 0; 1 1 1; 0 1 0]
6t&Y"   % Repeat each entry 6 times in the two dimensions. Gives an 18×18 matrix
OJQh    % Push [0 1j+1]. Used as an index, this means [0 1 ... end+1]. Indexing
        % is 1-based and modular, so 0 is the same as end
t3$)    % Apply that index in the two dimensions. This extends by 1 entry in 
        % each dimension, so that the arms have length 7. Gives a 20×20 matrix
6thYa   % Pad with 6 zeros in the two dimensions. Gives a 32×32 matrix
Q       % Add 1. The matrix now contains values 1 (will become red) and 2 (white)
K7hBo   % Convert array [4 7] to binary. Gives [1 0 0; 1 1 1], to be used as
        % colormap. First row is red, second is white
YG      % Show image using colormap

17

Java 8,246 + 42 = 288字节

感谢@Aaron提供-64字节。
通过输出到a不带扩展名的文件来获得-4字节。

import java.awt.*;import java.awt.image.*;
x->{BufferedImage i=new BufferedImage(32,32,1);Graphics g=i.getGraphics();g.setColor(Color.RED);g.fillRect(0,0,32,32);g.setColor(Color.WHITE);g.fillRect(13,6,6,20);g.fillRect(6,13,20,6);javax.imageio.ImageIO.write(i,"png",new java.io.File("a"));}

可以分配给引发异常的功能接口方法的lamba表达式。a在运行该文件的目录中创建一个名为(图像文件)的图像文件。

用于运行它的周围代码:在线尝试!

不打高尔夫球

x->{
    BufferedImage i=new BufferedImage(32,32,1);
    Graphics g=i.getGraphics();
    g.setColor(Color.RED);
    g.fillRect(0,0,32,32);
    g.setColor(Color.WHITE);
    g.fillRect(13,6,6,20);
    g.fillRect(6,13,20,6);
    javax.imageio.ImageIO.write(i,"png",new java.io.File("a"));
}

结果

IntelliJ IDEA图像预览提供的网格(显然)。


通过将fillPolygon通话更改为两个fillRect通话,可以节省很多字节。我不确定我是否尊重尺寸,但是我想出了g.fillRect(7,13,18,6);g.fillRect(13,7,6,18)缩短64个字节的方式
Aaron

@Aaron好的电话,由于某种原因,我认为那会更长...谢谢!
贾斯汀·马里纳

您可以命名文件.png而不是a.png并保存一个字节。
user2428118

@ user2428118很好,是否可以将其更进一步而仅命名它a,而无需扩展名?它仍然可以打开,只需要告诉它在照片查看器中打开即可。
贾斯汀·马里纳

1
@OlivierGrégoire我觉得这与我的解决方案的想法相去甚远,但是您可以将其发布为自己的内容
Justin Mariner

16

Excel VBA,86 85 79字节

匿名VBE即时窗口函数,它没有输入和瑞士标志输出到所述范围[A1:F32]的的ActiveSheet对象。首先,使单元格变为正方形,然后绘制红色区域,最后绘制白色十字形。

Cells.RowHeight=48:[A1:AF32].Interior.Color=255:[G14:Z19,N7:S26].Interior.Color=-1

请注意,取消放置红色背景后给瑞士国旗的“十字”着色的步骤的安排实际上比上述配置更长,因为它们需要至少16个单元格地址,这些地址必须与瑞士法郎的8个不同区域协调旗

-1字节感谢@Greedo的RowHeight=48结束ColumnWidth=2

-6字节感谢@ Greedo对-1代替rgbWhite

输出量

在此处输入图片说明


1
太棒了 但是您仍然可以保存6个字节,Interior.Color=-1而不是Interior.Color=rgbWhite
Greedo

@Greedo,呵呵,你知道什么-太好了。为了清楚起见,我使用rgbWhite了其十进制值16777215,但我不知道-1会产生相同的效果。谢谢!
泰勒·斯科特

1
根据此链接:(reddit.com/r/compsci/comments/62x9g9/…)PowerPoint已完成图灵化,所以我想知道如何将其移植到PowerPoint
Suhrid Mulay

13

C ++,SFML,406个 399 394字节

-2字节归功于pdpi--
10字节归功于Zacharý

SFML(简易快速多媒体库)是为简化视频游戏和多媒体程序的开发而编写的C ++库

编码 :

#include<SFML\Graphics.hpp>
using namespace sf;int main(){for(RenderWindow t(VideoMode(128,128),"");t.isOpen();){t.clear();RectangleShape r({128.f,128.f});r.setFillColor(Color::Red);t.draw(r);r.setFillColor(Color::White);r.setPosition({24.f,52.f});r.setSize({80.f,24.f});t.draw(r);r.rotate(90);r.setPosition({76.f,24.f});t.draw(r);t.display();for(Event e;t.pollEvent(e);)if(!e.type)t.close();}}

该标志将显示在128x128窗口中。您的操作系统必须能够显示128x128的窗口(我的Win8.1不能以较小的宽度显示)

警告:您可能需要添加这两行代码:t.setFramerateLimit(60);t.setVerticalSyncEnabled(true);,因此运行代码时,CPU不会发热。由于打高尔夫球,我没有将它们放在原始代码中。


您可以通过用fors代替int main(){for(sf::RenderWindow t(sf::VideoMode(128,128),"");t.isOpen();){t.clear();sf::RectangleShape r({128.f,128.f});r.setFillColor(sf::Color::Red);t.draw(r);r.setFillColor(sf::Color::White);r.setPosition({24.f,52.f});r.setSize({80.f,24.f});t.draw(r);r.rotate(90);r.setPosition({76.f,24.f });t.draw(r);t.display();for(sf::Event e;t.pollEvent(e);)if(e.type == 0)t.close();}}
while

另外,您可以通过删除空格来节省两个字节:e.type == 0=> e.type==0,甚至可以!e.type(不记得优先级)。24.f }=>24.f}
扎卡里

哦,using namespace sf;可以吗?
扎卡里

12

Braindraw,227字节(无竞争)(已更新为实际可用)

非高尔夫版本(241字节)

r<<^++++++++[-^++++v]^[->>[>]>++++++++[-<++++>]<[<]<]>>[[-vv[v]-[^]^]>]vv<[<]>>>>>>>>>>>>>>vvvvvvg<<^^++++++[->>[>]>+++++[-<++++>]<[<]<]>>[[-vv[v]b-g-[^]^]>]<vv[<]><<<<<<<vvvvvvv<<^^++++++[-vv[v]++++++++++++++[^]^]vv[[->>[>]b[+]-g[+]-[<]<]v]

轻度高尔夫版本(227字节)

r<<^++++++++[-^++++v]^[->>[>]>++++++++[-<++++>]<[<]<]>>[[-vv[v]-[^]^]>]vv<[<]g>>>>>>>>>>>>vvvv++++++[->>[>]>+++++[-<++++>]<[<]<]>>[[-vv[v]b-g-[^]^]>]<vv[<]<<<<<<vvvvv<<++++++[-vv[v]++++++++++++++[^]^]vv[[->>[>]b[+]-g[+]-[<]<]v]

Braindraw是我自己设计的一种编程语言。从今天下午3:08开始,我确实有一个正常的解释器,并检查了程序是否正常运行。但是,在这场比赛开始之前,口译员并不存在,所以我没有参加比赛。

Braindraw与Brainf ***相同,除了它在三个二维数组而不是一个一维数组上运行。这些阵列称为r,g和b,并充当红色绿色和蓝色通道。操作员r将指针移至红色通道,依此类推。上移为^,下移为v。


9
期待见到翻译,这很有趣,可以尝试一下
Darren H

1
这肯定是一个有趣的主意,我也很期待翻译!(从技术上讲,我们只允许使用已实现的语言,并且我们将解释器视为其定义。)
更加虚假的

您不显式输出任何内容,而只是最后输出整个“画布”,是否正确?您是否认为画布是无限的?
瑕疵

在re:没有解释器中,我想这意味着我的参赛作品没有竞争。那好吧。但是,是的,该程序本身没有输出,在程序运行时和运行后都会显示计算空间。从理论上讲,画布是无限的,但是在实现中,我可能只会将其设置为一些较大的固定宽度,例如512x512

这种语言似乎能够应对kolmogorov复杂性图像挑战。并且您当前正在从事口译工作吗?
扎卡里

10

TI-BASIC(仅TI-84 Plus C(S)E),58 字节

:For(A,0,31
:For(B,0,31
:Pxl-On(A,B,RED
:End
:End
:For(A,6,25
:For(B,13,18
:Pxl-Off(A,B
:Pxl-Off(B,A
:End
:End

这是一个了不起的答案。我刚刚开设了一个帐户以对其进行投票。TI-BASIC很棒
Zags

1
哦,Pxl-On现在有一个豪华的第三参数了...它让我只哭过单色:(
Ray

10

Mathematica,83个字节

R=Rectangle;Graphics[{Red,{0,0}~R~{32,32},White,{6,13}~R~{26,19},{13,6}~R~{19,26}}]

下一个来自@ ASCII-only(我以为这是个玩笑,但它有效!)

Mathematica,23个字节

"CH"~CountryData~"Flag"

@Jonathan Frech的-10个字节


4
Mathematica没有内置瑞士国旗吗?
CJ丹尼斯

4
CountryData["Switzerland","Flag"]但它可能没有正确的比例
ASCII-仅

6
Mathematica具有所有功能的内置功能,但这吗?
sergiol

10
"Switzerland"~CountryData~"Flag"为您节省更多
Simmons

1
"CH"~CountryData~"Flag"仅占用23个字节。
乔纳森·弗雷希

9

HTML + CSS,15 + 117字节= 132字节

将Flexbox包装器与一起使用inset box-shadow

b{display:flex;box-shadow:red 0 0 0 6px inset;padding:2px;width:28px;flex-wrap:wrap}a{border:solid red 4px;margin:3px
<b><a><a><a><a>


HTML + CSS,18 + 139 137 122字节= 140个字节

先前的答案使用border和一个带有负数的中间flexbox包装器margin

i,b,a{display:inline-flex}i{border:solid red 6px}b{margin:-4px;width:28px;flex-wrap:wrap}a{border:solid red 4px;margin:3px
<i><b><a><a><a><a>


7

GraphicsMagick(?),96个字节

gm convert -size 32x32 xc:red -fill #fff -draw "rectangle 13,6 18,25 rectangle 6,13 25,18" 1.bmp

不确定如何与GM打高尔夫球(应该将其视为一种语言吗?)。也不确定如何在这里计数字节...

安装GM后,在Windows cmd中键入给定的代码,您将获得名称为image的图像1.bmp。如果您使用的是bash,则可能需要将双引号更改为单引号(它应该起作用,但是我没有对此进行测试)。

感谢数字创伤。仅使用一个-draw保存8个字节


不知道在GraphicsMagick中是否相同,但是可以使用ImageMagick将两个矩形放在相同的-draw字符串中:convert -size 32x32 xc:red -fill white -draw "rectangle 13,6 18,25 rectangle 6,13 25,18" i.png
Digital Trauma

@DigitalTrauma是一样的。编辑。
tsh

7

JavaScript + HTML,99 + 13 = 112字节

感谢user2428118
保存了2个字节感谢Matheus Avellar保存了2个字节

JSFiddle

with(c.getContext`2d`)fillStyle='red',fillRect(0,0,32,32),clearRect(6,13,20,6),clearRect(13,6,6,20)
<canvas id=c>


纯JavaScript,194129字节

JSFiddle

with(document.write`<canvas id=c>`,c.getContext`2d`)fillStyle='red',fillRect(0,0,32,32),clearRect(6,13,20,6),clearRect(13,6,6,20)


2
我相信您必须从头开始。
斯蒂芬,

@StepHen。好的,我也添加了它。

1
...您需要将其包括在字节数中
ASCII码,仅ASCII,

仅限@ASCII。包括在内。

1
为了将来参考,<canvas>您可以在需要时直接添加HTML。参见codegolf.stackexchange.com/a/136972/47097
darrylyeo

6

HTML4(?)中的JavaScript(ES6), 178 176字节

document.write('<table cellspacing=0>'+[...Array(32)].map((_,y,p)=>p.map((_,x)=>`<td bgcolor=${x>5&&x<26&&y>12&&y<19||y>5&&y<26&&x>12&&x<19?'#fff':'red'}>`).join``).join`<tr>`)

是! 我们不需要<canvas><svg>甚至不需要<img>

感谢Justin Mariner,节省了2个字节。


5

Löve2D139个 138字节

l=love g=l.graphics c=g.setColor r=g.rectangle f="fill"w=255 l.draw=loadstring"c(w,0,0)r(f,0,0,32,32)c(w,w,w)r(f,13,6,6,20)r(f,6,13,20,6)"

多亏了ThePirateBay,节省了一个字节

不打高尔夫球

function love.draw()
    love.graphics.setColor(255,0,0)
    love.graphics.rectangle("fill",0,0,32,32)
    love.graphics.setColor(255,255,255)
    love.graphics.rectangle("fill",13,6,6,20)
    love.graphics.rectangle("fill",6,13,20,6)
end

5

Python 3,190个字节

将输出另存为,image.xpm然后使用您喜欢的文本编辑器打开。

r=range;print('! XPM2\n32 32 2 1\nr c #FF0000\nw c #FFFFFF\n');d=[bytearray(b'r'*32)for _ in r(32)]
for i in r(20):
 for j in r(6):d[i+6][j+13]=d[j+13][i+6]=119
print(b'\n'.join(d).decode())

在线尝试!

输出:

! XPM2
32 32 2 1
r c #FF0000
w c #FFFFFF

rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrwwwwwwrrrrrrrrrrrrr
rrrrrrrrrrrrrwwwwwwrrrrrrrrrrrrr
rrrrrrrrrrrrrwwwwwwrrrrrrrrrrrrr
rrrrrrrrrrrrrwwwwwwrrrrrrrrrrrrr
rrrrrrrrrrrrrwwwwwwrrrrrrrrrrrrr
rrrrrrrrrrrrrwwwwwwrrrrrrrrrrrrr
rrrrrrrrrrrrrwwwwwwrrrrrrrrrrrrr
rrrrrrwwwwwwwwwwwwwwwwwwwwrrrrrr
rrrrrrwwwwwwwwwwwwwwwwwwwwrrrrrr
rrrrrrwwwwwwwwwwwwwwwwwwwwrrrrrr
rrrrrrwwwwwwwwwwwwwwwwwwwwrrrrrr
rrrrrrwwwwwwwwwwwwwwwwwwwwrrrrrr
rrrrrrwwwwwwwwwwwwwwwwwwwwrrrrrr
rrrrrrrrrrrrrwwwwwwrrrrrrrrrrrrr
rrrrrrrrrrrrrwwwwwwrrrrrrrrrrrrr
rrrrrrrrrrrrrwwwwwwrrrrrrrrrrrrr
rrrrrrrrrrrrrwwwwwwrrrrrrrrrrrrr
rrrrrrrrrrrrrwwwwwwrrrrrrrrrrrrr
rrrrrrrrrrrrrwwwwwwrrrrrrrrrrrrr
rrrrrrrrrrrrrwwwwwwrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr

我必须删除空的第5行才能在Linux上使用gimp打开它。
蒂姆(Tim)

5

Perl 5,184个字节

176字节代码+ 8 for -Mutf8 -p

我不完全确定这是否符合要求,它依赖于此meta post提供的空输入,该输入在TIO上不起作用,因此提供了新行(未使用)。输出到终端,看起来像这样:

在此处输入图片说明

比例应基于一个字符空间为两个垂直“像素”的比例进行缩放。

%a=qw(R 101 W 107 A 101;97 B 91;107);$_=R.($a="32 
"x3).($b="13 W6 R13 
"x3)."6 A7▄W6 A7▄"."R6 
6 W20 "x2 ."R6 
6 B7▄W6 B7▄R6 
$b$a";s/\d+(.)/$1x$&/ge;s/\pL/[$a{$&}m/g

在线尝试!

您可以通过从TIO复制并粘贴到此处来预览输出(将鼠标悬停在元素上时会显示控制字符)


5

GFA BASIC(Atari ST),62个字节

.LST格式的手动编辑列表。所有行都以结束CR,包括最后一行。

DEFFILL2
PBOX0,0,31,31
DEFFILL0
PBOX13,6,18,25
PBOX6,13,25,18

展开并评论:

DEFFILL 2         ! set fill color: default system color #2 is red (&H700)
PBOX 0,0,31,31    ! draw the red square
DEFFILL 0         ! set fill color: default system color #0 is white (&H777)
PBOX 13,6,18,25   ! draw a vertical white rectangle
PBOX 6,13,25,18   ! draw a horizontal white rectangle

输出量

输出为32x32。

GFA输出

注意:尽管在模拟器上(以及在真实物体上,除非您将亮度调得很高),它的确是灰色,尽管它确实是“白色”颜色。


5

R,171140字节。

x = rep(c(6,13,19,26,19,13),e=2)
l=c(0,32)
par(bg="red",mar=0*1:4)
plot(0,0,'n',l,l,xaxs="i",yaxs="i")
polygon(x,c(x,x)[4:15],c="white",b=0)

(有点)不满意:

x <- rep(c(6,13,19,26,19,13),each=2)
y <- c(x,x)[4:15] # index by 3 positions
par(bg="red",mar=c(0,0,0,0)) # prepare the plot space
plot(0,type='n', xaxs="i",yaxs="i",xlim=c(0,32),ylim=c(0,32))
polygon(x,y,col="white",border=0)

感谢@gregor节省了一些字节

运行!


1
欢迎光临本站!:)
DJMcMayhem

真好!您可以保存参数名的部分匹配不少字节:e=2不是each=2t不是typeccolbborder。并且0*1:4比短c(0,0,0,0)
格雷戈尔

实际上,您可以在plot:上进行位置匹配plot(0,0,'n',l,l,xaxs="i",yaxs="i")(分配m="i"实际上花了您一个字节)。所有这些都减少到141个字节。
格雷戈尔

我完全忘记了部分匹配。谢谢!
亚历克斯·阿克斯泰姆

再加上两个字节:l和不需要xlim/ 。我还调整了您的方法,使用代替,将其降低到117 。ylimplot(0:32,0:32,...)rectpolygon
Gregor

5

八度,105字节 73字节

注意:为清楚起见,添加了换行符,但不包括在字节数中

x(32,32,3)=0;
x(:,:,1)=1;
x(7:26,14:19,:)=1;
x(14:19,7:26,:)=1;
imshow(x*255)

编辑:感谢frager保存了大量的字节!

这是octave-online.net上的结果,这要归功于sanchises

结果


我不确定八度,但是在MATLAB中应该可以正常工作:x(32,32,3)=0; x(:,:,1)=1; x(7:26,14:19,:)=1; x(14:19,7:26,:)=1; imshow(x*255)
瑕疵的

顺便说一句:欢迎来到PPCG !!!
瑕疵

Octave-online.net确实显示图片。
桑奇斯

5

GIF,97字节

GIF87a    ð  ÿ  ÿÿÿ,         @„©Ëí£œ´Ú;ƒÞXmÞ!ŸŠcyŒj¨,àZê<Cô
:8nïtï‹é‚BJ1tì$1ËKSvb=_ÔªõŠe  ;

便宜又笨重,但是值得。

编辑:某些字符不在上面的代码中,是GIF的十六进制转储的pastebin。

编辑:使用在线工具压缩到97个字节。


1
似乎一些不可打印的字符已从您的代码段中删除。也许尝试发布一个十六进制转储。

18
您如何发音?
奥利弗

1
@Oliver ZHAIF
Neil

1
Gimp生成的GIF文件看起来只有95个字节相同(比许多其他解决方案要少)。 是它的十六进制转储。
Armin Rigo

6
从什么时候开始GIF是一种编程语言?
2015年

4

HTML + JavaScript(ES6),13 + 112 = 125字节

C=c.getContext`2d`
C[s='fillStyle']='red'
C[r='fillRect'](0,0,32,32)
C[s]='#fff'
C[r](6,13,20,6)
C[r](13,6,6,20)
<canvas id=c>

HTML + JavaScript(ES6),13 + 114 = 127字节

with(c.getContext`2d`)fillStyle='red',fillRect(0,0,32,32),fillStyle='#fff',fillRect(6,13,20,6),fillRect(13,6,6,20)
<canvas id=c>


我偷了您的矩形方法,并使用将其改进为117字节clearRect,我希望您还可以吗?

这很聪明,但不幸的是,OP表示不允许使用透明像素。codegolf.stackexchange.com/questions/136927/draw-the-swiss-flag/…–
darrylyeo

其实白色的 默认情况下,所有网页均具有白色背景,并且标记本身是透明的,但这只是透明性的内部定义。透明度的外部定义是,该区域(白色加号)中的像素在某些情况下可以更改其颜色(或可以随机设置)。但是,因为我同时使用HTML和JavaScript,所以整个输出是带有白色十字的红旗。您不能单独考虑画布和背景。画布在背景上的显示方式已得到很好的定义,并且按规范定义,结果始终包含白叉。

我希望现在可以更清楚一些,我的意思是您可能会不同意,但是如果您真正考虑一下,我相信您会发现我的答案完全符合OP的要求。

@ThePirateBay博览会足够了。
darrylyeo

4

C#265/266 209字节

 using System;using c=System.Console;class P{static void Main(){for(int i=0,j;i<32;i++){for(j=0;j<32;j++){if((6<i&&i<26&&j>13&&j<19)||(6<j&&j<26&&i>13&&i<19))c.BackgroundColor=ConsoleColor.White;else c.BackgroundColor=ConsoleColor.Red;c.Write(" ");}c.WriteLine();}}}     

更改背景色时,我在控制台中写入了“空格”字符。但是,如果您认为它太高,并且将单个字符算为8 x 16像素,则可以像这样简单地将“ j”附近的值加倍(+1个字节,+ c.ReadKey();使其停止):

  using System;using c=System.Console;class P{static void Main(){for(int i=0,j;i<32;i++){for(j=0;j<64;j++){if((6<i&&i<26&&j>26&&j<38)||(12<j&&j<52&&i>13&&i<19))c.BackgroundColor=ConsoleColor.White;else c.BackgroundColor=ConsoleColor.Red;c.Write(" ");}c.WriteLine();} c.ReadKey(); }}     

TheLethalCoder节省了56个字节

 namespace System{using static Console;class P{static void Main(){for(int i=0,j;i<32;i++,WriteLine())for(j=0;j<32;Write(""))BackgroundColor=(ConsoleColor)((6<i&i<26&j>13&j<19)|(j++<26&i>13&i<19&6<j​)?15:12);}}}

209个字节namespace System{using static Console;class P{static void Main(){for(int i=0,j;i<32;i++,WriteLine())for(j=0;j<32;Write(" "))BackgroundColor=(ConsoleColor)((6<i&i<26&j>13&j<19)|(6<j&j++<26&i>13&i<19)?15:12);}}}
TheLethalCoder

4

Tikz,145个 143字节

\documentclass[tikz]{standalone}\begin{document}\tikz{\def~{)rectangle(}\fill[red](,~33,33);\fill[white](7,14~27,20)(14,7~20,27)}\end{document}

这是“脱胶”

\documentclass[tikz]{standalone}
\begin{document}
\tikz{
\def~{)rectangle(}
  \fill[red](,~33,33);
  \fill[white](7,14~27,20)(14,7~20,27)
}\end{document}

在这里,它不再是高尔夫球

\documentclass[tikz]{standalone}
\begin{document}
\tikz{
  \fill[red](1,1)rectangle(33,33);
  \fill[white](7,14)rectangle(27,20)(14,7)rectangle(20,27)
}\end{document}

这使3个矩形成为一个大红色,两个较小的白色成为一个矩形。

这是它的样子。看起来和其他没有什么不同。

旗


几周前,我documentclass 在github上打了高尔夫球。而且似乎没有任何窗口背景要求。这样\documentclass{g}\input tikz可以节省5B。即使使用TikZ,您也可以通过使用普通的TeX节省更多
Chris H

4

R,109字节

par(mar=0*1:4,bg=2,xaxs="i",yaxs="i")
frame()
rect(a<-c(6,13)/32,rev(a),b<-c(26,19)/32,rev(b),c="white",b=NA)

用于frame避免预设绘图,但默认绘图区域位于间隔[0,1]而非[0,32]上。也使用rect矢量化的事实。绘图窗口的默认大小为7英寸x 7英寸。它输出以下内容:

瑞士国旗在绘图窗口中

R,125个字节

png()
par(mar=0*1:4,bg=2,xaxs="i",yaxs="i")
frame()
rect(a<-c(6,13)/32,rev(a),b<-c(26,19)/32,rev(b),c="white",b=NA)
dev.off()

默认png值为480x480像素的正方形。输出为以下png文件:

瑞士国旗


4

R,112字节

par(bg=2,mar=0*1:4)
plot(0:32,0:32,'n',xaxs="i",yaxs="i")
rect(c(6,13),c(13,6),c(26,19),c(19,26),c="white",b=NA)

不过,为了保证长宽比,我们还需要5个字节,总共117个:

par(bg=2,mar=0*1:4)
plot(0:32,0:32,'n',xaxs="i",yaxs="i",as=1)
rect(c(6,13),c(13,6),c(26,19),c(19,26),c="white",b=NA)

Alex Axthelm的答案中获得了很多启发,并感谢Rift节省了更多字节。


3
您可以保存4个字节,更改bg="red"bg=2默认调色板中的相同字节
Rift


3

红色,79字节

码:

view[base 32x32 red draw[fill-pen white pen off box 6x13 26x19 box 13x6 19x26]]

结果:

窗口

说明:

view [              ; activate view engine
base 32x32 red      ; draw a 32 by 32 red box as base
 draw [             ; draw on top of the base
  fill-pen white    ; fill color is white
  pen off           ; turn off outline, alternatively could use white
  box 6x13 26x19    ; draw a horizontal rectangle, specified as 2 corners XxY
  box 13x6 19x26    ; draw vertical rectangle
]]

3

位图,160字节

这是具有24位颜色定义的1位颜色深度的位图。第二行的最后六个字节是调色板,其后是像素阵列。每四个字节包含一整行像素。

42 4D A0 00 00 00 00 00 00 00 20 00 00 00 0C 00
00 00 20 00 20 00 01 00 01 00 00 00 FF FF FF FF
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 07 E0 00 00 07 E0 00
00 07 E0 00 00 07 E0 00 00 07 E0 00 00 07 E0 00
00 07 E0 00 03 FF FF C0 03 FF FF C0 03 FF FF C0
03 FF FF C0 03 FF FF C0 03 FF FF C0 00 07 E0 00
00 07 E0 00 00 07 E0 00 00 07 E0 00 00 07 E0 00
00 07 E0 00 00 07 E0 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

我试图截断尾随的零,但是图像查看器要求为整个画布定义足够的像素。

Swiss.bmp


3
“有什么建议可以永久保存任意文件?” -在GitHub上。

1
可以使用RLE编码吗?
尼尔

1
哈哈,您已经将我的GIF示例1修改了。
阿德里安·张

1
我认为这不是有效的编程语言。IFAICT,BMP既不能检查素数,也不能添加数字。
2015年

3
请大家注意,根据此共识,我们允许非编程语言提交,因此此提交完全可以。(而且IMO是一个不错的基准。)
瑕疵的

3

Python 2,92 91 89字节

r,w=' \0\0',' '*3
A,B=192*r,(13*r+6*w+13*r)*7
print"P6 "+"32 "*3+A+B+(6*r+20*w+6*r)*6+B+A

输出为二进制ppm,用法:

python golf_swiss.py > swiss.ppm

增加颜色深度使我可以将空间用于最大值


3

Tcl / Tk,94

如果它在交互式shell上运行,则可以缩写canvascanand gridtogri

gri [can .c -bg red -w 32 -he 32]
lmap R {{8 15 28 21} {15 8 21 28}} {.c cr r $R -f #FFF -w 0}

Tcl / Tk,98

如果它在交互式外壳上运行,则可以缩写canvascan

grid [can .c -bg red -w 32 -he 32]
.c cr r 8 15 28 21 -f #FFF -w 0
.c cr r 15 8 21 28 -f #FFF -w 0

Tcl / Tk,101

pack [canvas .c -bg red -w 32 -he 32]
.c cr r 8 15 28 21 -f #FFF -w 0
.c cr r 15 8 21 28 -f #FFF -w 0

在此处输入图片说明

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.