Vẽ cờ Thụy Sĩ


46

Nhiệm vụ: Xuất cờ Thụy Sĩ.

Chúc mừng ngày quốc khánh Thụy Sĩ / Schweizer Bundesfeiertag / Fête nationalale suisse / Festa nazionale svizzera / Fiasta naziunala svizra!

Chi tiết: Cờ bao gồm một #FFFFFFchữ thập màu trắng ( ) trên nền màu đỏ ( #FF0000). Thánh giá bao gồm một hình vuông 6x6 với cánh tay có kích thước 6x7 được dán vào mỗi bên. Thánh giá nằm ở trung tâm của hình vuông 32x32 có khoảng cách 6 đơn vị cho mỗi bên. ( Nguồn )

Người tham gia có thể chọn kích thước đầu ra, nhưng hình ảnh phải khớp chính xác với các tỷ lệ này, điều này có nghĩa là kích thước của nó phải là bội số của 32.

Một phiên bản tối thiểu sẽ trông như vậy:


1
Trong một số phiên bản của các thử thách cờ, đầu ra ASCII màu được cho phép, nhưng bạn không bao gồm ascii-art . Chỉ cần xác nhận, đầu ra ASCII không được phép?
Stephen

1
Phải, chỉ cho phép các định dạng hình ảnh được biết đến rộng rãi cũng như đầu ra trên màn hình.
flawr

20
echo 🇨🇭- Tôi cho rằng điều này là không được phép
Chấn thương kỹ thuật số

Tôi thấy một CH màu xanh, tôi không thấy lý do tại sao điều này nên được cho phép.
flawr

1
@Tutman Tôi nghĩ là có
Luis Mendo

Câu trả lời:


40

SVG (HTML5), 94 83 82 64 byte

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

Đã lưu 2 byte nhờ @ThePirateBay. Đã lưu 1 byte nhờ @ATaco. Đã lưu 18 byte nhờ @CraigAyre chỉ ra rằng hình ảnh 32 × 32 là chấp nhận được. Như @Shaggy đã chỉ ra, điều này giả sử nền mặc định của bạn là màu trắng; thêm 22 byte cho một cờ hoạt động trên bất kỳ nền nào:

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


Không cần phải đóng đường dẫn. Bạn có thể lưu 4 byte bằng cách để đường dẫn mở.

Như ThePirateBay đã nói, quyền >trong thẻ đường dẫn của bạn là tùy chọn.
ATaco

6
SVG có "ngôn ngữ chơi gôn" riêng? Oo
Sản xuất ETH

16
Được sử dụng để viết cú pháp XML, mã này khiến mắt tôi chảy máu
Nayuki

3
Bạn có thể loại bỏ viewBoxcho phiên bản tối thiểu? <svg><path d=M0,0V32H32V0M6,13h7V6h6v7h7v6H19v6H13V19H6 fill=red
Craig Ayre

31

Mã máy x86-16 cho DOS, 43 byte

               ; 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

Đoạn mã trên được thiết kế để được lắp ráp dưới dạng tệp COM và sau đó chạy trong DOS. Nó gọi các dịch vụ video ROM ROM để vẽ các pixel riêng lẻ của cờ, tạo thành hình đại diện 32 × 32 của cờ Thụy Sĩ ở góc trên bên trái màn hình.

Mã này giả định rằng chế độ video đã được đặt thành chế độ 0x13, điều đó cũng có nghĩa là nó yêu cầu màn hình VGA. Các chế độ video khác có thể được sử dụng, nhưng yêu cầu VGA cung cấp cho bạn hai điều: (1) pixel vuông và (2) bảng màu mặc định bao gồm màu đỏ thật 100% ( 0xFF0000) (có nghĩa là bạn không phải lãng phí byte khi thay đổi bảng màu màu sắc). Do đó, trước khi chạy chương trình này, bạn sẽ cần chuyển màn hình sang chế độ 0x13; đoạn mã sau đây là tất cả những gì bạn cần để làm điều đó:

