Намалюйте прапор Швейцарії


46

Завдання: Виведіть прапор Швейцарії.

З нагоди Дня Швейцарії / Bundeesfeiertag Schweizer / Fête nationale suisse / Festa nazionale svizzera / Fiasta naziunala svizra!

Деталі: Прапор складається з білого ( #FFFFFF) хреста на червоному ( #FF0000) тлі. Хрест складається з квадрата 6х6 зі склеєними на кожну сторону руками розміром 6х7. Хрест знаходиться в центрі площі 32х32 квадрата, що має відстань від 6 одиниць до кожної сторони. ( Джерело )

Розмір виводу може бути обраний учасником, але зображення повинно точно відповідати цим пропорціям, це означає, що його розмір повинен бути кратним 32.

Мінімальна версія виглядатиме так:


1
У деяких версіях викликів прапора кольоровий вихід ASCII був дозволений, але ви не включили ascii-art . Тільки для підтвердження, вихід ASCII заборонений?
Стівен

1
Правильно, дозволені лише широко відомі формати зображень, а також виведення на екран.
недолік

20
echo 🇨🇭- Я припускаю, що це заборонено
Digital Trauma

Я бачу синій СН, я не бачу, чому це потрібно дозволити.
недолік

1
@Tutleman Я думаю, що це так
Луїс Мендо

Відповіді:


40

SVG (HTML5), 94 83 82 64 байт

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

Збережено 2 байти завдяки @ThePirateBay. Збережено 1 байт завдяки @ATaco. Збережено 18 байт завдяки @CraigAyre, який вказує, що зображення 32 × 32 є прийнятним. Як вказував @Shaggy, це передбачає, що фон за замовчуванням є білим; додайте 22 байти для прапора, який працює на будь-якому тлі:

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


Не потрібно закривати шлях. Ви можете зберегти 4 байти, залишивши шлях відкритим.

Як сказав ThePirateBay, право >в тезі шляху не є обов'язковим.
Атако

6
У SVG є своя "мова для гольфу"? Oo
ETHproductions

16
Цей код, який звик писати синтаксис XML, змушує очі кровоточити
Наюкі

3
Ви можете зняти viewBoxдля мінімальної версії? <svg><path d=M0,0V32H32V0M6,13h7V6h6v7h7v6H19v6H13V19H6 fill=red
Крейг Ейр

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 для побудови графіків окремих пікселів, утворюючи 32 × 32 зображення швейцарського прапора у лівому верхньому куті екрана.

Код передбачає, що для режиму відео вже встановлено режим 0x13, що також означає, що для нього потрібен дисплей VGA. Інші відео-режими можуть бути використані, але вимагаючи VGA, ви отримуєте дві речі: (1) квадратні пікселі та (2) палітра за замовчуванням, що включає в себе справжній 100% червоний ( 0xFF0000) (це означає, що вам не потрібно марнувати байти, змінюючи палітру кольори). Перш ніж запустити цю програму, вам потрібно буде переключити ваш дисплей у режим 0x13; наступний код - все, що потрібно для цього:

mov  ax, 0x13
int  0x10

Код не має інших припущень, і він повинен працювати на будь-якому сумісному з x86 обладнанням у сумісній з DOS операційній системі.

Однак програма припиняється відразу після нанесення прапора, тому запит DOS зазвичай буде повторно надруковано у верхньому лівому куті екрана, прикриваючи кілька верхніх рядків прапора. Тому, якщо ви хочете дивуватися справжньому виводу, вам потрібно повісити / призупинити систему перед тим, як він RETпоскаже. Ось скріншот того, як це виглядає, працює у віртуальній машині FreeDOS:

Можливо, можна додатково переграти це, записуючи дані пікселів безпосередньо у буфер відео, тим більше, що я вже припускаю режим 0x13. Я ще цього не пробував. INT 0x10це вже досить коротка інструкція, але якщо я можу використовувати однобайтові рядкові інструкції для запису даних пікселів безпосередньо в пам'ять, то це може призвести до значної економії коду.


Вражає! Я дуже не бачу асм, але коли я це роблю, це завжди дуже цікаво
Адріан Чжан

Приємно бачити шанувальників ASM.
Billal Begueradj

Ви можете зробити це за допомогою трьох плиток шириною 32 пікселя, що повторюються на всіх рядках. Він використовує більше даних, але економить кількість операцій. Крім того, ви можете використовувати три плитки шириною 16 пікселів для лівої сторони та виконати симетричну операцію, перевернувши ліву сторону.
ATL_DEV

21

MATL , 29 байт

2Y66t&Y"OJQht3$)6thYaQK7hBoYG

Спробуйте в MATL Online!

Пояснення

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 байт.
-4 байти шляхом виведення у файл aбез розширення.

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 Добрий дзвінок, чомусь я думав, що це буде довше ... Дякую!
Джастін Марінер

Ви можете назвати файл .pngзамість a.pngі зберегти байт.
користувач2428118

@ user2428118 Приємно, чи можна було б взяти його далі і просто назвати його a, без розширення? Її ще можна відкрити, просто потрібно сказати, щоб її відкрили у переглядачі фотографій.
Джастін Марінер

1
@ OlivierGrégoire Я вважаю, що це занадто далеко від ідеї мого рішення, але ви можете опублікувати це як своє
Джастін Марінер

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's -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 не може відображатися з меншою шириною)

ПОПЕРЕДЖЕННЯ . Ви можете додати ці 2 рядки коду:, t.setFramerateLimit(60);t.setVerticalSyncEnabled(true);щоб ваш процесор не нагрівався під час запуску коду. Я не ставив їх у оригінальний код з міркувань гольфу.


Ви можете трохи зменшити це, замінивши 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();}}
вилів на fors

