Нарисуйте национальный флаг Исландии

107

В этом году Евро-2016 завершилось, и помимо нескольких негативных заголовков, был и очень позитивный сюрприз - сборная Исландии по футболу . Давайте нарисуем их национальный флаг.

вход

Ну, очевидно, этот вызов не имеет никакого вклада.

Выход

  • Нарисуйте флаг Исландии в любом соответствующем визуальном формате размером не менее 100 x 72 пикселей или 25 x 18 символов .
  • Сохраните вывод в файл или представьте его мгновенно - примеры форматов: изображения, такие как png, jpg и т. Д., Векторная графика, рисование на холсте HTML или даже использование непробельных символов для визуализации.
  • Используйте эти цвета : синий : #0048e0, белый : #ffffffи красный : #d72828.
  • Если ваш язык не поддерживает определенные значения цвета, используйте стандартные значения для красного , синего и белого из цветовых кодов ANSI .
  • Нарисуйте флаг в правильных пропорциях, как показано на рисунке ниже:

Boilerplate

  • Вы можете написать программу или функцию. Если это анонимная функция, пожалуйста, включите пример того, как ее вызвать.
  • Это поэтому выигрывает самый короткий ответ в байтах.
  • Стандартные лазейки запрещены.

Leaderboard

Если вы не можете найти ответ, отформатируйте язык и количество байтов, как описано в разделе « Информация » в таблице лидеров .


Этот вызов вдохновлен Draw национального флага Франции .

insertusernamehere
источник
20
Гораздо более сложным был бы флаг моей страны, которая также показала себя лучше, чем ожидалось, на Евро в этом году - Уэльс. :-)
Гарет
24
@Gareth Я с нетерпением жду водонепроницаемой спецификации дракона. ;)
Мартин Эндер
4
Похоже, что синий цвет на изображении выше темнее, чем на самом деле#0048e0
Луис Мендо
10
@MartinEnder Имеет ли значение его вырезание на каменном планшете? Это водонепроницаемый.
user253751
5
@MartinEnder Mathematica будет иметь один.
gcampbell

Ответы:

259

Python 3, 190 172 171 169 167 160 159 147 143 байта

Использование версии PIL 1.1.7, которая имеет устаревший, но не удаленный метод смещения.

from PIL.ImageDraw import*
i=Image.new('RGB',(25,18),'#d72828')
Draw(i).rectangle((1,1,23,16),'#0048e0',~0)
i.offset(9).resize((100,72)).show()

Создает изображение размером 25 * 18 пикселей, заполненное красным, затем рисует прямоугольник размером 23 * 16 пикселей, заполненный синим, с белым контуром в один пиксель. Затем он смещает изображение на (9,9), которое оборачивается по краям, изменяет размер до 100 * 72, а затем показывает его в окне.

Флаг перед смещением:

введите описание изображения здесь (изменен до 100 * 72)

Выход:

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

Анимационная:

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

Редактировать 1: Гольф 18 байтов, удалив обрезку, создав первоначальное изображение 25 * 18.

Edit2: Гольф 1 байт, используя #fffвместо white.

Edit3: Гольф 2 байта путем наложения алиасов.

Редактировать 4: Гольф 2 байта, удалив второй аргумент метода смещения.

Edit5: Гольф 7 байтов, показывая изображение вместо сохранения. (необходимо установить imagemagick в Unix)

Edit6: Гольф 1 байт, переписав импорт.

Редактировать 7: Гольф 12 байтов, переписав импорт снова. (спасибо @Dennis)

Edit8: добавлена ​​анимация.

Edit9: обновлена ​​анимация, так как отсутствовал последний кадр.

Edit10: Гольф 4 байта благодаря Альберту Реншоу!

Габор Фекете
источник
42
Действительно хороший ответ.
имя пользователя здесь
17
Это гений! (Викинг) Шляпа тебе.
Иоанн
25
Ничего себе, редко я голосую за вопросы типа кода в гольф на SO, но еще реже я присоединяюсь к целому новому сообществу просто так. Этот смещенный хак напоминает то, что мы должны были делать до того, как вы, юные болтуньи, получили ваши oodlebytes памяти для работы. Отличная работа.
5
Гений, на самом деле! In
InuYaksa
3
Если вы делаете from PIL.ImageDraw import*, Iстановится Imageи D.Drawстановится Draw, экономя 11 байтов.
Деннис
117

машинный код реального времени x86 для DOS COM, 69 65 63 62 байта

Изготовлен флаг Исландии

Код должен выполняться как исполняемый файл DOS COM.

Особая благодарность

  • Меден , сохранил четыре байта.
  • Меден , сохранил два байта и убрал мерцание.

Машинный код (в шестнадцатеричных байтах)

68 00 A0 07 B8 13 00 CD      10 BE 23 01 AD 91 AD 91 
AC E3 FE 60 30 ED F3 AA      61 81 C7 40 01 FE CD 75 
F2 EB E9 FA B4 00 00 09      28 B4 46 00 0F FA 28 80 
57 0F 14 B4 0C 50 00 FA      14 0C 00 64 00 00

Источник сборки

Источник для NASM.

ORG 100h

push 0a000h
pop es

mov ax, 13h
int 10h

mov si, data


_draw:
 lodsw
 xchg ax, cx

 lodsw
 xchg ax, di

 lodsb

_cycle:
 jcxz _cycle

 ;al = color
 ;cl = col
 ;ch = row

rect:
 pusha
 xor ch, ch
 rep stosb
 popa
 add di, 320
 dec ch
 jnz SHORT rect

jmp SHORT _draw


data: 

        db 250d
        db 180d
        dw 0000h
        db 09h


        db 40d
        db 180d
        dw 0070d
        db 0fh


        db 250d
        db 40d
        dw 22400d
        db 0fh

        db 20d
        db 180d
        dw 80d
        db 0ch


        db 250
        db 20
        dw 25600d 
        db 0ch


        dw 0000h