mov  ax, 0x13
int  0x10

Mã này không đưa ra các giả định nào khác và nên chạy trên mọi phần cứng tương thích x86 trong hệ điều hành tương thích với DOS.

Tuy nhiên, chương trình chấm dứt ngay lập tức sau khi vẽ cờ, do đó, dấu nhắc DOS thường sẽ được in lại ở góc trên cùng bên trái của màn hình, che đi vài dòng trên cùng của cờ. Do đó, nếu bạn muốn ngạc nhiên với đầu ra thực sự, bạn cần treo / tạm dừng hệ thống trước khi nó khởi động RET. Dưới đây là ảnh chụp màn hình của giao diện, chạy trong máy ảo FreeDOS:

Có thể đánh golf điều này xuống hơn nữa bằng cách ghi dữ liệu pixel trực tiếp vào bộ đệm video, đặc biệt vì tôi đã giả sử chế độ 0x13. Tôi chưa thử điều đó. INT 0x10đã là một hướng dẫn khá ngắn, nhưng nếu tôi có thể sử dụng các lệnh chuỗi một byte để ghi dữ liệu pixel trực tiếp vào bộ nhớ, thì điều đó có thể giúp tiết kiệm mã đáng kể.


Ấn tượng! Tôi không thấy asm rất nhiều nhưng khi tôi làm điều đó luôn rất thú vị
Adrian Zhang

Rất vui khi thấy người hâm mộ của ASM.
Billal Begueradj

Bạn có thể làm điều đó với ba ô rộng 32 pixel lặp trên tất cả các hàng. Nó sử dụng nhiều dữ liệu hơn, nhưng tiết kiệm số lượng hoạt động. Ngoài ra, bạn có thể sử dụng ba ô rộng 16 pixel cho bên trái và thực hiện thao tác đối xứng bằng cách đảo ngược bên trái.
ATL_DEV

21

MATL , 29 byte

2Y66t&Y"OJQht3$)6thYaQK7hBoYG

Hãy thử nó tại MATL Online!

Giải trình

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 byte

Cảm ơn @Aaron cho -64 byte.
-4 byte bằng cách xuất ra tệp amà không cần mở rộng.

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

Một biểu thức lamba có thể được gán cho một phương thức giao diện chức năng đưa ra một ngoại lệ. Tạo một tệp hình ảnh có tên a(một tệp hình ảnh) trong thư mục chạy tệp này.

Mã xung quanh được sử dụng để chạy nó: Hãy thử trực tuyến!

Ung dung

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

Kết quả

Lưới được cung cấp bởi bản xem trước hình ảnh IntelliJ IDEA (rõ ràng).


Bạn có thể cạo khá nhiều byte bằng cách thay đổi fillPolygoncuộc gọi của bạn thành hai fillRectcuộc gọi. Tôi không chắc là tôi tôn trọng kích thước nhưng tôi đã nghĩ ra g.fillRect(7,13,18,6);g.fillRect(13,7,6,18)nó ngắn hơn 64 byte
Aaron

@Aaron Cuộc gọi tốt, vì một số lý do tôi nghĩ rằng sẽ lâu hơn ... Cảm ơn!
Justin Mariner

Bạn có thể đặt tên cho tệp .pngthay vì a.pngvà lưu một byte.
user2428118

@ user2428118 Rất vui, nó có được phép đưa nó đi xa hơn và chỉ cần đặt tên cho nó a, mà không cần một phần mở rộng? Nó vẫn có thể được mở, chỉ cần được yêu cầu mở trong trình xem ảnh.
Justin Mariner

1
@ OlivierGrégoire Tôi cảm thấy quá xa ý tưởng về giải pháp của mình, nhưng bạn được hoan nghênh đăng bài đó là của riêng bạn
Justin Mariner

16

VBA Excel, 86 85 79 byte

