46
\$\begingroup\$

Task: Output the Swiss flag.

Happy Swiss National Day / Schweizer Bundesfeiertag / Fête nationale suisse / Festa nazionale svizzera / Fiasta naziunala svizra!

Details: The flag consists of a white (#FFFFFF) cross on a red (#FF0000) background. The cross consists of a 6x6 square with arms of size 6x7 glued to each side. The cross is in the center of the 32x32 square background having a distance of 6 units to each side. (Source)

The output size can be chosen by the participant, but the image must exactly match these proportions, this means its size must be a multiple of 32.

A minimal version would look like so:

\$\endgroup\$
  • 1
    \$\begingroup\$ In some versions of the flag challenges, colored ASCII output was allowed, but you have not included ascii-art. Just to confirm, ASCII output is not allowed? \$\endgroup\$ – Stephen Jul 31 '17 at 22:25
  • 1
    \$\begingroup\$ Right, only the widely known image formats are allowed as well as output on the screen. \$\endgroup\$ – flawr Jul 31 '17 at 22:26
  • 20
    \$\begingroup\$ echo 🇨🇭 - I assume this is not allowed \$\endgroup\$ – Digital Trauma Jul 31 '17 at 23:03
  • \$\begingroup\$ I see a blue CH, I don't see why this should be allowed. \$\endgroup\$ – flawr Jul 31 '17 at 23:18
  • 1
    \$\begingroup\$ @Tutleman I think it does \$\endgroup\$ – Luis Mendo Aug 1 '17 at 0:33

49 Answers 49

40
\$\begingroup\$

SVG (HTML5), 94 83 82 64 bytes

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

Saved 2 bytes thanks to @ThePirateBay. Saved 1 byte thanks to @ATaco. Saved 18 bytes thanks to @CraigAyre pointing out that a 32×32 image was acceptable. As pointed out by @Shaggy, this assumes your default background is white; add 22 bytes for a flag that works on any background:

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

\$\endgroup\$
  • \$\begingroup\$ No need to close the path. You can save 4 bytes by leaving the path open. \$\endgroup\$ – user72349 Aug 1 '17 at 0:22
  • \$\begingroup\$ As ThePirateBay said, the right > in your path tag is optional. \$\endgroup\$ – ATaco Aug 1 '17 at 0:26
  • 6
    \$\begingroup\$ SVG has its own "golfing language"? O.o \$\endgroup\$ – ETHproductions Aug 1 '17 at 1:09
  • 16
    \$\begingroup\$ Being used to writing XML syntax, this code makes my eyes bleed \$\endgroup\$ – Nayuki Aug 1 '17 at 3:13
  • 3
    \$\begingroup\$ Can you remove viewBox for the minimal version? <svg><path d=M0,0V32H32V0M6,13h7V6h6v7h7v6H19v6H13V19H6 fill=red \$\endgroup\$ – Craig Ayre Aug 1 '17 at 9:08
31
\$\begingroup\$

x86-16 Machine Code for DOS, 43 bytes

               ; 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

The above code is designed to be assembled as a COM file and then run under DOS. It invokes the ROM BIOS video services to plot the individual pixels of the flag, forming a 32×32 representation of the Swiss flag in the upper-left corner of the screen.

The code assumes that the video mode is already set to mode 0x13, which also means that it requires a VGA display. Other video modes could be used, but requiring VGA gives you two things: (1) square pixels, and (2) a default palette that includes a true 100% red (0xFF0000) (meaning you don't have to waste bytes changing the palette colors). Before running this program, you will therefore need to switch your display to mode 0x13; the following code is all you need to do that:

mov  ax, 0x13
int  0x10

The code makes no other assumptions, and should run on any x86-compatible hardware under a DOS-compatible operating system.

However, the program terminates immediately after drawing the flag, so the DOS prompt will normally be re-printed at the top-left corner of the screen, covering up the top few lines of the flag. Therefore, if you want to marvel at the true output, you need to hang/pause the system before it RETurns. Here's a screenshot of what that looks like, running in a FreeDOS virtual machine:

It might be possible to golf this down further by writing pixel data directly to the video buffer, especially since I'm already assuming mode 0x13. I haven't tried that yet. INT 0x10 is already a pretty short instruction, but if I can use the one-byte string instructions to write pixel data directly to memory, then that could result in a significant code savings.

\$\endgroup\$
  • \$\begingroup\$ Impressive! I don't see asm a lot but when I do it's always very interesting \$\endgroup\$ – Adrian Zhang Aug 1 '17 at 21:36
  • \$\begingroup\$ Nice to see fans of ASM. \$\endgroup\$ – Billal Begueradj Aug 4 '17 at 6:07
  • \$\begingroup\$ You could do it with three 32 pixel wide tiles iterating over all the rows. It uses more data, but saves in the number of operations. Alternatively, you could use three 16 pixel wide tiles for the left side and perform a symetrical operation by reversing the left side. \$\endgroup\$ – ATL_DEV Aug 4 '17 at 12:42
21
\$\begingroup\$

MATL, 29 bytes

2Y66t&Y"OJQht3$)6thYaQK7hBoYG

Try it at MATL Online!

Explanation

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
\$\endgroup\$
17
\$\begingroup\$

Java 8, 246 + 42 = 288 bytes

Thanks to @Aaron for -64 bytes.
-4 bytes by outputting to file a without extension.

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

A lamba expression that can be assigned to a functional interface method that throws an exception. Creates an image file named a (an image file) in the directory running this file.

Surrounding code used to run it: Try it online!

Ungolfed

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

Result

Grid provided by the IntelliJ IDEA image preview (apparently).

\$\endgroup\$
  • \$\begingroup\$ You can shave quite a few bytes by changing your fillPolygon call into two fillRect calls. I'm not sure I respected the dimensions but I came up with g.fillRect(7,13,18,6);g.fillRect(13,7,6,18) which is shorter by 64 bytes \$\endgroup\$ – Aaron Aug 1 '17 at 14:28
  • \$\begingroup\$ @Aaron Good call, for some reason I thought that'd be longer... Thanks! \$\endgroup\$ – Justin Mariner Aug 1 '17 at 21:15
  • \$\begingroup\$ You could name the file .png instead of a.png and save a byte. \$\endgroup\$ – user2428118 Aug 2 '17 at 9:55
  • \$\begingroup\$ @user2428118 Nice, would it be allowed to take it further and just name it a, without an extension? It can still be opened, just needs to be told to open in a photo viewer. \$\endgroup\$ – Justin Mariner Aug 2 '17 at 10:17
  • 1
    \$\begingroup\$ @OlivierGrégoire I feel that's too far from the idea of my solution, but you're welcome to post that as your own \$\endgroup\$ – Justin Mariner Aug 2 '17 at 14:20
16
\$\begingroup\$

Excel VBA, 86 85 79 Bytes

Code

Anonymous VBE immediate window function that takes no input and outputs the Swiss flag onto the range [A1:F32] of the ActiveSheet object. This works by first making the cells square, then drawing the red region and finally drawing in the white cross.

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

Note that arrangements which that remove the step of coloring the "cross" of the Swiss flag after putting in the red background are actually longer than the above configuration, as they require at least 16 cell addresses, which coordinate to the 8 distinct regions of the flag

-1 Byte thanks to @Greedo's for RowHeight=48 over ColumnWidth=2

-6 Bytes thanks to @Greedo's for -1 instead rgbWhite

Output

enter image description here

\$\endgroup\$
  • 1
    \$\begingroup\$ Fantastic; but you can still save 6 bytes with Interior.Color=-1 instead of Interior.Color=rgbWhite \$\endgroup\$ – Greedo Aug 3 '17 at 9:48
  • \$\begingroup\$ @Greedo, huh, what do you know - that's fantastic. I had used rgbWhite over its decimal value of 16777215 for clarity, I had no idea that -1 would have the same effect. Thanks! \$\endgroup\$ – Taylor Scott Aug 3 '17 at 11:43
  • 1
    \$\begingroup\$ according to this link: (reddit.com/r/compsci/comments/62x9g9/…) PowerPoint is Turing complete so I wonder how could this be ported to PowerPoint \$\endgroup\$ – Suhrid Mulay Oct 29 '17 at 15:22
13
\$\begingroup\$

C++, SFML, 406 399 394 bytes

-2 bytes thanks to pdpi
-10 bytes thanks to Zacharý

SFML ( Simple and Fast Multimedia Library ) is a C++ library written to ease the developpement of video games and multimedia programs

The code :

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

The flag get displayed in a 128x128 window. Your OS have to be able to display a 128x128 window ( my Win8.1 can't display with smaller width )

WARNING : you may want to add these 2 lines of code : t.setFramerateLimit(60);t.setVerticalSyncEnabled(true);, so your CPU won't heat when you run the code. I did not put them in the original code for golfing reasons.

\$\endgroup\$
  • \$\begingroup\$ You can shrink this a bit by replacing your whiles with fors, and initialising t and e in there: 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();}} \$\endgroup\$ – pdpi Aug 1 '17 at 12:23
  • \$\begingroup\$ Also, you can save two bytes by removing spaces: e.type == 0 => e.type==0, maybe even !e.type (don't remember the precedence). 24.f } => 24.f} \$\endgroup\$ – Zacharý Aug 1 '17 at 12:25
  • \$\begingroup\$ Oh, and is using namespace sf; possible? \$\endgroup\$ – Zacharý Aug 1 '17 at 13:42
12
\$\begingroup\$

Braindraw, 227 bytes (Non-competing) (Updated to actually work)

Ungolfed version (241 bytes)

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

Lightly golfed version (227 bytes)

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

Braindraw is a programming language of my own design. As of 3:08 pm today, I do have a working interpreter and have checked that the program runs properly. However, the interpreter did not exist before this competition began, so I am not competing.

Braindraw is the same as Brainf***, except that it operates on three two-dimensional arrays, rather than one one-dimensional array. These arrays are called r, g, and b, and act as the red green and blue color channels. The operator r moves the pointer to the red channel, etc etc. Up is ^, down is v.

\$\endgroup\$
  • 9
    \$\begingroup\$ Looking forward to seeing an interpreter for this, could be fun to try out \$\endgroup\$ – Darren H Aug 1 '17 at 8:07
  • 1
    \$\begingroup\$ It certainly a fun idea, I'm looking forward to an interpreter too! (Technically we only allow languages that have been implemented, and we consider the interpreter as their definition.) \$\endgroup\$ – flawr Aug 1 '17 at 8:26
  • \$\begingroup\$ Is it correct that you do not explicitly output anything, but just output the whole "canvas" in the end? Do you assume the canvas is infinite? \$\endgroup\$ – flawr Aug 1 '17 at 8:29
  • \$\begingroup\$ In re: no interpreter, I guess that means my entry is non-competing. Oh well. But yes, this program has no output per se, the computing space is displayed while and after the program is run. The canvas is theoretically infinite, but in implementation, I will probably just make it some large-ish fixed width like maybe 512x512 \$\endgroup\$ – benzene Aug 1 '17 at 14:36
  • \$\begingroup\$ This language seems capable of kolmogorov complexity image challenges. And are you currently working on an interpreter? \$\endgroup\$ – Zacharý Aug 1 '17 at 14:51
10
\$\begingroup\$

TI-BASIC (TI-84 Plus C(S)E only), 58 bytes

: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
\$\endgroup\$
  • \$\begingroup\$ This is an awesome answer. I just made an account to upvote it. TI-BASIC is great \$\endgroup\$ – Zags Aug 3 '17 at 12:17
  • 1
    \$\begingroup\$ Oh what a deluxe third parameter Pxl-On has now... it makes me cry only having had monochrome :( \$\endgroup\$ – Ray Koopa Aug 5 '17 at 15:12
10
\$\begingroup\$

Mathematica, 83 bytes

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

next one is from @ASCII-only (I thought it was a joke but it works!)

Mathematica, 23 bytes

"CH"~CountryData~"Flag"

-10 bytes from @Jonathan Frech

\$\endgroup\$
  • 4
    \$\begingroup\$ Mathematica doesn't have a built-in for the Swiss flag? \$\endgroup\$ – CJ Dennis Aug 1 '17 at 0:47
  • 4
    \$\begingroup\$ CountryData["Switzerland","Flag"] but it might not have the right proportions \$\endgroup\$ – ASCII-only Aug 1 '17 at 0:49
  • 6
    \$\begingroup\$ Mathematica has a built-in for everything, but this? \$\endgroup\$ – sergiol Aug 1 '17 at 7:39
  • 10
    \$\begingroup\$ "Switzerland"~CountryData~"Flag" saves you some more \$\endgroup\$ – A Simmons Aug 1 '17 at 13:51
  • 1
    \$\begingroup\$ "CH"~CountryData~"Flag" only takes 23 bytes. \$\endgroup\$ – Jonathan Frech Aug 24 '17 at 21:47
9
\$\begingroup\$

HTML + CSS, 15 + 117 bytes = 132 bytes

Using a flexbox wrapper with an 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 bytes = 140 bytes

Previous answer using border and an intermediate flexbox wrapper with negative 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>

\$\endgroup\$
7
\$\begingroup\$

GraphicsMagick (?), 96 bytes

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

Not sure how to golf with GM (should this be considered as a language?). Also not sure how to count bytes here...

With GM installed, type the given code in windows cmd, you will get an image with name 1.bmp. You may want change double quote to single quote if you are using bash (it should work, but i had not tested this).

Thanks to Digital Trauma. use only one -draw save 8 bytes

\$\endgroup\$
  • \$\begingroup\$ Not sure if its the same in GraphicsMagick, but with ImageMagick you can put both rectangles in the same -draw string: convert -size 32x32 xc:red -fill white -draw "rectangle 13,6 18,25 rectangle 6,13 25,18" i.png \$\endgroup\$ – Digital Trauma Aug 2 '17 at 17:14
  • \$\begingroup\$ @DigitalTrauma it is same. edited. \$\endgroup\$ – tsh Aug 3 '17 at 2:37
7
\$\begingroup\$

JavaScript + HTML, 99 + 13 = 112 bytes

Saved 2 bytes thanks to user2428118
Saved 2 bytes thanks to Matheus Avellar

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>


Pure JavaScript, 194 129 bytes

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)

\$\endgroup\$
  • 2
    \$\begingroup\$ I believe you have to do this from scratch. \$\endgroup\$ – Stephen Jul 31 '17 at 22:45
  • \$\begingroup\$ @StepHen. Ok, I added it too. \$\endgroup\$ – user72349 Jul 31 '17 at 22:50
  • 1
    \$\begingroup\$ ... You need to include it in the bytecount \$\endgroup\$ – ASCII-only Aug 1 '17 at 0:48
  • \$\begingroup\$ @ASCII-only. Included. \$\endgroup\$ – user72349 Aug 1 '17 at 0:54
  • 1
    \$\begingroup\$ For future reference, whenever you need a <canvas> you can include the HTML directly in your answer. See codegolf.stackexchange.com/a/136972/47097 \$\endgroup\$ – darrylyeo Aug 1 '17 at 2:03
6
\$\begingroup\$

JavaScript (ES6) in HTML4(?), 178 176 bytes

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

Yes! We do not need <canvas> nor <svg> or even <img>!

Thanks to Justin Mariner, save 2 bytes.

\$\endgroup\$
5
\$\begingroup\$

Löve2D, 139 138 Bytes

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

Saved one byte thanks to ThePirateBay

Ungolfed

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
\$\endgroup\$
5
\$\begingroup\$

Python 3, 190 bytes

Save output as image.xpm and open with your favorite text editor.

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

Try it online!

Output:

! 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
\$\endgroup\$
  • \$\begingroup\$ I had to remove the empty 5th line to open it with gimp on linux. \$\endgroup\$ – Tim Aug 5 '17 at 7:16
5
\$\begingroup\$

Perl 5, 184 bytes

176 bytes code + 8 for -Mutf8 -p.

I'm not entirely sure this is as required, it relies on empty input being supplied as per this meta post, which doesn't work on TIO so it supplies a new line (which is not used). Output is to the terminal and looks like this:

enter image description here

Proportions should be to scale based on one character space being two vertical 'pixels'.

%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

Try it online!

You can preview the output by copying from TIO and pasting in here (this shows the control characters when hovered over the element).

\$\endgroup\$
5
\$\begingroup\$

GFA BASIC (Atari ST), 62 bytes

A manually edited listing in .LST format. All lines end with CR, including the last one.

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

Expanded and commented:

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

Output

The output is 32x32.

GFA output

NB: This is indeed using the 'white' color, although it's gray-looking on the emulator (and on the real thing as well, unless you turn the brightness quite high).

\$\endgroup\$
5
\$\begingroup\$

R, 171 140 bytes.

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)

(somewhat) ungolfed:

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)

