Намалюйте державний прапор Ісландії


107

Цьогорічне Євро-2016 закінчилося, і, крім пари негативних заголовків, відбувся і дуже позитивний сюрприз - збірна Ісландії з футболу . Давайте намалюємо їх національний прапор.

Вхідні дані

Ну, очевидно, що це завдання не впливає.

Вихідні дані

  • Намалюйте прапор Ісландії у будь-якому застосованому візуальному форматі не менше 100 х 72 пікселів або 25 х 18 символів .
  • Збережіть вихідний файл або подайте його миттєво - приклади таких форматів: зображення, як png, jpg тощо, векторна графіка, малюйте на полотні HTML або навіть використовуйте символи, що не містять пробілів, для візуалізації.
  • Використовуйте ці кольори : синій : #0048e0, білий : #ffffffі червоний : #d72828.
  • Якщо ваша мова не підтримує конкретні значення кольорів, використовуйте стандартні значення для червоного , синього та білого кольорів з ANSI-кольорів .
  • Намалюйте прапор із правильними пропорціями, як показано на малюнку нижче:

Котельня

  • Можна написати програму або функцію. Якщо це анонімна функція, додайте приклад, як викликати її.
  • Це тому найкоротша відповідь у виграші байтів.
  • Стандартні лазівки заборонені.

Таблиця лідерів

Якщо ви не можете знайти свою відповідь, відформатуйте мову та кількість байтів, як це пояснено в розділі " Інформація " на таблиці лідерів .


Цей виклик натхненний малювати національний прапор Франції .


20
Набагато складнішим був би прапор моєї країни, який також зробив набагато краще, ніж очікували в євро цього року - Уельс. :-)
Гарет

24
@Gareth Я з нетерпінням чекаю на водонепроникну специфікацію дракона. ;)
Мартін Ендер

4
Схоже, синій на зображенні вище темніший за фактичний#0048e0
Луїс Мендо

10
@MartinEnder Чи вирізає його на кам'яному планшеті? Це водонепроникний.
іммібіс

5
@MartinEnder Mathematica матиме його.
gcampbell

Відповіді:


259

Пітон 3, 190 172 171 169 167 160 159 147 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)

Вихід:

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

Анімовані:

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

Edit1: Поле 18 байтів, видаливши обрізання, спочатку створивши зображення 25 * 18.

Edit2: 1 байт для гольфу, використовуючи #fffзамість цього white.

Edit3: 2 байти в гольфі шляхом вивільнення імпорту.

Edit4: Golf 2 байти, видаливши другий аргумент методу зміщення.

Edit5: Поле байтів 7 байтами, показуючи зображення замість збереження. (потрібен imagemagick, встановлений на Unix)

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

Edit7: 12 байтів із голліфом, знову переписавши імпорт. (спасибі @Dennis)

Edit8: Додана анімація.

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

Edit10: 4 байти в гольфі завдяки Альберту Реншоу!


42
Дійсно приємна відповідь.
insertusernamehere

17
Це геній! (Вікінг) Капелюх до вас.
Іоанна

25
Нічого собі, рідко я проголосую за питаннями типу коду-гольфу на SO, але ще рідше, коли я приєднаюся до цілої нової спільноти лише для цього. Цей компенсаційний злом нагадує те, що ми раніше мали робити, перш ніж у вас, коли молоді юнаки отримали ваші одиничні пам'яті для роботи. Відмінна робота.

5
геній, справді! 💡
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

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

зображення2


22
п'яте оновлення викликало мережу +810 представників по всій широкій ... Дякую! (Так, це перший сайт, де я досягаю 200 представників: D)
Джакомо Гарабелло

1
Чи не повинен результат бути "принаймні 100 х 72 одиниць, де одиниця - піксель чи символ"? Це не відповідає цій вимозі, але я підозрюю, що ОП допустила помилку при формулюванні цього визначення.
Kritzefitz

4
@Kritzefitz Добре, що персонаж займає багато пікселів, тому він може бути пікселем замість символу. Знайшли дірку.
Ерік Аутгольфер

@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

Картина: Прапор Ісландії