Hàm cửa sổ ngay lập tức VBE ẩn danh không có đầu vào và xuất cờ Thụy Sĩ vào phạm vi [A1:F32]của ActiveSheetđối tượng. Điều này hoạt động bằng cách đầu tiên làm cho các ô vuông, sau đó vẽ vùng màu đỏ và cuối cùng vẽ theo chữ thập màu trắng.

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

Lưu ý rằng các sắp xếp loại bỏ bước tô màu "chữ thập" của cờ Thụy Sĩ sau khi đặt vào nền đỏ thực sự dài hơn cấu hình trên, vì chúng yêu cầu ít nhất 16 địa chỉ ô, phối hợp với 8 vùng riêng biệt của cờ

-1 Byte cảm ơn @ Greedo đã RowHeight=48kết thúcColumnWidth=2

-6 Byte cảm ơn @ Greedo -1thay thếrgbWhite

Đầu ra

nhập mô tả hình ảnh ở đây


1
Tuyệt vời; nhưng bạn vẫn có thể lưu 6 byte Interior.Color=-1thay vìInterior.Color=rgbWhite
Greedo

@Greedo, huh, bạn biết gì - thật tuyệt vời. Tôi đã sử dụng rgbWhitetrên giá trị thập phân của nó 16777215cho rõ ràng, tôi không biết rằng -1sẽ có tác dụng tương tự. Cảm ơn!
Taylor Scott

1
theo liên kết này: ( reddit.com/r/compsci/comments/62x9g9/NH ) PowerPoint đã hoàn tất, vì vậy tôi tự hỏi làm thế nào điều này có thể được chuyển sang PowerPoint
Suhrid Mulay

13

C ++, SFML, 406 399 394 byte

-2 byte nhờ pdpi
-10 byte nhờ Zacharý

SFML (Thư viện đa phương tiện đơn giản và nhanh chóng) là một thư viện C ++ được viết để dễ dàng phát triển các trò chơi video và các chương trình đa phương tiện

Mật mã :

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

Cờ được hiển thị trong cửa sổ 128x128. Hệ điều hành của bạn phải có thể hiển thị cửa sổ 128x128 (Win8.1 của tôi không thể hiển thị với chiều rộng nhỏ hơn)

CẢNH BÁO : bạn có thể muốn thêm 2 dòng mã này: t.setFramerateLimit(60);t.setVerticalSyncEnabled(true);vì vậy CPU của bạn sẽ không nóng khi bạn chạy mã. Tôi đã không đặt chúng trong mã gốc vì lý do chơi gôn.


Bạn có thể thu nhỏ điều này một chút bằng cách thay thế số tiền của bạn bằng fors, và khởi tạo t và e trong đó: 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();}}
pdpi

Ngoài ra, bạn có thể lưu hai byte bằng cách xóa khoảng trắng: e.type == 0=> e.type==0, thậm chí có thể !e.type(không nhớ quyền ưu tiên). 24.f }=>24.f}
Zacharý

Oh, và using namespace sf;có thể?
Zacharý

12

Braindraw, 227 byte (Không cạnh tranh) (Được cập nhật để thực sự hoạt động)

Phiên bản không được chỉnh sửa (241 byte)

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

Phiên bản nhẹ nhàng (227 byte)

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

Braindraw là một ngôn ngữ lập trình của thiết kế của riêng tôi. Tính đến 3 giờ chiều hôm nay, tôi có một thông dịch viên làm việc và đã kiểm tra xem chương trình có chạy đúng không. Tuy nhiên, thông dịch viên không tồn tại trước khi cuộc thi này bắt đầu, vì vậy tôi không cạnh tranh.

Braindraw giống như Brainf ***, ngoại trừ việc nó hoạt động trên ba mảng hai chiều, thay vì một mảng một chiều. Các mảng này được gọi là r, g và b, và hoạt động như các kênh màu xanh lục và xanh lam. Toán tử r di chuyển con trỏ đến kênh màu đỏ, v.v ... Lên là ^, xuống là v.