Крім того, ви можете зберегти два байти, видаливши пробіли: e.type == 0=> e.type==0, можливо, навіть !e.type(не пам'ятайте пріоритет). 24.f }=>24.f}
Zacharý

О, і чи using namespace sf;можливо?
Zacharý

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 - мова програмування мого власного дизайну. Станом на 15:08 сьогодні у мене є працюючий перекладач і перевірив, що програма працює належним чином. Однак перекладача не існувало до початку цього змагання, тому я не змагаюся.

Braindraw - це те саме, що і Brainf ***, за винятком того, що він працює на трьох двовимірних масивах, а не на один одновимірний масив. Ці масиви називаються r, g і b і виконують роль каналів червоного зеленого та синього кольорів. Оператор r переміщує вказівник на червоний канал тощо. Вгору ^, вниз - v.


9
З нетерпінням чекаю на те, щоб побачити перекладача для цього, можна спробувати спробувати
Darren H

1
Це звичайно весела ідея, я з нетерпінням чекаю і перекладача! (Технічно ми допускаємо лише мови, які були реалізовані, і ми розглядаємо інтерпретатор як їх визначення.)
недолік

Це правильно, що ви явно нічого не виводите, а просто виводите ціле «полотно» в підсумку? Ви вважаєте, що полотно нескінченне?
недолік

Насправді: немає перекладача, я думаю, це означає, що моя заява є неконкурентною. Ну добре. Але так, ця програма сама по собі не має виходу, обчислювальний простір відображається під час і після запуску програми. Полотно теоретично нескінченне, але, реалізуючи, я, мабуть, просто зробить його великою фіксованою шириною на зразок 512x512
бензол

Ця мова, здається, здатна вирішувати складність зображувальних викликів. А ви зараз працюєте на перекладача?
Zacharý

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 чудовий
Загс

1
О, який тепер розкішний третій параметр Pxl-On ... це змушує мене плакати лише маючи монохромність :(
Ray

10

Математика, 83 байти

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

наступний - від @ ASCII (я думав, що це жарт, але це працює!)

Математика, 23 байти

"CH"~CountryData~"Flag"

-10 байт від @Jonathan Frech


4
У Mathematica немає вбудованого швейцарського прапора?
CJ Dennis

4
CountryData["Switzerland","Flag"]але це може не мати правильних пропорцій
лише ASCII

6
У Mathematica є вбудований для всього, але це?
сергіол

10
"Switzerland"~CountryData~"Flag"заощаджує вам більше
A 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проміжної обгортки для флексокса з негативом 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, ви отримаєте зображення з назвою 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 байт

Збережено 2 байти завдяки користувачеві2428118
Збережено 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, 194 129 байт

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 У комплекті.

1
Для подальшого ознайомлення, коли вам потрібно, <canvas>ви можете безпосередньо ввести відповідь у свій відповідь. Дивіться codegolf.stackexchange.com/a/136972/47097
darrylyeo

6

JavaScript (ES6) у HTML4 (?), 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>!

Завдяки Джастіну Марінеру, збережіть 2 байти.


5

Löve2D , 139 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

Пітон 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-й рядок, щоб відкрити його з gimp на Linux.
Тім

5

Perl 5 , 184 байт

176 байт код + 8 для -Mutf8 -p.

Я не зовсім впевнений, що це так, як потрібно, він покладається на те, що пустий вхід подається відповідно до цього мета-повідомлення , який не працює в 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

Вихід

Вихід - 32х32.

Вихід GFA

Примітка: Дійсно використовується "білий" колір, хоча на емуляторі він виглядає сірим (і навіть на реальному, якщо ви не повернете яскравість досить високою).


5

R, 171 140 байт.

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=2, tзамість того type, cдля col, bдля border. І 0*1:4коротше, ніж c(0,0,0,0).
Грегор

Насправді ви можете піти з відповідності позиції plot: plot(0,0,'n',l,l,xaxs="i",yaxs="i")(призначення m="i"фактично коштує вам один байт). При всьому цьому він зводиться до 141 байт.
Грегор

Я повністю забув про часткове узгодження. Дякую!
Алекс Акшельм

Ще пару байтів вимкнено: lі xlim/ ylimне потрібні, просто plot(0:32,0:32,...). Я також адаптував ваш підхід і скоротив його до 117 тут, використовуючи rectзамістьpolygon .
Грегор

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)

РЕДАКТУЙТЕ : завдяки flawr за збереження досить багато байтів!

Ось результат на octave-online.net, завдяки sanchises

Результати


Я не впевнений у Octave, але в MATLAB слід працювати:x(32,32,3)=0; x(:,:,1)=1; x(7:26,14:19,:)=1; x(14:19,7:26,:)=1; imshow(x*255)
невдача

BTW: Ласкаво просимо до PPCG !!!
flawr

Octave-online.net показує фотографії.
Санчіз

5

GIF, 97 байт

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

Дешево і важко, але варто.

EDIT: Деякі символи не в коді вище, ось Pastebin для шістнадцятирічного в форматі GIF в.

EDIT: стислий до 97 байт за допомогою онлайн-інструменту.


1
Здається, що з фрагмента коду було видалено деякі недруковані символи. Можливо, спробуйте опублікувати шістнадцятковий дамп.

18
Як ви вимовляєте мову?
Олівер

1
@Oliver ZHAIF
Ніл

1
Gimp створює файл GIF, який виглядає однаково лише у 95 байтах (менше, ніж у багатьох інших рішеннях). Ось шістнадцятковий смітник цього.
Армін Ріго

6
З якого часу GIF є мовою програмування?
Adám

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, я сподіваюся, що ви з цим все гаразд?

Це розумно, але, на жаль, ОП каже, що прозорі пікселі заборонені. codegolf.stackexchange.com/questions/136927/draw-the-swiss-flag/…
darrylyeo

На насправді, це є білим. За замовчуванням усі веб-сторінки мають білий фон, а прапор сам по собі прозорий, але це лише внутрішнє визначення прозорості. Зовнішнє визначення прозорості було б, якщо пікселі в цьому регіоні (білий плюс) можуть змінювати свій колір в деяких умовах (або можуть встановлюватися випадковим чином). Однак, оскільки я використовую і HTML, і JavaScript, весь вихід - це червоний прапор з білим хрестом. Ви не можете розглядати полотно та фон окремо. Відображення полотна на тлі добре визначено, і результат завжди містить білий хрест за визначеннями специфікацій.

Я сподіваюся, що це трохи зрозуміліше, я маю на увазі, що ви можете не погодитись, але якщо ви дійсно задумаєтесь про це, я впевнений, що ви знайдете мою відповідь цілком відповідає вимогам ОП.

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

56 байт збережено завдяки 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 байт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

Тікз, 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слід попрацювати, щоб зберегти 5В. Можливо, ви можете зекономити більше, працюючи в звичайному TeX , навіть із TikZ
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векторизований. Типовий розмір вікна побудови графіку - 7in x 7in. Він виводить наступне:

Швейцарський прапор у графі вікно

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)