Як ви зробили клітини квадратними? Ви робили це вручну або з будь-яким іншим сценарієм, який не входить? Я хотів би це побачити, навіть якщо це не є частиною вашої забитої програми.
mbomb007

Я зробив це вручну, код для зміни ширини комірки досить простий, де я міг би її додати, але розміри не відповідають розв’язкам рядків / стовпців або моніторів, якщо ви не встановите розмір на основі пікселів, з яких неможливо зробити що я міг знайти. З того, що я прочитав, ви повинні знайти дозвіл і зробити деяку математику для перетворення пікселів у розмір, який приймає функція.
tjb1

1
Також код для перетворення його в пікселі виглядає так, що він вимагає від вас жорсткого коду або якоїсь частини роздільної здатності, або PPI (я не дуже розумію формулу), тому, здається, він також не працюватиме на всіх пристроях.
tjb1

2
І, тільки для повноти (це стосується встановлення квадратних комірок, а не самого рішення), якщо ви переходите до перегляду макетів сторінки, ви можете встановити висоту та ширину комірок на конкретні значення, наприклад 0.2cm. Це збережеться, як тільки ви перейдете назад, і не потрібно намагатися опрацювати химерні співвідношення сторін Excel :-) До речі, якщо ви хочете ще декілька прикольних хитрощів Excel, подивіться відео "Jock Spolsky" You do you at Excel ".

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

29

MATL , 57 56 52 49 48 байт

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

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

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

EDIT: Можна експериментально спробувати на сайті 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 байт завдяки @insertusernameтут.

Збережено 20 байт завдяки @ user2428118, видаливши всі pxs. Зауважте, що для цього потрібна візуалізація сторінки в режимі примх, тому вона не працює в фрагментах стеку.

Я міг би скопіювати підхід Python для обгортання зображення із зміщенням, але це було б не цікаво.

Безголовки:

*, *::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>та <body>елементи необов’язкові, тому браузери автоматично створюють їх, якщо їх немає.

Більше веселощів:


2
Ви можете зберегти 1 байт , замінивши whiteна #fff.
insertusernamehere

@insertusernameту Так, спасибі
gcampbell

1
Якщо ви застосуєте CSS у режимі диваків (сторінка без доктрипу), ви можете зменшити його до 264 байт, опустивши pxвсюди.
користувач2428118

@ 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


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?
Ерік Аутгольфер

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ +56трактується як +56+0, ні +28+28.
bodqhrohro

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 та Йохану Коелману.


Бачачи це PAPERі BRIGHTприносить стільки добрих спогадів :-)
Луїс Мендо

Чи є інформація про те, скільки пам'яті займає програма ZX Spectrum BASIC? Я думав, що це "токенізована" мова, тобто я очікував FOR, що NOTі т.д. займе лише 1 або, можливо, 2 байти кожен
Луїс Мендо

1
@LuisMendo Так, токенізовано - FORце точно один байт. Однак цифри є "антитокенізованими", оскільки вони зберігаються як їх текстові, так і бінарні форми і займають ще 5 байт, ніж ви очікували, отже, NOT PIзамість нуля тощо.
Філіп Кендалл

132 байти, видаливши AT і відкоригувавши граничний тест twitter.com/john_metcalf/status/752760203007791105
імпоматичний

1
122 байти з деякими подальшими оптимізаціями twitter.com/john_metcalf/status/752783690179211264
impomatic

15

ZX Spectrum Z80 Assembly, 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

Прапор Ісландії


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 байти, ховаючи черепаху, але так, щоб це компенсувати.

Це може значно зменшитися, якщо реалізація логотипу дозволить вам встановити розмір вікна. Тоді ви могли 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

Я не знав, що існує англійська мова з логотипом!
Вінсент

1
Абсолютно. Я думаю, що вперше побачив це понад 30 років тому на Apple IIe. У мене це було також на моєму кольоровому комп'ютері TRS-80. Це був мій перший смак використання кутів у геометрії, за кілька років до того, як я був офіційно вивчений у школі.
GuitarPicker

Чому біла рамка навколо неї?
Соломон Учко

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


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


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


9

Python, 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розмір 100x72