9
Mong được gặp một thông dịch viên cho việc này, có thể rất vui để thử
Darren H

1
Đó chắc chắn là một ý tưởng thú vị, tôi cũng mong chờ một thông dịch viên! (Về mặt kỹ thuật, chúng tôi chỉ cho phép các ngôn ngữ đã được triển khai và chúng tôi coi trình thông dịch là định nghĩa của chúng.)
flawr

Có đúng là bạn không xuất ra bất cứ thứ gì rõ ràng, mà chỉ xuất ra toàn bộ "canvas" cuối cùng? Bạn có cho rằng vải là vô hạn?
flawr

Trong re: không có thông dịch viên, tôi đoán điều đó có nghĩa là mục nhập của tôi không cạnh tranh. Ồ tốt Nhưng có, chương trình này không có đầu ra mỗi se, không gian tính toán được hiển thị trong và sau khi chương trình được chạy. Về mặt lý thuyết, khung vẽ là vô hạn, nhưng trong quá trình thực hiện, có lẽ tôi sẽ chỉ làm cho nó có chiều rộng cố định lớn như có thể là 512x512
benzen

Ngôn ngữ này dường như có khả năng thách thức hình ảnh phức tạp kolmogorov. Và bạn hiện đang làm việc trên một thông dịch viên?
Zacharý

10

TI-BASIC (chỉ TI-84 Plus C (S) E), 58 byte

: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

Đây là một câu trả lời tuyệt vời. Tôi chỉ cần tạo một tài khoản để nâng cấp nó. TI-BASIC thật tuyệt
Zags