Маргарет Блум
источник
13
Это действительно крутой первый ответ! Добро пожаловать!
AdmBorkBork
5
Вы можете сэкономить 2 байта, заменив «mov» на «xchg» в 10 ч. И 13 ч. И еще 2 байта, заменив «test cx, cx / jz» на «jcxz» в 16 ч.
Меден
3
Еще несколько мыслей. Так как программа работает в бесконечном цикле, вы можете избежать мерцает только сделав петлю короче: _loop: jcxz _loop. Вы также можете сократить 2 байта от конца фрагмента данных, если вы измените порядок загрузки cxиdi
meden
Еще раз спасибо @meden. Мерцание было совершенно ненужным в действительности :) Я также удалил mov bx, 320и переместил 320 в add di, 320(ранее add di, bx).
Маргарет Блум
Отлично. Теперь у вас есть твердое преимущество над всеми ответами машинного кода в этой задаче. Просто ради правильности: лучше двигаться jcxz _cycleсразу после xchg ax,cxэтого, чтобы не загружать байты после конца данных. И есть некоторые вводящие в заблуждение комментарии в источнике: ;dx = row. dxне используется нигде в коде.
Меден
55

C, 194 191 183 байт

#define C "\x1b["
#define A "@@@@@@"
y;f(){for(;y++<14;)printf(y>5&&y<10?y>6&&y<9?C"31m"A A A A"@\n":C"0m"A"@@"C"31m@@"C"0m"A A"@@@\n":C"34m"A"@"C"0m@"C"31m@@"C"0m@"C"34m"A A"@@\n");}

-3 добавив один @на #define A
-8 добавив [на#define C

использование

main(){f();}

Выход

образ

действительный на основе этого комментария от ОП

Двойной размер, 204 байта

#define C "\x1b["
#define B "████"
#define A B B B
y;f(){for(;y++<28;)printf(y>10&&y<19?y>12&&y<17?C"31m"A A A A"██\n":C"0m"A B C"31m"B C"0m"A A B"██\n":C"34m"A"██"C"0m██"C"31m"B C"0m██"C"34m"A A B"\n");}

image2

Джакомо Гарабелло
источник
22
5-е повышение вызвало широкую сеть представителей +810 ... Спасибо! (Да, это первый сайт, где я достигаю 200 представителей: D)
Джакомо Гарабелло
1
Разве результат не должен быть «не менее 100 x 72 единиц, где единица - это пиксель или символ»? Это не соответствует этому требованию, но я подозреваю, что ФП допустил ошибку при формулировании этого определения.
Kritzefitz
4
@Kritzefitz Ну, персонаж занимает много пикселей, поэтому он может быть пикселем вместо символа. Нашел дыру.
Эрик Outgolfer
@GiacomoGarabello Какой первый сайт на картинке, где вы получили +150? Я не узнаю значок.
@LegoStormtroopr Это PPCG! Взгляните на этот проект GitHub!
Джакомо Гарабелло
31

Excel VBA, 254 228 153 байта

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

Редактировать 1: заменен RGB с возвращенными значениями для цветов, -26 байт

Редактировать 2: Пытался добавить столько предложений, сколько я мог, -75 байт. Я не мог использовать &48e0в качестве цвета, и я не уверен, почему. Всем спасибо

Sub e()
c "A1:CV72", rgbBlue
c "AC1:AR72", -1
c "A29:CV44", -1
c "AG1:AN72", 255
c "A33:CV40", 255
End Sub

Sub c(d, f)
Range(d).Interior.Color = f
End Sub

Рисунок: Флаг Исландии

tjb1
источник
Как вы сделали клетки квадратными? Вы делали это вручную, или с другим скриптом, не включенным? Я хотел бы увидеть это, даже если это не часть вашей забитой программы.
mbomb007
Я сделал это вручную, код для изменения ширины ячейки достаточно прост, где я мог бы добавить его, но размеры не совпадают между разрешениями строк / столбцов или мониторов, если вы не установите размер на основе пикселей, который нельзя сделать из что я мог найти. Из того, что я прочитал, вы должны найти разрешение и сделать некоторые математические вычисления, чтобы преобразовать пиксели в размер, который принимает функция.
tjb1
1
Кроме того, код для преобразования его в пиксели выглядит так, как будто он требует жесткого кода либо в части разрешения, либо в формате PPI (я не совсем понимаю формулу), поэтому, похоже, он не будет работать на всех устройствах.
tjb1
2
И, просто для полноты (для настройки квадратных ячеек, а не самого решения), если вы переключаетесь на представление макета страницы, вы можете установить высоту и ширину ячейки для определенных значений, например 0.2cm. Это будет сохраняться после того, как вы переключитесь обратно, и вам не нужно пытаться отработать причудливые пропорции Excel :-) Кстати, если вам нужны более крутые трюки с Excel, посмотрите видео Джоэла Спольски «Ты сосешь в Excel».
3
Я думаю, что лишние пробелы могут быть удалены, даже если они добавляются автоматически позже.
Эрик Outgolfer
29

MATL , 57 56 52 49 48 байт

7:g2IvtPvt!9Mh2$X>2YG[0E28]8*255/7B[43DD]51/v2ZG

Это дает следующий рисунок (протестировано с компилятором, работающим на Matlab и Octave).

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

РЕДАКТИРОВАТЬ: Вы можете попробовать экспериментально в MATL Online! (вам может понадобиться перезагрузить страницу, если она не работает изначально).

Как это устроено

7:g         % Range from 1 to 7 converted to logical: push array [1 1 1 1 1 1 1]
2           % Push 2
I           % Push 3
v           % Concatenate vertically into a 9×1 array
tPv         % Duplicate, flip vertically, concatenate. Gives a 18×1 array
t!          % Duplicate, transpose: 1×18 array
9M          % Push [1 1 1 1 1 1 1] again
h           % Concatenate horizontally: gives 1×25 array
2$X>        % Maximum of the two arrays, with broadcast. Gives a 18×25 array
            % with 1 for blue, 2 for white, 3 for red
2YG         % Show image with default colormap
[0E28]8*    % Push array [0 72 224] (blue)
255/        % Divide each entry by 255. Colors are normalized between 0 and 1
7B          % 7 converted into binary: push array [1 1 1] (white, normalized)
[43DD]51/   % Push array [215/255 40/255 40/255] (red, normalized)
v           % Concatenate vertically. Gives a 3×3 array
2ZG         % Use as colormap
Луис Мендо
источник
26

CSS, 285 284 264 байта