(Зауважте, що це не є прямим конкурентом відповіді Р. Капа , оскільки він записує файл і не відображає зображення на екрані)

Ось непільгована версія, яку можна скласти та запустити:

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

Побічна примітка щодо пов’язаних питань: Можливо, слід створити виклик, щоб намалювати прапори

  • Індонезія
  • Польща
  • Фінляндія
  • Франція
  • Нідерланди
  • Таїланд
  • Норвегія

в той самий час:

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


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

Ви можете використовувати path d="m0,0h100v72H0"замість прямокутника, щоб зберегти два байти. Аналогічно використовуйте M0 36H100M36 0V72для даних іншого шляху, що зберігає ще п’ять байтів. І ви можете кинути styleатрибут на користь декларування обох stroke-widthі strokeяк атрибутів, щоб зберегти ще п’ять байтів.
Joey

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

Безумовно

//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);

Вихід:

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


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)
корови брязкають

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"]
dwa

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)


7

ZX Spectrum Z80 Assembly, 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

Підхід такий самий, як у @ Gábor Fekete з Python.

Лівий аргумент colorsдля 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ábor Fekete

@ GáborFekete гм, ви мали на увазі висоту 19 замість 18? не згадував про це, щойно помітив після вашого коментаря
Dan Oak

О так, я написав висоту, але використав значення ширини ...
Gábor Fekete

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

Код написано для TI-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)

Гольф:

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

Це було абсолютно нудно. Я сподіваюсь, що це на емуляторі (я повинен вручну все ввести), але це буквально лише лінії у формі прапора.


1
@ Random832 Як не дивно, так! Перевірте розмір маркера тут: tibasicdev.wikidot.com/line Я не впевнений, що саме байт. Однак я знаю, що на калькуляторі це по суті трактується як графік.
charredgrass

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

Використання

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

Як це працює

Код створює нове зображення і малює на ньому деякі лінії. Це зберігає зображення на диску. Деякі кінцеві точки ліній знаходяться поза видимою областю.

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


Ласкаво просимо до PPCG! Чудовий перший кодогольф, але, схоже, ви могли б його покращити. По-перше, я думаю, ви можете видалити місця тут і там ( b = new=> b=new, using ()=> using(), не використовуйте пробіли після ;с. Якщо хочете, ви можете прочитати наші поради щодо гольфу в C #, щоб знайти поради.
Katenkyo

Дякуємо, пробіли видалено, і я також видаляю користувальний оператор. Зараз я також використовую анонімні змінні.
soema

Впевнені, що вам потрібно Process.Start(f);? Як я розумію, це схоже на cmd start. Оскільки ви можете зберегти або відобразити зображення та вже зберегли його, цей крок здається безглуздим. У такому випадку, можливо, ви також можете уникнути оголошення змінної f.
манатура

Так! Просто збережіть зараз і більше не відкривайте ...
soema

Вам слід порахувати байти для простору імен usings, а також для декларації способу або коробки. Це все є частиною того, що потрібно (завдання дає вам вибір функції чи програми, але не вибір лише групи тверджень).
Джої

6

Python IDLE, 191 172 156 байт

IDLE - стандартна IDE 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відповідно. Роздрукуйте новий рядок після кожного рядка.

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"багатокутника на опцію багатокутник у shape()виклику та отримати екографовий логотип:

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


5

Perl, 134 байти

Примітка: \x1bнасправді символ втечі 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

Похмурий прапор

Використовує аварійні послідовності 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
Дивацтво походить від того, що персонажі вище їх ширини.
Ерік Аутгольфер

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Дійсно, мені було цікаво, чи є квадратні шрифти фіксованої ширини, але я не думаю, що вони виглядатимуть особливо добре! Я можу оновити цю другу версію, щоб виглядати ще ближче (вона не повинна займати більше байтів, ніж зараз, але час ...)
Дом Гастінгс

У TTY ви нічого не можете здивувати, шрифт - THE FONT! Ви не можете змінити це лише тому, що вам це не подобається.
Ерік Аутгольфер

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

Читає колір чорнила, х, у, ширину і висоту і малює прямокутник з цими координатами / розмірами.

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


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