Маючи багато натхнення у відповіді Алекса Екшельма та дякуючи Ріфт за збереження ще кількох байтів.


3
ви можете зберегти 4 байти, змінившись bg="red"на bg=2той самий у палітрі за замовчуванням
Rift

4

Постскрипт, 301 286 187 байт

/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

Дякуємо анонімному редактору, який запропонував скоротити 99 байт!


Просто щоб повідомити: хтось подав редакцію гольфу на цю посаду. Згідно з нашою політикою її було відхилено, але ви можете розглянути можливість впровадження деяких змін.
Rɪᴋᴇʀ

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 байт

Ось растрова карта з 1-бітовою глибиною кольору, використовуючи 24-бітове визначення кольору. Останні шість байтів другого рядка - це палітра і наступний - це піксельний масив. Кожні чотири байти містять цілий ряд пікселів.

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
Ха-ха, у вас є 1 приклад GIF.
Адріан Чжан

1
Я думаю, що це не дійсна мова програмування. IFAICT, BMP не може ні перевірити просте, ні додати цифри.
Адам

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

Вихід у вигляді двійкового проміле, використання:

python golf_swiss.py > swiss.ppm

Збільшення глибини кольору дозволило використовувати простір для максимального значення


3

Tcl / Tk, 94

Якщо він працює на інтерактивній оболонці, можна скоротити canvasдо canі gridв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

Якщо вона працює на інтерактивній оболонці, її можна скоротити canvasдо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

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.