*,:before,:after{background:#fff;width:100;height:72}body{background:#0048e0;margin:0}:before,:after{content:"";position:fixed}:after{background:#d72828}html:before{top:28;height:16}body:before{left:28;width:16}html:after{top:32;height:8}body:after{left:32;width:8

Сохранено 1 байт благодаря @insertusernamehere.

Благодаря @ user2428118 удалось сэкономить 20 байт, удалив все pxs. Обратите внимание, что для этого требуется, чтобы страница отображалась в режиме причуд, поэтому она не работает в фрагментах стека.

Я мог бы скопировать подход Python, заключающийся в переносе изображения со смещением, но это было бы неинтересно.

Ungolfed:

*, *::before, *::after {
  background: #fff;
  width: 100px;
  height: 72px;
}

body {
  background: #0048e0;
  margin: 0;
}

*::before, *::after {
  content: "";
  position: fixed;
}

*::after { background: #d72828 }

html::before { top: 28px; height: 16px }
body::before { left: 28px; width: 16px }
html::after { top: 32px; height: 8px }
body::after { left: 32px; width: 8px }

При этом используются псевдоэлементы (элементы, которые не написаны в HTML) ::beforeи ::afterдля создания линий на флаге. Причина, по которой он работает без HTML, заключается в том, что в HTML5 элементы <html>and <body>являются необязательными, поэтому браузеры автоматически создают их, если их нет.

Смешнее:

gcampbell
источник
2
Вы все еще можете сохранить 1 байт , заменив whiteна #fff.
insertusername здесь
@insertusernamehere Да, спасибо.
Gcampbell
1
Если вы применяете CSS в режиме причуд (страница без doctype), вы можете уменьшить его до 264 байт, опуская его pxвезде.
user2428118
@ user2428118 Еще полезнее, учитывая, что HTML нет, поэтому нет <!doctype html>!
wizzwizz4
@ user2428118 Почему-то у меня не работает в мобильном Safari. Я посмотрю, когда буду рядом за компьютером.
gcampbell
26

Bash + Imagemagick 7, 94 90 86 85 байт

magick -size 84x56 xc:#0048e0 ${s=-splice 8x8}+28+28 -background \#d72828 $s+32+32 x:

Сохранено 8 байт благодаря @manatwork и 1 байт благодаря @ GlennRanders-Pehrson

bodqhrohro
источник
5
Если вы укажете x:вместо имени выходного файла, результат convertбудет отображаться в окне, что также является приемлемым. И достаточно просто убежать от острого, не нужно цитировать \#d72828.
Манатворк
2
Обычно мы помечаем такие ответы как Bash + Imagemagick . На bashстороне вы можете сэкономить еще 4 -х символов: convert -size 84x56 xc:#0048e0 ${s=-splice 8x8}+28+28 -background \#d72828 $s+32+32 x:.
Манатворк
Просто глупый вопрос: умеешь ли ты ${s=-splice 8x8}+56?
Эрик Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ +56трактуется как +56+0, а не +28+28.
бодхрохро
2
Вы можете сохранить другой байт, используя последнюю версию ImageMagick; тогда команда может быть «магией» вместо «конвертировать».
Гленн Рандерс-Персон
20

ZX Spectrum BASIC, 210 141 92 байта

1 LET n=-VAL "8.5": FOR y=n TO -n: FOR x=n TO VAL "16": LET p=VAL "271"(PI-(ABS x<SQR PI OR ABS y>SQR PI)-NOT INT ABS x*INT ABS y): PRINT PAPER p; BRIGHT p>PI;" ";: NEXT x: PRINT : NEXT y

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

Размер определяется как размер программы BASIC на ленте через SAVE. Большая часть игры в гольф принадлежит некоторым членам группы ZX Spectrum на Facebook , в частности @impomatic и Johan Koelman.

Филип Кендалл
источник
Видя те , PAPERи BRIGHTприносит так много хороших воспоминаний :-)
Луис Mendo
Есть ли информация о том, сколько памяти занимает программа ZX Spectrum BASIC? Я думал, что это был «токенизированный» язык, то есть ожидал FOR, NOTчто он займет всего 1 или 2 байта каждый
Луис Мендо
1
@LuisMendo Да, это токенизировано - FORэто точно один байт. Однако числа являются «анти-токенизированными» в том смысле, что они хранятся как в текстовом, так и в двоичном виде и занимают на 5 байт больше, чем вы ожидаете, поэтому NOT PIвместо нуля и т. П.
Филипп Кендалл
132 байта, удалив AT и отрегулировав граничный тест twitter.com/john_metcalf/status/752760203007791105
impomatic
1
122 байта с некоторыми дальнейшими оптимизациями twitter.com/john_metcalf/status/752783690179211264
бессмысленно
15

Сборка ZX Spectrum Z80, 65 байт

    ld hl,22528
    ld b,7
    ld de,120*256+8 ; white, blue
    ld a,16         ; red

; create the first row

blueleft:
    ld (hl),e
    inc hl
    djnz blueleft

    ld (hl),d
    inc hl
    ld (hl),a
    inc hl
    ld (hl),a
    inc hl
    ld (hl),d
    inc hl

    ld b,14
blueright:
    ld (hl),e
    inc hl
    djnz blueright

; copy the first row to the next 17 rows

    ld l,b
    ld de,22528+32
    ld bc,17*32
    ldir

; add the horizontal stripe

    ld hl,22528+7*32
    dec d
    ld e,b
    ld c,2
midrep:
    ld b,25
midstripe:
    cp (hl)
    jr z,red
    ld (hl),120
red:
    ld (de),a
    inc hl
    inc de
    djnz midstripe

    ld hl,22528+10*32
    ld e,9*32
    dec c
    jr nz,midrep
    ret

Исландский флаг

impomatic
источник
14

Minecraft 1.10.2, 734 персонажа

Это может быть 734 символа, но это единственное представление, сделанное из настоящей шерсти!

summon FallingSand ~ ~1 ~ {Block:log,Time:1,Passengers:[{id:FallingSand,Block:redstone_block,Time:1,Passengers:[{id:FallingSand,Block:activator_rail,Time:1,Passengers:[{id:MinecartCommandBlock,Command:"fill 0 ~ 0 100 ~ 72 wool 11"},{id:MinecartCommandBlock,Command:"fill 28 ~ 0 44 ~ 72 wool"},{id:MinecartCommandBlock,Command:"fill 0 ~ 28 100 ~ 44 wool"},{id:MinecartCommandBlock,Command:"fill 32 ~ 0 40 ~ 72 wool 14"},{id:MinecartCommandBlock,Command:"fill 0 ~ 32 100 ~ 40 wool 14"},{id:MinecartCommandBlock,Command:setblock ~ ~ ~1 command_block 0 replace {Command:fill ~ ~-3 ~-1 ~ ~ ~ air}},{id:MinecartCommandBlock,Command:setblock ~ ~-1 ~1 redstone_block},{id:MinecartCommandBlock,Command:kill @e[type=MinecartCommandBlock]}]}]}]}

Перейдите примерно к -5x -5z, вставьте в блок команд Impulse, установите для него значение «Всегда активно» и нажмите Готово.

Диапазон флагов от 0, 0 до 100, 72; и находится в 3 блоках над командным блоком в том виде, в котором он был размещен. Он отбрасывает довольно большую тень , и под ним появляются монстры. Точно ли это относится к стране Исландии, пока никто не знает.

Справедливое предупреждение - убьет всех MinecartCommandBlock в мире в интересах сохранения четырех символов. Не запускайте это в мире, к которому вы чрезмерно привязаны.

Флаг

Использовал объединитель команд MrGarretto и немного подправил вывод (808 -> 734)

четв
источник
1
«Является ли это точным для страны Исландии ...» 😂
Иордания
2
Разве вы не можете просто использовать kill @e без аргумента селектора цели? Это убьет игрока, но эй, флаг все еще будет там
Куилин Ли
11

Логотип, 216 188 байт

Использование реализации Calormen.com . Для вас, пуристы, реализация использует некоторое сглаживание, которое немного растушевывает края. Я потратил 3 байта, пряча черепаху, так что это должно компенсировать это.

Это может быть значительно уменьшено, если ваша реализация Logo позволяет вам устанавливать размер окна. Тогда вы могли бы wrapи пропустить черепаху, чтобы сделать крест в четыре удара, и пропустить необходимость урезать его рамкой.

сгенерированный скриншот флага

TO X :C :S
setpc :C
setpensize :S
home
pd
setx 100
setx 36
bk 36
fd 72
pu
END
setpc "#48e0
fill
X 7 16
X "#d72828 8
fd 4
pe
pd
setx -4
bk 80
setx 104
fd 80
setx 0
ht
GuitarPicker
источник
Я не знал, что была англоязычная версия логотипа!
Винсент
1
Абсолютно. Я думаю, что впервые увидел его более 30 лет назад на Apple IIe. Я также имел это на своем Цветном Компьютере TRS-80. Это был мой первый опыт использования углов в геометрии, за годы до того, как я официально изучал их в школе.
GuitarPicker
Почему белая граница вокруг него?
Соломон Уцко
1
Я рисовал линии, используя большую ручку, которая оставляет закругленные края на кончиках креста, поэтому мне пришлось сметать его большим ластиком, чтобы выровнять их. Я писал другую версию этого, которая использовала совершенно другой метод в Logo и оказалась меньше. Я также работал над третьей версией, которая печатает большой латинский крест Unicode и рисует его, но пропорции были неверны, и размер выглядел так, как будто он превысил этот.
GuitarPicker
10

Java 8, 449 447 байт:

import java.awt.*;import javax.swing.*;class A extends JPanel{public void paintComponent(Graphics G){super.paintComponent(G);G.setColor(new Color(0,72,224));G.fillRect(0,0,175,126);G.setColor(Color.WHITE);G.fillRect(49,0,28,126);G.fillRect(0,49,175,28);G.setColor(new Color(215,40,40));G.fillRect(56,0,14,126);G.fillRect(0,56,175,14);}public static void main(String[]a){JFrame J=new JFrame();J.add(new A());J.setSize(175,147);J.setVisible(true);}}

Очень поздний ответ, и, видимо, самый длинный. Использует java.awt.Graphicsкласс, чтобы создать и открыть окно с флагом в нем, которое состоит из 5 прямоугольников, состоящих из 1 для синих блоков, 2 для белых полос и 2 для красных полос. Использует соотношение 7 пикселей: 1. Другими словами, для каждого блока используется 7 пикселей. Вот изображение вывода на Macintosh с OS X 10.11:

Пример вывода

Теперь, чтобы найти способ поиграть в гольф немного ниже ...

Р. Кап
источник
Попробуйте переопределить paintвместо paintComponent. Рассмотрите возможность использования анонимного класса для JPanel. Подумайте только об использовании BufferedImage и выводе в файл.
Джастин
@Justin На самом деле, я уже использовал в Blueкачестве 1 огромного прямоугольника для фона. Я просто запутался между этой и другой версией, которую я сделал на Python. В любом случае, спасибо за другие советы! :)
Р. Кап
Еще несколько предложений: не используйте JPanel, просто переопределите JFrame. Если вы сделаете это и просто переопределить paint, вам не нужно Swing, AWT просто, так изменить , JFrameчтобы Frameи удалить импорт. Не звони super.paint. Переставить основной метод; переместите setSizeв paintметод our Frame, удалите переменную Jи добавьте .setVisible(true)в конец анонимный класс. Наконец, измените .setVisible(true)на show()да, это устаревший метод, но он короче. Используйте interfaceдля удаления publicиз основного метода.
Джастин
Окончательный результат в 338 символов (пришлось изменить высоту, так как это кадр):import java.awt.*;interface A{static void main(String[]a){new Frame(){public void paint(Graphics G){setSize(175,119);G.setColor(new Color(0,72,224));G.fillRect(0,0,175,126);G.setColor(Color.WHITE);G.fillRect(49,0,28,126);G.fillRect(0,49,175,28);G.setColor(new Color(215,40,40));G.fillRect(56,0,14,126);G.fillRect(0,56,175,14);}}.show();}}
Джастин
1
Еще лучше: не рисуйте первый прямоугольник, просто позвоните setBackground(color)(также размер все еще был неправильным). Сейчас в 317:import java.awt.*;interface A{static void main(String[]a){new Frame(){public void paint(Graphics G){setSize(175,126);setBackground(new Color(0,72,224));G.setColor(Color.WHITE);G.fillRect(49,0,28,126);G.fillRect(0,49,175,28);G.setColor(new Color(215,40,40));G.fillRect(56,0,14,126);G.fillRect(0,56,175,14);}}.show();}}
Джастин
10