1
Ôi thật là một tham số thứ ba cao cấp Pxl-On hiện có ... nó khiến tôi chỉ khóc khi có đơn sắc :(
Ray

10

Toán học, 83 byte

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

tiếp theo là từ chỉ @ ASCII (Tôi nghĩ đó là một trò đùa nhưng nó hoạt động!)

Toán học, 23 byte

"CH"~CountryData~"Flag"

-10 byte từ @Jonathan Frech


4
Mathematica không tích hợp sẵn cho cờ Thụy Sĩ?
CJ Dennis

4
CountryData["Switzerland","Flag"]nhưng nó có thể không có tỷ lệ phù hợp
ASCII - chỉ

6
Mathematica có tích hợp sẵn cho mọi thứ, nhưng điều này?
sergiol

10
"Switzerland"~CountryData~"Flag"giúp bạn tiết kiệm nhiều hơn
Một Simmons

1
"CH"~CountryData~"Flag"chỉ mất 23 byte.
Jonathan Frech

9

HTML + CSS, 15 + 117 byte = 132 byte

Sử dụng một bao bọc flexbox với một 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 byte = 140 byte

Câu trả lời trước bằng cách sử dụng bordervà một trình bao bọc flexbox trung gian với âm 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 byte

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

Không chắc chắn làm thế nào để chơi golf với GM (điều này có nên được coi là một ngôn ngữ?). Cũng không chắc làm thế nào để đếm byte ở đây ...

Khi GM được cài đặt, nhập mã đã cho vào windows cmd, bạn sẽ nhận được một hình ảnh có tên 1.bmp. Bạn có thể muốn thay đổi trích dẫn kép thành trích dẫn đơn nếu bạn đang sử dụng bash (nó sẽ hoạt động, nhưng tôi đã không kiểm tra điều này).

Cảm ơn kỹ thuật số. chỉ sử dụng một -drawlưu 8 byte


Không chắc chắn nếu nó giống nhau trong GraphicsMagick, nhưng với ImageMagick, bạn có thể đặt cả hai hình chữ nhật trong cùng một -drawchuỗi:convert -size 32x32 xc:red -fill white -draw "rectangle 13,6 18,25 rectangle 6,13 25,18" i.png
Chấn thương kỹ thuật số

@DigitalTrauma cũng vậy. chỉnh sửa.
tsh

7

JavaScript + HTML, 99 + 13 = 112 byte

Đã lưu 2 byte nhờ user2428118
Lưu 2 byte nhờ Matheus Avellar

Câu đố

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 thuần, 194 129 byte

Câu đố

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
Tôi tin rằng bạn phải làm điều này từ đầu.
Stephen

@StepHen. Ok, tôi cũng đã thêm nó.

1
... Bạn cần đưa nó vào bytecount
ASCII chỉ

@ Chỉ ASCII. Đã bao gồm.

1
Để tham khảo trong tương lai, bất cứ khi nào bạn cần, <canvas>bạn có thể đưa HTML trực tiếp vào câu trả lời của mình. Xem codegolf.stackexchange.com/a/136972/47097
darrylyeo

6

JavaScript (ES6) trong HTML4 (?), 178 176 byte

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

Đúng! Chúng ta không cần <canvas>và cũng không <svg>hoặc thậm chí <img>!

Nhờ Justin Mariner, tiết kiệm 2 byte.


5

Löve2D , 139 138 byte

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

Đã lưu một byte nhờ ThePirateBay

Ung dung

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 byte

Lưu đầu ra dưới dạng image.xpmvà mở bằng trình soạn thảo văn bản yêu thích của bạn.

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

Hãy thử trực tuyến!

Đầu ra:

! 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

Tôi đã phải xóa dòng thứ 5 trống để mở nó bằng gimp trên linux.
Tim

5

Perl 5 , 184 byte

176 byte mã + 8 cho -Mutf8 -p.

Tôi không hoàn toàn chắc chắn rằng đây là yêu cầu, nó phụ thuộc vào đầu vào trống được cung cấp theo bài đăng meta này , không hoạt động trên TIO nên nó cung cấp một dòng mới (không được sử dụng). Đầu ra là tới thiết bị đầu cuối và trông như thế này:

nhập mô tả hình ảnh ở đây

Tỷ lệ phải được chia tỷ lệ dựa trên một không gian ký tự là hai "pixel" dọc.

%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

Hãy thử trực tuyến!

Bạn có thể xem trước đầu ra bằng cách sao chép từ TIO và dán vào đây (phần này hiển thị các ký tự điều khiển khi di chuột qua phần tử) .


5

GFA BASIC (Atari ST), 62 byte

Một danh sách được chỉnh sửa thủ công ở định dạng .LST. Tất cả các dòng kết thúc với CR, bao gồm cả cuối cùng.

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

Mở rộng và bình luận:

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

Đầu ra

Đầu ra là 32x32.

Đầu ra GFA

Lưu ý: Đây thực sự là sử dụng màu 'trắng', mặc dù nó có màu xám trên trình giả lập (và trên thực tế, trừ khi bạn bật độ sáng khá cao).


5

R, 171 140 byte.

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)

(phần nào) vô danh:

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)

Cảm ơn @gregor đã lưu một số byte

Chạy đi!


1
Chào mừng đến với trang web! :)
DJMcMayhem

Đẹp! Bạn có thể lưu khá nhiều byte với kết hợp một phần tên đối số: e=2thay vì each=2, tthay vì type, ccho col, bcho border. Và 0*1:4ngắn hơn c(0,0,0,0).
Gregor

Trên thực tế, bạn có thể thoát khỏi kết hợp vị trí trên plot: plot(0,0,'n',l,l,xaxs="i",yaxs="i")(việc gán m="i"thực sự khiến bạn tốn một byte). Với tất cả điều đó, nó giảm xuống còn 141 byte.
Gregor

Tôi quên hoàn toàn về kết hợp một phần. Cảm ơn!
Alex Axthelm

Thêm vài byte nữa: lxlim/ ylimkhông cần thiết, chỉ plot(0:32,0:32,...). Tôi cũng điều chỉnh cách tiếp cận của bạn và đưa nó xuống 117 ở đây, sử dụng rectthay vìpolygon .
Gregor

5