Thanks to @gregor for saving some bytes

Run it!

\$\endgroup\$
  • 1
    \$\begingroup\$ Welcome to the site! :) \$\endgroup\$ – DJMcMayhem Aug 1 '17 at 17:50
  • \$\begingroup\$ Nice! You can save quite a few bytes with partial matching of argument names: e=2 instead of each=2, t instead of type, c for col, b for border. And 0*1:4 is shorter than c(0,0,0,0). \$\endgroup\$ – Gregor Aug 1 '17 at 18:00
  • \$\begingroup\$ Actually you can get away with positional matching on plot: plot(0,0,'n',l,l,xaxs="i",yaxs="i") (assigning m="i" actually costs you one byte). With all of that it gets down to 141 bytes. \$\endgroup\$ – Gregor Aug 1 '17 at 18:06
  • \$\begingroup\$ I forgot entirely about partial matching. Thanks! \$\endgroup\$ – Alex Axthelm Aug 1 '17 at 20:46
  • \$\begingroup\$ Couple more bytes off: l and the xlim/ylim aren't needed, just plot(0:32,0:32,...). I also adapted your approach and got it down to 117 here, using rect instead of polygon. \$\endgroup\$ – Gregor Aug 1 '17 at 22:41
5
\$\begingroup\$

Octave, 105 bytes 73 bytes