R, 197 195 187 байтов

w="white";r="#d72828";png(w=100,h=72);par(mar=rep(0,4),bg="#0048e0",xaxs="i",yaxs="i");frame();rect(c(0,7,0,8)/25,c(7,0,8,0)/18,c(1,.44,1,.4),c(11/18,1,5/9,1),c=c(w,w,r,r),b=NA);dev.off()

С отступом, с новыми строками и пояснениями:

w="white"
r="#d72828"
png(w=100,h=72) #Creates in working directory a png called Rplot001.png 
                #with a width and a height of 120 and 72 pixels respectively.
par(mar=rep(0,4), #No margin around the plot
    bg="#0048e0", #Blue background
    xaxs="i",yaxs="i") #Axes fits range exactly
frame() #Creates an empty plot which range is xlim=c(0,1) & ylim=c(0,1)
rect(c(0,7,0,8)/25, #Because rect is vectorized
     c(7,0,8,0)/18,
     c(1,.44,1,.4), #i. e. c(25,11,25,10)/25
     c(11/18,1,5/9,1), #i. e. c(11,18,10,18)/18
     c=c(w,w,r,r), # c= is the same as col=, thanks to argument name completion
     b=NA)#No borders
dev.off()

Флаг острова

Редактировать : получается frame(), в отличие от plot()или plot.new()по умолчанию не добавляет границу к графику, смысл bty="n"здесь не нужен.