Octave, 105 byte 73 byte

Lưu ý: nguồn cấp dữ liệu được thêm vào cho rõ ràng, không bao gồm trong số byte

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

EDIT: cảm ơn flawr vì đã tiết kiệm được khá nhiều byte!

Đây là kết quả trên octave-online.net, nhờ vào sanchise

Các kết quả


Tôi không chắc chắn về Octave, nhưng trong MATLAB sau đây sẽ hoạt động:x(32,32,3)=0; x(:,:,1)=1; x(7:26,14:19,:)=1; x(14:19,7:26,:)=1; imshow(x*255)
flawr

BTW: Chào mừng bạn đến với PPCG !!!
flawr

Octave-online.net không hiển thị hình ảnh.
Sanchise

5

GIF, 97 byte

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

Giá rẻ và nặng byte, nhưng giá trị nó.

EDIT: Một số ký tự không có trong mã ở trên, đây là một pastebin cho hexdump của GIF.

EDIT: nén xuống 97 byte với công cụ trực tuyến.


1
Có vẻ như một số ký tự không thể in được đã bị xóa khỏi đoạn mã của bạn. Có thể thử gửi một bãi chứa hex.

18
Làm thế nào để bạn phát âm ngôn ngữ?
Oliver

1
@Oliver ZHAIF
Neil

1
Gimp tạo ra một tệp GIF trông giống hệt nhau chỉ trong 95 byte (ít hơn nhiều giải pháp khác). Đây là một bãi chứa hex của nó.
Armin Rigo

6
Từ khi nào GIF là ngôn ngữ lập trình?
Adám

4

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

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 byte

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>


Tôi đã đánh cắp cách tiếp cận hình chữ nhật của bạn và cải thiện nó thành 117 byte bằng cách sử dụng clearRect, tôi hy vọng bạn ổn với điều đó?

Điều đó thật thông minh, nhưng thật không may, OP cho biết các pixel trong suốt không được phép. codegolf.stackexchange.com/questions/136927/draw-the-swiss-flag/ cường
darrylyeo

Thật ra, nó màu trắng. Theo mặc định, tất cả các trang web có nền trắng và cờ trong suốt, nhưng đó chỉ là một định nghĩa nội bộ về độ trong suốt. Định nghĩa bên ngoài về độ trong suốt sẽ là nếu các pixel trong vùng đó (cộng trắng) có thể thay đổi màu của nó trong một số điều kiện (hoặc có thể được đặt ngẫu nhiên). Tuy nhiên, vì tôi đang sử dụng cả HTML và JavaScript, toàn bộ đầu ra là cờ đỏ có chữ thập màu trắng . Bạn không thể xem xét vải và nền riêng biệt. Làm thế nào canvas được hiển thị trên nền được xác định rõ và kết quả luôn chứa chữ thập trắng theo định nghĩa cụ thể.

Tôi hy vọng bây giờ rõ ràng hơn một chút, ý tôi là bạn có thể không đồng ý, nhưng nếu bạn thực sự nghĩ về điều đó tôi chắc chắn bạn sẽ thấy câu trả lời của tôi hoàn toàn phù hợp với yêu cầu của OP.

@ThePirateBay Đủ công bằng.
darrylyeo

4

C # 265/266 209 byte

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

Tôi đã viết các ký tự "khoảng trắng" vào bảng điều khiển trong khi thay đổi Màu nền. Nhưng nếu bạn nghĩ rằng nó quá cao và bạn đếm một ký tự là 8 x 16 pixel, bạn chỉ cần nhân đôi giá trị gần "j" như thế này (+ 1 byte và + c.ReadKey();để nó dừng lại):

  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 byte được lưu nhờ 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);}}}

209 bytenamespace 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 byte

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

Đây là "vô căn cứ"

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

Ở đây nó vô dụng hơn một chút

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

Điều này làm cho 3 hình chữ nhật là một màu đỏ lớn và hai hình nhỏ màu trắng cho điểm cộng.