Note: line feeds added for clarity, not included in byte count

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

EDIT: thanks to flawr for saving quite a lot of bytes!

Here is the result on octave-online.net, thanks to sanchises

Results

\$\endgroup\$
  • \$\begingroup\$ I'm not sure about Octave, but in MATLAB following should work: x(32,32,3)=0; x(:,:,1)=1; x(7:26,14:19,:)=1; x(14:19,7:26,:)=1; imshow(x*255) \$\endgroup\$ – flawr Aug 1 '17 at 15:53
  • \$\begingroup\$ BTW: Welcome to PPCG!!! \$\endgroup\$ – flawr Aug 1 '17 at 15:54
  • \$\begingroup\$ Octave-online.net does show pictures. \$\endgroup\$ – Sanchises Aug 1 '17 at 18:43
5
\$\begingroup\$

GIF, 97 Bytes

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

Cheap and byte-heavy, but worth it.

EDIT: Some characters aren't in the code above, here's a pastebin for the GIF's hexdump.

EDIT: compressed down to 97 bytes with online tool.

\$\endgroup\$
  • 1
    \$\begingroup\$ It seems that some unprintable characters were removed from your code snippet. Maybe try posting a hex dump. \$\endgroup\$ – user72349 Aug 1 '17 at 1:49
  • 18
    \$\begingroup\$ How do you pronounce the language? \$\endgroup\$ – Oliver Aug 1 '17 at 16:16
  • 1
    \$\begingroup\$ @Oliver ZHAIF \$\endgroup\$ – Neil Aug 1 '17 at 17:22
  • 1
    \$\begingroup\$ Gimp produces a GIF file that looks identical in only 95 bytes (less than many other solutions). Here's a hex dump of it. \$\endgroup\$ – Armin Rigo Aug 1 '17 at 22:39
  • 6
    \$\begingroup\$ Since when is GIF a programming language? \$\endgroup\$ – Adám Aug 2 '17 at 8:44