plannapus
источник
9

8-битный исполняемый файл Atari, 123 байта

Еще одна запись «просто для удовольствия», эта программа предназначена для запуска на 8-битном компьютере или эмуляторе Atari. Например, чтобы загрузить программу на Atari800, просто запустите:

atari800 iceland.xex

Машинный код (в шестнадцатеричных байтах)

ff ff 00 06 74 06 a9 1b 8d 30 02 a9 06 8d 31 02
a9 44 8d c4 02 a9 0f 8d c5 02 a9 84 8d c6 02 d0
fe 70 70 70 48 57 06 48 57 06 48 57 06 48 57 06
48 57 06 48 57 06 48 57 06 48 61 06 48 6b 06 48
6b 06 48 61 06 48 57 06 48 57 06 48 57 06 48 57
06 48 57 06 48 57 06 48 57 06 41 1b 06 ff fe 5b
ff ff ff c0 00 00 00 aa aa 5a aa aa aa 80 00 00
00 55 55 55 55 55 55 40 00 00 00

Исходный код ассемблера (может быть скомпилирован с помощью MADS ):

        org $0600
        lda <dlist
        sta $0230
        lda >dlist
        sta $0231
        lda #$44
        sta $02c4
        lda #$0f
        sta $02c5
        lda #$84
        sta $02c6
loop    bne loop
dlist   dta $70, $70, $70
        dta $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1)
        dta $48, a(line2)
        dta $48, a(line3), $48, a(line3)
        dta $48, a(line2)
        dta $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1)
        dta $41, a(dlist)
line1   dta $ff, $fe, $5b, $ff, $ff, $ff, $c0, $00, $00, $00
line2   dta $aa, $aa, $5a, $aa, $aa, $aa, $80, $00, $00, $00
line3   dta $55, $55, $55, $55, $55, $55, $40, $00, $00, $00

Как это устроено:

Программа использует пользовательский список отображения, основанный на режиме ANTIC 8 (40 пикселей на строку, 2 bpp). Повторные строки загружаются из одной и той же ячейки памяти. После настройки дисплея программа входит в бесконечный цикл.

Скриншот:

iceland.xex работает на Atari800

Locoluis
источник
9

FFmpeg, 339 184 байта

ffplay -f lavfi color=d72828:100x36[r];color=white:64x32[w];color=0048e0:56x28[b];[w][b]overlay=4,split[x][y];[r][x]overlay=-32[d];[d][y]overlay=40,split[t][m];[m]vflip[n];[t][n]vstack

Постараюсь сыграть в эту игру.

100x72 изображение флага Исландии

Gyan
источник
9

Питон, 119 118 114 112 байт

Ничего особенного, просто:

b,w,r="\0H\xe0"*28,"\xff"*12,"\xd7(("*8
A,B=28*(b+w+r+w+2*b),4*(8*w+r+15*w)
print"P6 100 72 255 "+A+B+100*r+B+A

Вывод как двоичный PPM, использование

python golf_iceland.py > iceland.ppm
  • Edit1: сдвинул байт между printи кавычка
  • Edit2: немного короче, как бинарный PPM
  • Edit3: понял, что \0можно использовать вместо\x00

Если кто-то знает, как использовать непечатаемый ASCII-символ напрямую, сообщите об этом.

Преобразовано в PNG

Карл Напф
источник
2
Поздравляем! Вы сильно меня победили: D
Габор Фекете
2
@ GáborFekete побил тебя байтами, да. Но ваш ответ гораздо более умный с этим смещением
Карл Напф
Почему бы не иметь результаты побегов вместо самих побегов?
Соломон Уцко
@SolomonUcko Я пытался b,w,r="\0Hà"*28,"ÿ"*12,"×(("*8и с помощью Python 3, но он не работает.
Карл Напф
@KarlNapf, как это не удалось? Он нарисовал неправильно или выдал сообщение об ошибке? Это также может быть проблемой кодирования.
Соломон Уцко
8

JavaScript, 267 байт

document.write("<div style='width:250px;height:180px;background:"+[[b="bottom",44.4,d="d72828",55.6],[r="right",32,d,40],[b,38.9,e="fff",61.1],[r,28,e,44]].map(([d,a,c,o])=>`linear-gradient(to ${d+(t=",transparent ")+a}%,#${c} ${a}%,#${c} ${o}%${t+o}%)`)+",#003897'")