Đây là những gì nó trông giống như. Nó không thực sự trông khác biệt so với những người khác.

cờ


Tôi đã chơi golf documentclass trên github vài tuần trước. và dường như không có bất kỳ yêu cầu nền cửa sổ. Với điều đó \documentclass{g}\input tikznên làm việc để tiết kiệm 5B. Bạn có thể có thể tiết kiệm nhiều hơn bằng cách làm việc trong TeX đơn giản , ngay cả với TikZ
Chris H

4

R, 109 byte

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)

Sử dụng frameđể tránh đặt trước một âm mưu, nhưng vùng vẽ mặc định nằm trong khoảng [0,1] thay vì [0,32]. Cũng sử dụng thực tế rectlà vector hóa. Kích thước mặc định của cửa sổ vẽ là 7in x 7in. Nó xuất ra như sau:

Cờ Thụy Sĩ trong cửa sổ âm mưu

R, 125 byte

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

Mặc định cho pnglà một hình vuông 480x480 pixel. Đầu ra là tệp png sau:

Cờ Thụy Sĩ


4

R, 112 byte

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)

Mặc dù, để đảm bảo tỷ lệ khung hình, chúng tôi cần thêm 5 byte cho tổng số 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)

Với rất nhiều cảm hứng từ câu trả lời của Alex Axthelm , và cảm ơn Rift vì đã tiết kiệm thêm một vài byte.


3
bạn có thể tiết kiệm 4 byte thay đổi bg="red"để bg=2mà là như nhau trong bảng mặc định
Rift

4

Bản thảo, 301 286 187 byte

/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

Cảm ơn biên tập viên ẩn danh đã đề xuất giảm 99 byte!


Chỉ để cho bạn biết: ai đó đã gửi một chỉnh sửa chơi golf cho bài đăng này. Theo chính sách của chúng tôi, nó đã bị từ chối, nhưng bạn có thể muốn xem xét thực hiện một số thay đổi.
Rɪᴋᴇʀ

3

Đỏ , 79 byte

Mã số:

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

Kết quả:

cửa sổ

Giải trình:

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

Bitmap, 160 byte

Đây là một bitmap với độ sâu màu 1 bit, sử dụng định nghĩa màu 24 bit. Sáu byte cuối cùng của dòng thứ hai là bảng màu và theo sau đó là mảng pixel. Cứ bốn byte chứa một hàng pixel.

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

Tôi đã cố gắng cắt bớt các số 0 ở cuối, nhưng người xem hình ảnh yêu cầu phải có đủ pixel được xác định cho toàn bộ khung vẽ.

Swiss.bmp


3
"Bất kỳ đề xuất nào tôi có thể lưu các tệp tùy ý vĩnh viễn?" - trên GitHub.

1
Bạn có thể sử dụng mã hóa RLE?
Neil

1
Haha, bạn đã 1up ví dụ GIF của tôi.
Adrian Zhang

1
Tôi nghĩ rằng đây không phải là một ngôn ngữ lập trình hợp lệ. IFAICT, BMP không thể kiểm tra tính nguyên thủy, cũng không thêm số.
Adám

3
Xin mọi người lưu ý rằng chúng tôi cho phép các bài nộp không phải ngôn ngữ lập trình theo sự đồng thuận này , vì vậy bài nộp này hoàn toàn tốt. (Và IMO một điểm chuẩn tuyệt vời để có.)
flawr

3

Python 2, 92 91 89 byte

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

Đầu ra dưới dạng ppm nhị phân, sử dụng:

python golf_swiss.py > swiss.ppm

Tăng độ sâu màu cho phép tôi sử dụng không gian cho giá trị tối đa


3

Tcl / Tk, 94

Nếu nó chạy trên vỏ tương tác, người ta có thể viết tắt canvasđể cangridđể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

Nếu nó chạy trên vỏ tương tác, người ta có thể viết tắt canvasthànhcan

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

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.