4
\$\begingroup\$

HTML + JavaScript (ES6), 13 + 112 = 125 bytes

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 bytes

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>

\$\endgroup\$
  • \$\begingroup\$ I've stolen your rectangle approach and improved it to 117 bytes using clearRect, I hope you're ok with that? \$\endgroup\$ – user72349 Aug 1 '17 at 21:51
  • \$\begingroup\$ That's clever, but unfortunately the OP says transparent pixels aren't allowed. codegolf.stackexchange.com/questions/136927/draw-the-swiss-flag/… \$\endgroup\$ – darrylyeo Aug 2 '17 at 4:30
  • \$\begingroup\$ Actually, it is white. By default, all webpages have white background and the flag is transparent itself, but it is just an internal definition of transparency. External definition of transparency would be if pixels in that region (white plus) may change its color in some conditions (or may be set randomly). However, because I'm using both HTML and JavaScript, the whole output is the red flag with white cross. You cannot consider the canvas and background separately. How canvas is displayed on the background is well defined and the result always contains white cross by spec definitions. \$\endgroup\$ – user72349 Aug 2 '17 at 9:41
  • \$\begingroup\$ I hope its a bit more clear now, I mean you may disagree, but if you really think about it I am sure you'll find my answer fully consistent with OP's requirements. \$\endgroup\$ – user72349 Aug 2 '17 at 9:42
  • \$\begingroup\$ @ThePirateBay Fair enough. \$\endgroup\$ – darrylyeo Aug 2 '17 at 17:47