Нил
источник
1
Уверен, что правильное соотношение левых и правых синей ширины 7 - 14?
Манатворк
1
@manatwork Упс, почему-то я подумал, что 100/25 = 5, поэтому все получилось на 25% шире.
Нил
8

Java, 335 байт

Функция

void w()throws Exception{int w=100,h=72;BufferedImage i=new BufferedImage(w,h,1);Graphics g=i.getGraphics();g.setColor(new Color(18656));g.fillRect(0,0,w,h);g.setColor(WHITE);g.fillRect(0,28,w,16);g.fillRect(28,0,16,h);g.setColor(new Color(14100520));g.fillRect(0,32,w,8);g.fillRect(32,0,8,h);ImageIO.write(i,"png",new File("f.png"));}

И пишет желаемое изображение как f.png , размером 100х72

(Обратите внимание, что это не прямой конкурент Ответа Р. Капа , потому что он записывает файл и не отображает изображение на экране)

Вот версия ungolfed, которую можно скомпилировать и запустить:

import static java.awt.Color.WHITE;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

public class Iceland
{
    public static void main(String[] args) throws Exception
    {
        Iceland i = new Iceland();
        i.w();
    }

    void w() throws Exception
    {
        int B=0x0048e0,R=0xd72828,w=100,h=72;
        BufferedImage i=new BufferedImage(w,h,1);
        Graphics g=i.getGraphics();
        g.setColor(new Color(B));
        g.fillRect(0,0,w,h);
        g.setColor(WHITE);
        g.fillRect(0,28,w,16);
        g.fillRect(28,0,16,h);
        g.setColor(new Color(R));
        g.fillRect(0,32,w,8);
        g.fillRect(32,0,8,h);
        ImageIO.write(i,"png",new File("f.png"));
    }
}

Дополнительное примечание, касающееся связанных вопросов: Может быть, нужно создать задачу, чтобы нарисовать флаги

  • Индонезия
  • Польша
  • Финляндия
  • Франция
  • Нидерланды
  • Таиланд
  • Норвегия

в то же время:

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

Marco13
источник
7

SVG + Javascript, 190 165 164 байта

Ни один эксперт там, повторяя один путь только, чтобы изменить цвет и ширина линии выглядит глупо JavaScript FTW!

document.write(`<svg><rect width=100 height=72 fill="#0048e0"/>${a='<path d="M0 36L100 36M36 0L36 72"style="stroke-width:'}16;stroke:#fff"/>${a}8;stroke:#d72828">`)

Более читабельно:

document.write(`<svg><rect width=100 height=72 fill="#0048e0"/>
${a='<path d="M0 36L100 36M36 0L36 72"style="stroke-width:'}16;stroke:#fff"/>
${a}8;stroke:#d72828">`)
nicael
источник
Вы можете использовать path d="m0,0h100v72H0"вместо прямоугольника, чтобы сохранить два байта. Аналогично, используйте M0 36H100M36 0V72для данных другого пути, что экономит еще пять байтов. И вы можете отбросить styleатрибут в пользу объявления обоих stroke-widthи strokeкак атрибутов, чтобы сохранить еще пять байтов.
Джои
7

Обработка , 136 байтов

