Нарисуй швейцарский флаг


46

Задача: Вывести швейцарский флаг.

С Днем Швейцарского Национального Дня / Швейцарский Бундесфейтаг / Fête nationalale suisse / Festa nazionale svizzera / Fiasta naziunala svizra!

Детали: Флаг состоит из белого ( #FFFFFF) креста на красном ( #FF0000) фоне. Крест состоит из квадрата 6х6 с плечами размером 6х7, склеенными с каждой стороны. Крест находится в центре квадратного фона 32х32, с расстоянием 6 единиц с каждой стороны. ( Источник )

Выходной размер может быть выбран участником, но изображение должно точно соответствовать этим пропорциям, это означает, что его размер должен быть кратным 32.

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


1
В некоторых версиях вызовов флага разрешен цветной вывод ASCII, но вы не включили ascii-art . Просто чтобы подтвердить, вывод ASCII не разрешен?
Стивен

1
Да, разрешены только широко известные форматы изображений, а также вывод их на экран.
flawr

20
echo 🇨🇭- Я предполагаю, что это не разрешено
Цифровая травма

Я вижу синий CH, я не понимаю, почему это должно быть разрешено.
flawr

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, право >в вашем пути тега необязательно.
ATaco

6
У SVG есть свой "язык игры в гольф"? Оо
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.
Биллаль Бегерадж

Вы можете сделать это с помощью трех плиток шириной 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(файл изображения) в каталоге, в котором выполняется этот файл.

Окружающий код, используемый для его запуска: попробуйте онлайн!

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

Результат

Сетка предоставлена ​​предварительным просмотром изображения IntelliJ IDEA (по-видимому).


Вы можете сбрить немало байтов, изменив свой fillPolygonвызов на два fillRect. Я не уверен, что соблюдал размеры, но я придумал, g.fillRect(7,13,18,6);g.fillRect(13,7,6,18)что короче на 64 байта
Аарон

@ Аарон: Хорошо, позвони, я почему-то подумал, что это будет дольше ... Спасибо!
Джастин Маринер

Вы можете назвать файл .pngвместо a.pngи сохранить байт.
user2428118

@ 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's за RowHeight=48болееColumnWidth=2

-6 байт спасибо @ Greedo за -1вместоrgbWhite

Выход

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


1
Фантастика; но вы все равно можете сохранить 6 байтов Interior.Color=-1вместоInterior.Color=rgbWhite
Greedo

@ Гридо, да, что ты знаешь - это фантастика. Я использовал rgbWhiteболее десятичное значение 16777215для ясности, я понятия не имел, что -1будет иметь тот же эффект. Спасибо!
Тейлор Скотт

1
по этой ссылке: ( reddit.com/r/compsci/comments/62x9g9/… ) PowerPoint завершен по Тьюрингу, поэтому мне интересно, как это можно перенести в PowerPoint
Сухрид Мулей,

13

C ++, SFML, 406 399 394 байта

-2 байта благодаря pdpi
-10 байтов благодаря Zacharý

SFML (простая и быстрая мультимедийная библиотека) - это библиотека C ++, написанная для облегчения разработки видеоигр и мультимедийных программ.

Код :

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

Флаг отображается в окне 128x128. Ваша ОС должна иметь возможность отображать окно 128x128 (мой Win8.1 не может отображаться с меньшей шириной)

ВНИМАНИЕ : вы можете добавить эти две строки кода:, t.setFramerateLimit(60);t.setVerticalSyncEnabled(true);чтобы ваш процессор не нагревался при запуске кода. Я не поместил их в исходный код для игры в гольф.


Вы можете немного 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();}}
сузить

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

Ох, а using namespace sf;можно?
Захари

12

Braindraw, 227 байт (неконкурентный) (обновлен для фактической работы)

Неуправляемая версия (241 байт)

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

Слегка играемая в гольф версия (227 байт)

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

Braindraw - это язык программирования моего собственного дизайна. Сегодня, в 15:08, у меня есть работающий переводчик, и я проверил, что программа работает правильно. Однако до начала этого конкурса переводчик не существовал, поэтому я не участвую в конкурсе.

Braindraw такой же, как Brainf ***, за исключением того, что он работает с тремя двумерными массивами, а не с одним одномерным массивом. Эти массивы называются r, g и b и действуют как каналы красного, зеленого и синего цветов. Оператор r перемещает указатель на красный канал и т. Д. И т. Д. Up - это ^, down - это v.


9
С нетерпением жду встречи с переводчиком для этого, может быть интересно попробовать
Даррен Х

1
Это, конечно, забавная идея, я тоже с нетерпением жду переводчика! (Технически мы допускаем только те языки, которые были реализованы, и мы рассматриваем интерпретатор как их определение.)
flawr