4
\$\begingroup\$

C# 265/266 209 bytes

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

I wrote "space" characters into console while changing Background Color. But if you think it is too tall and you count single character as 8 x 16 pixels, you simply double values near "j" like this (+ 1 byte and + c.ReadKey(); so it stops):

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

56 bytes saved thanks to TheLethalCoder

 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);}}}
\$\endgroup\$
  • \$\begingroup\$ 209 bytes 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);}}} \$\endgroup\$ – TheLethalCoder Aug 1 '17 at 9:34
4
\$\begingroup\$

Tikz, 145 143 bytes

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

Here it is "ungolfed"

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

Here it is ungolfed a little more

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

This makes 3 rectangles a big red one and two smaller white ones for the plus.

Here's what it looks like. It doesn't really look any different than the others.

flag

\$\endgroup\$
  • \$\begingroup\$ I put a golfing documentclass on github a few weeks ago. and there doesn't seem to be any window background requirement. With that \documentclass{g}\input tikz should work to save 5B. You can probably save more by working in plain TeX, even with TikZ \$\endgroup\$ – Chris H Aug 1 '17 at 15:35
4
\$\begingroup\$

R, 109 bytes

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)

Uses frame to avoid presetting a plot, but default plotting region is on interval [0,1] instead of [0,32]. Also uses the fact that rect is vectorized. The default size of the plotting window is 7in x 7in. It outputs the following:

Swiss flag in plotting window

R, 125 bytes

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

Default for png is a square of 480x480 pixels. Output is the following png file:

Swiss flag

\$\endgroup\$
4
\$\begingroup\$

R, 112 bytes

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)

Though, to guarantee the aspect ratio, we need 5 more bytes for a total of 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)

With lots of inspiration from Alex Axthelm's answer, and thanks to Rift for saving a few more bytes.

\$\endgroup\$
  • 3
    \$\begingroup\$ you could save 4 bytes changing bg="red" to bg=2 which is the same in the default palette \$\endgroup\$ – Rift Aug 2 '17 at 8:22
4
\$\begingroup\$

Postscript, 301 286 187 bytes

/m{moveto}def
/s{setrgbcolor}def
/r{rlineto}def
/c{closepath fill}def
1 0 0 s
0 0 m
0 320 r
320 0 r
0 -320 r
c
1 1 1 s
130 60 m
60 0 r
0 200 r
-60 0 r
c
60 130 m
0 60 r
200 0 r
0 -60 r c

Thanks to the anonymous editor who suggested a 99 byte reduction!

\$\endgroup\$
3
\$\begingroup\$

Red, 79 Bytes

Code:

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

Result:

window

Explanation:

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
]]
\$\endgroup\$
3
\$\begingroup\$

Bitmap, 160 bytes

Here's a bitmap with 1-bit colour depth, using a 24-bit colour definition. The last six bytes of the second line is the palette and following that is the pixel array. Every four bytes contains a whole row of pixels.

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

I tried to truncate the trailing zeroes, but image viewers require there are enough pixels defined for the entire canvas.

Swiss.bmp

\$\endgroup\$
  • 3
    \$\begingroup\$ "Any suggestions where I can save arbitrary files permanently?" - on GitHub. \$\endgroup\$ – user72349 Aug 1 '17 at 6:31
  • 1
    \$\begingroup\$ Can you use RLE encoding? \$\endgroup\$ – Neil Aug 1 '17 at 17:24
  • 1
    \$\begingroup\$ Haha, you've 1up'd my GIF example. \$\endgroup\$ – Adrian Zhang Aug 1 '17 at 22:05
  • 1
    \$\begingroup\$ I think this is not a valid programming language. IFAICT, BMP can neither check primeness, nor add numbers. \$\endgroup\$ – Adám Aug 2 '17 at 8:46
  • 3
    \$\begingroup\$ Please everyone note that we allow non-programming-language submissions as per this consensus, so this submission is perfectly fine. (And IMO a nice benchmark to have.) \$\endgroup\$ – flawr Aug 3 '17 at 9:56
3
\$\begingroup\$

Python 2, 92 91 89 bytes

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

Output as binary ppm, usage:

python golf_swiss.py > swiss.ppm

Increasing the color depth allowed me to use space for maximum value

\$\endgroup\$
3
\$\begingroup\$

Tcl/Tk, 94

If it runs on the interactive shell, one can abbreviate canvas to can and grid to gri

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

If it runs on the interactive shell, one can abbreviate canvas to can

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

enter image description here

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.