size(100,72);noStroke();background(#0048e0);fill(255);rect(28,0,16,72);rect(0,28,100,16);fill(#d72828);rect(0,32,100,8);rect(32,0,8,72);

Ungolfed

//open the window
size(100,72);
//turn off borders that surround shapes by default
noStroke();
//draw blue as the background
background(#0048e0);
//set color to white
fill(255);
//draw 2 white bars
rect(28,0,16,72);
rect(0,28,100,16);
//set color to red
fill(#d72828);
//draw 2 red bars
rect(0,32,100,8);
rect(32,0,8,72);

Выход:

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

Cody
источник
1
Вы можете сбрить еще два байта, используя fillи rectвместо sizeи background. 134 байта:noStroke();fill(#0048e0);rect(0,0,100,72);fill(255);rect(0,28,100,16);rect(28,0,16,72);fill(#d72828);rect(0,32,100,8);rect(32,0,8,72);
GuitarPicker
Добавление к тому, что сказал GuitarPicker, fill(-1)на один байт корочеfill(255)
Kritixi Lithos
7

Mathematica 174 157 байт

Без встроенных

157 байт

r=Rectangle;c=RGBColor;Graphics@{c[{0,72,224}/255],r[{0,0},{25,18}],White,r[{7,0},{11,18}],r[{0,7},{25,11}],c[{43,8,8}/51],r[{8,0},{10,18}],r[{0,8},{25,10}]}

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

или в качестве альтернативы

232 байта

x=Join[Unitize/@Range@7,{0},{2,2},{0},Unitize/@Range@14]&/@Range@7;y=Join[ConstantArray[0,8],{2,2},ConstantArray[0,15]];z=ConstantArray[2,25];ArrayPlot[Join[x,{y},{z,z},{y},x]/.{2->RGBColor[{43,8,8}/51],1->RGBColor[{0,72,224}/255]}]

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

Мартин
источник
1
пожалуйста. То же самое можно применить к вашей второй более длинной версии. u=Unitize;c=ConstantArrayи т. д. ^ _ ^
Дэн Оук
1
Подождите, есть что-то, для чего у Mathematica нет встроенной функции? Я удивлен.
Морган Трепп
@MorganThrapp Я уверен, что раньше был другой ответ Mathematica с использованием встроенного.
gcampbell
3
ЕстьCountryData["Iceland", "Flag"]
два
7

JavaScript (ES6), 231 240

Код внутри фрагмента ниже. Запустите его, чтобы проверить.

d=(w,h,c)=>`<div style=float:left;width:${w}em;height:${h}em;background:#${['0048e0','fff','d72828'][~~c]}>`;document.write(d(25)+(a=[252,61,94,61,476]).concat(b=[261,70,485],810,b,a).map(v=>d(v>>5,v/4&7,v&3)).join(e='</div>')+e+e)

edc65
источник
7

Сборка ZX Spectrum Z80, 51 байт

https://github.com/ralphbecket/Z80/blob/master/IcelandFlag/IcelandFlag.asm

                zeusemulate "48K", "ULA+"
ZeusEmulate_PC  equ Main
ZeusEmulate_SP  equ $FF40

                org $8000

MinWhite        equ 7
MinRed          equ MinWhite + 1
TopRed          equ MinRed + 2
TopWhite        equ TopRed + 1
Height          equ TopWhite + MinWhite - 2
Width           equ TopWhite + 2 * MinWhite - 1

White           equ %01111000
Red             equ %01010000
Blue            equ %01001000

Main            ld hl, $5800 + ((Height - 1) * 32) + (Width - 1)
                ld c, Height

YLoop           ld b, Width

XLoop           ld (hl), Red
                ld de, MinRed * $100 + TopRed
                call Test
                jr c, Next

                ld (hl), White
                ld de, MinWhite * $100 + TopWhite
                call Test
                jr c, Next

                ld (hl), Blue

Next            dec hl
                djnz XLoop
                ld de, -(32 - Width)
                add hl, de
                dec c
                jr nz, YLoop
                ret

Test            equ *
TestX           ld a, b
                cp d
                jr c, TestY
                cp e
                ret c
TestY           ld a, c
                cp d
                ccf
                ret nc
                cp e
                ret

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

Ральф Беккет
источник
7

J 86 84 83 байта

   load'viewmat'
   (255,0 72 224,:215,2#40)viewmat _9 _9|.2(b=.[,~[,.~[,[,.])0 b 14 21$1

Подход такой же, как у @ Габора Фекете с Python.

Левый аргумент colorsfor viewmat- это массив значений RGB, в нашем случае:

255 255 255
  0  72 224
215  40  40

И правильным аргументом является матрица показателей colors.
(_9 _9 |. matrix)поручает переместить matrix9 элементов в каждом измерении.
Страшные строительные (border ([,~[,.~[,[,.]) matrix)обертки matrixс номером border.
И (14 21 $ 1)составляет 14 × 21 матрицу единиц.

Вывод отображается в отдельном окне с изменяемым размером, по умолчанию довольно большое. введите описание изображения здесь

Спасибо

мили - сэкономлено 2 байта с переупорядочением цветов, используется функция ,дублирования чисел (255) для согласования формы.

Дэн Дуб
источник
1
Похоже, что высота флага составляет 26 единиц вместо 25.
Габор Фекете
@ GáborFekete хм, ты имел в виду рост 19 вместо 18? не упомянул об этом, просто заметил после вашего комментария
Дэн Оук
Ах да, я написал высоту, но использовал значения ширины ...
Габор Фекете
дааа, действительно. я ошибся в ценностях. форма исходной матрицы должна быть 14 21( 18 25 - 4 4). исправляя ... спасибо!
Дэн Оук
1
Вы можете сэкономить 2 байта, переупорядочив значения rgb(255,0 72 224,:215 40 40)viewmat _9 _9|.2(b=.[,~[,.~[,[,.])0 b 14 21$1
мили
6

TI-BASIC (неконкурентный), 323 байта

Код написан для ТИ-84, 83 и вариантов. Я уверен, что не проблема в том, что размеры зависят от устройства, а код не окрашен.

Настроить:

:18→Xmax:¯18→Xmin
:10→Ymin:¯10→Ymin
:AxesOff

Рисунок:

:Line(¯15,9,¯8,9)
:Line(¯8,9,¯8,2)
:Line(¯8,2,¯15,2)
:Line(¯15,2,¯15,9)

:Line(¯15,¯9,¯8,¯9)
:Line(¯8,¯9,¯8,¯2)
:Line(¯8,¯2,¯15,¯2)
:Line(¯15,¯2,¯15,¯9)

:Line(¯4,9,10,9)
:Line(¯4,2,10,2)
:Line(¯4,9,¯4,2)
:Line(10,9,19,2)

:Line(¯4,¯9,10,¯9)
:Line(¯4,¯2,10,¯2)
:Line(¯4,¯9,¯4,¯2)
:Line(10,¯9,19,¯2)

:Line(¯15,1,¯7,1)
:Line(¯15,¯1,¯7,¯1)
:Line(¯5,1,20,1)
:Line(¯5,¯1,¯20,¯1)
:Line(¯7,¯1,¯7,¯9)
:Line(¯5,¯1,¯5,¯9)
:Line(¯7,1,¯7,9)
:Line(¯5,1,¯5,9)

Golfed:

:18→Xmax:¯18→Xmin:10→Ymin:¯10→Ymin:AxesOff:Line(¯15,9,¯8,9:Line(¯8,9,¯8,2:Line(¯8,2,¯15,2:Line(¯15,2,¯15,9:Line(¯15,¯9,¯8,¯9:Line(¯8,¯9,¯8,¯2:Line(¯8,¯2,¯15,¯2:Line(¯15,¯2,¯15,¯9:Line(¯4,9,10,9:Line(¯4,2,10,2:Line(¯4,9,¯4,2:Line(10,9,19,2:Line(¯4,¯9,10,¯9:Line(¯4,¯2,10,¯2:Line(¯4,¯9,¯4,¯2:Line(10,¯9,19,¯2:Line(¯15,1,¯7,1:Line(¯15,¯1,¯7,¯1:Line(¯5,1,20,1:Line(¯5,¯1,¯20,¯1:Line(¯7,¯1,¯7,¯9:Line(¯5,¯1,¯5,¯9:Line(¯7,1,¯7,9:Line(¯5,1,¯5,9

Да, отсутствие )преднамеренного.

Размер:

Line(и все такие команды занимают 1 байт, каждое число занимает байт. Это 323 байта.

Это было абсолютно утомительно. Надеюсь, я получу это на эмуляторе (я должен вручную ввести все), но это буквально просто линии в форме флага.

charredgrass
источник
1
@ Random832 Как ни странно, да! Проверьте размер токена здесь: tibasicdev.wikidot.com/line Я не уверен, какой именно байт. Однако я знаю, что на калькуляторе он рассматривается как символ.
обугленная
1
@ Random832 Байт для Line(0x9C. Вы можете увидеть таблицу однобайтовых токенов здесь: tibasicdev.wikidot.com/one-byte-tokens
f ''
1
Не могли бы вы построить график, используя регионы (используя <и >) вместо линий, чтобы получить оттенки серого?
mbomb007
7
Почему это не конкурирует?
Mego
1
Обратите внимание, что теперь есть цветной TI-84, так что вы можете запустить его с небольшими изменениями.
Моше Кац
6

C #, 384 346 317 292 291 289 байт

Простое решение с Windows Forms и GDI

Func<int,int,Point>p=(x,y)=>new Point(x*10,y*10);var b=new Bitmap(250,180);var g=Graphics.FromImage(b);g.Clear(Color.Blue);g.DrawLines(new Pen(Color.White,40),new[]{p(0,9),p(50,9),p(9,-20),p(9,18)});g.DrawLines(new Pen(Color.Red,20),new[]{p(0,9),p(50,9),p(9,-20),p(9,18)});b.Save("b.png");

использование

Запустите новый консольный проект и поместите приведенный выше код в метод main, добавьте System.Drawing-Namespace.

Как это устроено

Код создает новое изображение и рисует на нем несколько линий. Сохраняет изображение на диск. Некоторые из конечных точек линий находятся за пределами видимой области.

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

soema
источник
Добро пожаловать в PPCG! Отличный первый Codegolf, но, похоже, вы могли бы улучшить его. Во-первых, я думаю, что вы можете удалить некоторые пробелы здесь и там ( b = new=> b=new, using ()=> using(), не используйте пробелы после ;s. Если вы хотите, вы можете прочитать наши Советы по игре в гольф на C #, чтобы найти некоторые советы.
Katenkyo
Спасибо, пробелы удалены, и я тоже удаляю оператор using. Я также использую анонимные переменные сейчас.
Соема
Конечно, вам нужно Process.Start(f);? Как я понимаю, это похоже на cmd start. Поскольку вы можете сохранить или отобразить изображение и уже сохранили его, этот шаг кажется бессмысленным. В этом случае, возможно, вы также можете избежать объявления переменной f.
Манатворк
Да! Просто сохрани сейчас и больше не
открывай
Вы должны посчитать байты для пространства имен usings, а также для объявления метода или шаблона программы. Это все часть того, что нужно (задача дает вам выбор функции или программы, но не просто набор операторов).
Джои
6

Python IDLE, 191 172 156 байт

IDLE - это стандартная среда разработки Python. Если у него нет пользовательской темы, STDOUTон синий, STDERRкрасный, а фон белый. Итак, следующий код:

from sys import*
x=[1]*7;y=[0]*7;z=[0,2,2,0]
f=[x+z+x*2]*4+[y+z+y*2,[2]*25]
for s in f+f[::-1]:[[stderr,stdout][-x].write(' █'[x>0]*2)for x in s];print()

Производит этот вывод:

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

Поскольку печатные символы не квадратные, это немного не так, но если взять 1 единицу равной 2 символам в поперечнике и 1 символу, то пропорции будут точными.

Это может быть сделано путем уменьшения размера по ширине и использования символа ASCII для таких блоков, как '#', но это не совсем имеет тот же эффект.


объяснение

Сам код кажется в настоящее время довольно неаккуратным и определенно может быть изменен, но основная идея заключается в следующем:

  • Создайте матрицу, в которой 0представлены пробелы, 1синий блок и 2красный блок.
    • Первая половина построена (в основном путем разрезания / умножения списков) и добавлена ​​в обратную сторону для генерации полного флага.
  • Прокручивайте матрицу, печатая каждое значение в виде пробела или блока для STDERR/ STDOUTсоответственно. Выведите новую строку после каждой строки.
FlipTack
источник
6

Черепаха питона, 176 байт

Еще одна реализация Python Turtle, но на этот раз основанная на штамповке вместо рисования :

from turtle import*
shape("square")
c=color
c("navy")
z=shapesize
z(18,25)
s=stamp
s()
c("white")
z(4,25)
s()
bk(70)
seth(90)
s()
c("#d72828")
z(2,18)
s()
home()
z(2,25)
done()

Использование штамповки и ее непростое масштабирование позволяют сэкономить около 60 байт кода.

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

Самое интересное, что вы можете заменить "square"опцию "turtle"polygon опцией polygon в shape()вызове и получить ecogroovy логотип:

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

cdlane
источник
5

Perl, 134 байта

Примечание: \x1bна самом деле является escape-символом ASCII и считается как 1 байт

($b,$w,$r)=map"\x1b[48;5;${_}m",18,15,1;print@l=("$b "x7,"$w $r  $w $b",$"x14,$/)x7,@m=("$w "x8,"$r  ","$w "x15,$/),("$r "x25,$/)x2,@m,@l

использование

Сохранить как iceland-flag.plи запустить через:

perl iceland-flag.pl

Сквош флаг

Использует escape-последовательности ANSI и предполагает, что для отображения флага используется терминал Linux. Выглядит немного странно с использованием предоставленных измерений.

Perl, 141 байт

Эта версия выглядит немного ближе к подлинным размерам ...

($b,$w,$r)=map"\x1b[48;5;${_}m",18,15,1;print@l=("$b "x14,"$w  $r    $w  $b",$"x28,$/)x7,@m=("$w "x16,"$r "x4,"$w "x30,$/),("$r "x50,$/)x2,@m,@l

Менее сплющенный флаг

Дом Гастингс
источник
1
Странность проистекает из того факта, что символы выше, чем их ширина.
Эрик Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Действительно, мне было интересно, есть ли квадратные шрифты фиксированной ширины, но я не думаю, что они будут выглядеть особенно хорошо! Я мог бы обновить эту вторую версию, чтобы она выглядела еще ближе (она не должна занимать больше байтов, чем сейчас, но время ...)
Дом Гастингс,
На TTY, вы не можете удивиться такой вещи, шрифт это шрифт! Вы не можете изменить это только потому, что вам это не нравится.
Эрик Outgolfer
5

SpecaBAS - 150 байт

1 a=15,b=250,c=180: FOR i=1 TO 5: READ k,x,y,w,h: RECTANGLE INK k;x,y,w,h FILL: NEXT i
2 DATA 1,0,0,b,c,a,71,0,40,c,a,0,71,b,40,2,81,0,20,c,2,0,81,b,20

Считывает цвет чернил, x, y, ширину и высоту и рисует прямоугольник с этими координатами / размерами.

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

Брайан
источник
Вам нужны пробелы после каждого :? Ох, и это 151 байт.
Эрик Outgolfer