Правильно ли, что вы явно ничего не выводите, а просто выводите весь «холст» в конце? Вы предполагаете, что холст бесконечен?
17

В переводе: нет переводчика, я думаю, это означает, что моя заявка не конкурирует. Ну что ж. Но да, эта программа сама по себе не имеет выходных данных, вычислительное пространство отображается во время и после запуска программы. Холст теоретически бесконечен, но в реализации я, вероятно, просто сделаю его с фиксированной шириной большого размера, например, 512x512
бензол

Этот язык кажется способным на колмогоровскую сложность образа. А вы сейчас работаете над переводчиком?
Захари

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

Mathematica, 83 байта

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

следующий от @ ASCII-only (я думал, что это была шутка, но это работает!)

Mathematica, 23 байта

"CH"~CountryData~"Flag"

-10 байт от @Jonathan Frech


4
Mathematica не имеет встроенного для швейцарского флага?
CJ Деннис

4
CountryData["Switzerland","Flag"]но он может иметь неправильные пропорции
только ASCII

6
Mathematica имеет встроенный для всего, но это?
sergiol

10
"Switzerland"~CountryData~"Flag"сохраняет вас еще немного
Симмонс

1
"CH"~CountryData~"Flag"занимает всего 23 байта.
Джонатан Фрех

9

HTML + CSS, 15 + 117 байт = 132 байт

Использование оболочки flexbox с inset box-shadow.

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


HTML + CSS, 18 + 139 137 122 байта = 140 байтов

Предыдущий ответ с использованием borderи промежуточной оболочки flexbox с отрицательным margin.

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


7

GraphicsMagick (?), 96 байт

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

Не уверен, как играть в гольф с GM (это следует рассматривать как язык?). Также не уверен, как считать байты здесь ...

С установленным GM, введите указанный код в Windows CMD, вы получите изображение с именем 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 это то же самое. изм.
17

7

JavaScript + HTML, 99 + 13 = 112 байт

Сохранено 2 байта благодаря user2428118
Сохранено 2 байта благодаря 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>


Чистый 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
Я считаю, что вы должны сделать это с нуля.
Стивен

@Стивен. Хорошо, я тоже добавил.

1
... Вы должны включить его в bytecount
ASCII-only

@ ASCII-только. В комплекте.

1
Для дальнейшего использования в любое время <canvas>вы можете включить HTML-код непосредственно в свой ответ. См. 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

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

5

Python 3 , 190 байт

Сохраните вывод как image.xpmи откройте в вашем любимом текстовом редакторе.

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

Попробуйте онлайн!

Выход:

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

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

Мне пришлось удалить пустую 5-ю строку, чтобы открыть ее с помощью 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

NB: Это действительно использует «белый» цвет, хотя он выглядит серым на эмуляторе (и на реальном тоже, если вы не включите яркость достаточно высоко).


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

Кстати: Добро пожаловать в PPCG !!!
17

Octave-online.net показывает фотографии.
Sanchises

5

GIF, 97 байт

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

Дешевый и байтовый, но оно того стоит.

РЕДАКТИРОВАТЬ: Некоторые символы не в коде выше, вот пастбин для hexdump GIF.

РЕДАКТИРОВАТЬ: сжатый до 97 байт с онлайн-инструментом.


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

18
Как вы произносите язык?
Оливер

1
@ Оливер ЖАЙФ
Нил

1
Gimp создает GIF-файл, который выглядит одинаково только в 95 байтах (меньше, чем во многих других решениях). Вот шестнадцатеричный дамп.
Армин Риго

6
С каких это пор GIF является языком программирования?
Адам

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 Справедливо достаточно.
Даррильо

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
Крис Х

4

R, 109 байт

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

Используется, frameчтобы избежать предварительной настройки графика, но область построения по умолчанию находится на интервале [0,1] вместо [0,32]. Также использует тот факт, что rectвекторизация. Размер окна печати по умолчанию - 7 дюймов х 7 дюймов. Это выводит следующее:

Швейцарский флаг в окне печати

R 125 байтов

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

По умолчанию для pngквадрата 480x480 пикселей. На выходе получается следующий png файл:

Швейцарский флаг


4

R, 112 байт

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

Тем не менее, чтобы гарантировать соотношение сторон, нам нужно еще 5 байтов на общую сумму 117:

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

С большим вдохновением от ответа Алекса Экстелма и благодаря Rift за сохранение еще нескольких байтов.


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
Обращаем ваше внимание на то, что мы разрешаем отправку сообщений не на языке программирования в соответствии с этим консенсусом , так что это представление совершенно нормально. (И ИМО - хороший эталон.)
flawr

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.