Gambarlah bendera nasional Islandia

107

UEFA Euro 2016 tahun ini berakhir dan di samping beberapa tajuk berita negatif, ada kejutan yang sangat positif juga - tim sepak bola nasional Islandia . Mari kita menggambar bendera nasional mereka.

Memasukkan

Yah, jelas tantangan ini tidak punya input.

Keluaran

  • Gambar bendera Islandia dalam format visual apa pun yang berlaku minimal 100 x 72 piksel atau 25 x 18 karakter .
  • Simpan output ke file atau presentasikan secara instan - format contohnya adalah: gambar seperti png, jpg dll., Grafik vektor, menggambar di atas kanvas HTML atau bahkan menggunakan karakter non-spasi putih untuk visualisasi.
  • Gunakan warna-warna ini : biru : #0048e0, putih : #ffffffdan merah : #d72828.
  • Jika bahasa Anda tidak mendukung nilai warna tertentu, gunakan nilai standar untuk merah , biru dan putih dari kode warna ANSI .
  • Gambar bendera dengan proporsi yang benar, seperti yang ditunjukkan pada gambar di bawah ini:

Pelat boiler

  • Anda dapat menulis suatu program atau fungsi. Jika ini adalah fungsi anonim, harap sertakan contoh cara memintanya.
  • Ini adalah sehingga jawaban terpendek dalam byte menang.
  • Celah standar tidak diijinkan.

Papan peringkat

Jika Anda tidak dapat menemukan jawaban Anda, format bahasa dan jumlah byte Anda seperti dijelaskan di " Bagian Info " Pimpinan .


Tantangan ini diinspirasi oleh Draw bendera nasional Perancis .

masukkan nama pengguna di sini
sumber
20
Jauh lebih menantang adalah bendera negara saya, yang juga melakukan jauh lebih baik daripada yang diharapkan di Euro tahun ini - Wales. :-)
Gareth
24
@ Gareth Saya menantikan spesifikasi tahan air naga. ;)
Martin Ender
4
Sepertinya warna biru pada gambar di atas lebih gelap daripada yang sebenarnya#0048e0
Luis Mendo
10
@ MartinEnder Apakah mengukirnya dalam hitungan tablet batu? Itu tahan air.
immibis
5
@MartinEnder Mathematica akan memilikinya.
gcampbell

Jawaban:

259

Python 3, 190 172 171 169 167 160 160 147 143 byte

Menggunakan PIL versi 1.1.7 yang memiliki metode offset usang tetapi tidak dihapus.

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

Membuat gambar 25 * 18 piksel diisi dengan merah kemudian menggambar persegi panjang 23 * 16 piksel diisi dengan biru dengan garis putih satu piksel. Ini kemudian mengimbangi gambar dengan (9,9) yang membungkus di tepi, mengubah ukurannya menjadi 100 * 72 kemudian menunjukkannya di jendela.

Tandai sebelum mengimbangi:

masukkan deskripsi gambar di sini (diubah ukurannya menjadi 100 * 72)

Keluaran:

masukkan deskripsi gambar di sini

Animasi:

masukkan deskripsi gambar di sini

Sunting1: Memotong 18 byte dengan menghapus pemangkasan dengan awalnya membuat gambar 25 * 18.

Sunting2: Golf 1 byte dengan menggunakan #fffbukan white.

Edit3: Golfed 2 byte dengan alias impor.

Sunting4: Golf 2 byte dengan menghapus argumen kedua dari metode offset.

Sunting5: Golfkan 7 byte dengan menunjukkan gambar alih-alih menyimpan. (perlu imagemagick diinstal pada Unix)

Sunting6: Golf 1 byte dengan menulis ulang impor.

Sunting7: Golf 12 byte dengan menulis ulang impor lagi. (terima kasih oleh @Dennis)

Sunting8: Menambahkan animasi.

Sunting9: Animasi yang diperbarui karena tidak ada bingkai terakhir.

Edit10: Golf 4 byte berkat Albert Renshaw!

Gábor Fekete
sumber
42
Jawaban yang sangat bagus.
masukkan nama pengguna di sini
17
Ini jenius! (Viking) Hat off untuk Anda.
Ioannes
25
Wow, jarang saya memberikan suara pada pertanyaan jenis kode-golf di SO, tetapi lebih jarang lagi bahwa saya akan bergabung dengan komunitas baru hanya untuk melakukannya. Retasan offset ini mengingatkan pada apa yang dulu harus kami lakukan sebelum Anda yang masih kecil mendapat oodlebytes memori Anda untuk bekerja dengannya. Kerja bagus.
5
jenius, sungguh! 💡
InuYaksa
3
Jika Anda melakukannya from PIL.ImageDraw import*, Imenjadi Imagedan D.Drawmenjadi Draw, menghemat 11 byte.
Dennis
117

x86 kode mesin mode real untuk DOS COM, 69 65 63 62 byte

Bendera Islandia diproduksi

Kode ini dimaksudkan untuk dieksekusi sebagai executable DOS COM.

Terima kasih khusus

  • meden , menyimpan empat byte.
  • meden , menyimpan dua byte dan menghapus berkedip.

Kode mesin (dalam hex byte)

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

Sumber perakitan

Sumber untuk 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
Margaret Bloom
sumber
13
Ini jawaban pertama yang sangat keren! Selamat datang!
AdmBorkBork
5
Anda dapat menyimpan 2 byte dengan mengganti 'mov' dengan 'xchg' pada 10h & 13h dan 2 byte lainnya dengan mengganti 'test cx, cx / jz' dengan 'jcxz' di 16h
meden
3
Beberapa pemikiran lagi. Sejak program berjalan di loop tak terbatas, Anda dapat menghindari berkedip-kedip hanya dengan membuat loop pendek: _loop: jcxz _loop. Anda juga dapat memotong 2 byte dari akhir potongan data jika Anda mengubah urutan pemuatan cxdandi
meden
Terima kasih lagi @meden. Berkedip-kedip itu benar-benar tidak perlu berlaku :) Saya juga menghapus mov bx, 320dan memindahkan 320 ke add di, 320(sebelumnya add di, bx).
Margaret Bloom
Bagus. Sekarang Anda memiliki keunggulan dalam semua jawaban kode mesin dalam tantangan ini. Hanya demi kebenaran: lebih baik untuk bergerak jcxz _cyclesetelahnya xchg ax,cxsehingga tidak akan memuat byte melewati akhir data. Dan ada beberapa komentar menyesatkan dalam sumber: ;dx = row. dxtidak digunakan di mana pun dalam kode.
meden
55

C, 194 191 183 Bytes

#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 menambahkan satu @di #define A
-8 menambahkan [pada#define C

Pemakaian

main(){f();}

Keluaran

gambar

berdasarkan pada komentar ini dari OP

Output Ukuran Ganda, 204 Bytes

#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

Giacomo Garabello
sumber
22
upvote ke-5 memicu jaringan +810 rep luas ... Terima kasih! (Ya itu adalah situs pertama di mana saya mencapai 200 perwakilan: D)
Giacomo Garabello
1
Bukankah hasilnya harus "setidaknya 100 x 72 unit, di mana unit adalah piksel atau karakter"? Ini tidak memenuhi persyaratan ini, tetapi saya menduga OP membuat kesalahan ketika merumuskan definisi itu.
Kritzefitz
4
@Kritzefitz Nah, sebuah karakter membutuhkan banyak piksel, jadi itu bisa berupa piksel, bukan karakter. Menemukan lubang.
Erik the Outgolfer
@GiacomoGarabello Apa situs pertama di pic di mana Anda mendapat +150? Saya tidak mengenali ikonnya.
@LegoStormtroopr Ini PPCG !! Lihatlah Proyek GitHub
Giacomo Garabello
31

Excel VBA, 254 228 153 byte

Tidak dapat benar-benar menemukan cara untuk mengatur ukuran kolom / baris ke piksel (sehingga membuatnya persegi) karena cara Excel menanganinya sehingga membuatnya bagus dan persegi terlebih dahulu.

Sunting 1: Diganti RGB dengan nilai yang dikembalikan untuk warna, -26 byte

Sunting 2: Mencoba untuk menambahkan sebanyak mungkin saran yang saya bisa, -75 byte. Saya tidak dapat menggunakan &48e0warna dan saya tidak yakin mengapa. Terimakasih semuanya

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

Gambar: Bendera Islandia

tjb1
sumber
Bagaimana Anda membuat sel menjadi persegi? Apakah Anda melakukannya secara manual, atau dengan beberapa skrip lain tidak termasuk? Saya ingin melihatnya, meskipun itu bukan bagian dari program nilai Anda.
mbomb007
Saya melakukannya secara manual, kode untuk mengubah lebar sel cukup mudah di mana saya bisa menambahkannya tetapi ukurannya tidak konsisten antara Baris / Kolom atau resolusi monitor kecuali Anda menetapkan ukuran berdasarkan piksel yang tidak dapat dilakukan dari apa yang bisa saya temukan. Dari apa yang saya baca Anda harus menemukan resolusi dan melakukan beberapa matematika untuk mengubah piksel ke ukuran fungsi menerima.
tjb1
1
Juga kode untuk mengonversinya menjadi piksel sepertinya membutuhkan Anda kode yang sulit baik sebagian dari resolusi atau PPI (saya tidak benar-benar mengerti rumusnya) sehingga sepertinya tidak akan bekerja di semua perangkat juga.
tjb1
2
Dan, hanya untuk kelengkapan (berkaitan dengan pengaturan sel kuadrat daripada solusi itu sendiri), jika Anda beralih ke tampilan tata letak halaman, Anda dapat mengatur tinggi dan lebar sel untuk nilai-nilai tertentu seperti 0.2cm. Ini akan dipertahankan setelah Anda beralih kembali, dan tidak perlu mencoba dan mencari rasio aspek Excel yang aneh :-) Ngomong-ngomong, jika Anda ingin beberapa trik Excel yang lebih keren, lihat video "You suck at Excel" karya Joel Spolsky.
3
Saya pikir spasi tambahan dapat dihapus, meskipun ditambahkan secara otomatis nanti.
Erik the Outgolfer
29

MATL , 57 56 52 49 48 byte

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

Ini menghasilkan gambar berikut (diuji dengan kompiler berjalan pada Matlab dan pada Oktaf).

masukkan deskripsi gambar di sini

EDIT: Anda dapat mencoba secara eksperimental di MATL Online! (Anda mungkin perlu memuat ulang halaman jika tidak berfungsi pada awalnya).

Bagaimana itu bekerja

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
Luis Mendo
sumber
26

CSS, 285 284 264 byte

*,: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

Disimpan 1 byte berkat @insertusernamehere.

Disimpan 20 byte berkat @ user2428118, dengan menghapus semua px. Perhatikan bahwa ini mengharuskan halaman dirender dalam mode quirks, sehingga tidak berfungsi di Stack Snippets.

Saya bisa menyalin pendekatan Python membungkus gambar dengan offset, tapi itu tidak menarik untuk.

Tidak Terkumpul:

*, *::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 }

Ini menggunakan pseudo-elements (elemen yang tidak ditulis dalam HTML) ::beforedan ::afteruntuk membuat garis pada flag. Alasan ia bekerja tanpa HTML adalah bahwa di HTML5 elemen <html>dan <body>opsional, jadi browser secara otomatis membuatnya jika tidak ada.

Lebih menyenangkan:

gcampbell
sumber
2
Anda masih dapat menyimpan 1 byte dengan menggantinya whitedengan #fff.
masukkan nama pengguna di sini
@insertusernamehere Ya, terima kasih.
gcampbell
1
Jika Anda menerapkan CSS dalam mode quirks (halaman tanpa DOCTYPE) Anda dapat membawanya ke 264 byte dengan menghilangkan di pxmana-mana.
user2428118
@ user2428118 Bahkan lebih berguna mengingat tidak ada HTML, karenanya tidak <!doctype html>!
wizzwizz4
@ user2428118 Untuk beberapa alasan itu tidak berfungsi untuk saya di Safari seluler. Saya akan melihat ketika saya berikutnya di depan komputer.
gcampbell
26

Bash + Imagemagick 7, 94 90 86 85 byte

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

Disimpan 8 byte, terima kasih kepada @manatwork, dan 1 byte, terima kasih kepada @ GlennRanders-Pehrson

bodqhrohro
sumber
5
Jika Anda menentukan x:bukan nama file output, convertakan menampilkan hasilnya di jendela, yang juga dapat diterima. Dan cukup untuk hanya melarikan diri tajam, tidak perlu mengutip: \#d72828.
manatwork
2
Biasanya kami memberi label jawaban seperti Bash + Imagemagick . Di bashsisi Anda dapat menyimpan lain 4 karakter: convert -size 84x56 xc:#0048e0 ${s=-splice 8x8}+28+28 -background \#d72828 $s+32+32 x:.
manatwork
Hanya pertanyaan bodoh: Bisakah Anda melakukannya ${s=-splice 8x8}+56?
Erik the Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ +56diperlakukan sebagai +56+0, bukan +28+28.
bodqhrohro
2
Anda dapat menyimpan byte lain dengan menggunakan versi terbaru ImageMagick; maka perintahnya bisa "magick" bukannya "convert".
Glenn Randers-Pehrson
20

ZX Spectrum BASIC, 210 141 92 byte

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

masukkan deskripsi gambar di sini

Ukuran ditentukan sebagai ukuran program BASIC pada kaset via SAVE. Banyak kredit golf untuk beberapa anggota grup ZX Spectrum di Facebook , khususnya @impomatic dan Johan Koelman.

Philip Kendall
sumber
Melihat itu PAPERdan BRIGHTmembawa banyak kenangan indah :-)
Luis Mendo
Apakah ada info berapa banyak memori yang dibutuhkan oleh program ZX Spectrum BASIC? Saya pikir itu adalah bahasa "tokenized", yaitu saya harapkan FOR, NOTdll untuk mengambil hanya 1 atau mungkin masing
Luis Mendo
1
@LuisMendo Ya, ini tokenized - FORtepatnya satu byte. Namun, angka "anti-tokenized" di mana mereka disimpan sebagai teks dan bentuk biner mereka dan mengambil 5 byte lebih dari yang Anda harapkan, karenanya NOT PIbukan nol dan sejenisnya.
Philip Kendall
132 byte dengan menghapus AT dan menyesuaikan tes batas twitter.com/john_metcalf/status/752760203007791105
impomatik
1
122 byte dengan beberapa optimasi lebih lanjut twitter.com/john_metcalf/status/752783690179211264
impomatik
15

ZX Spectrum Z80 Assembly, 65 byte

    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

Bendera Islandia

impomatik
sumber
14

Minecraft 1.10.2, 734 karakter

Mungkin 734 karakter, tetapi sejauh ini hanya pengiriman yang terbuat dari wol asli!

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

Buka sekitar -5x -5z, rekatkan ke dalam blok perintah Impuls, atur ke "Selalu Aktif" dan tekan Selesai.

Bentang bendera dari 0, 0 hingga 100, 72; dan 3 blok di atas blok perintah seperti yang ditempatkan. Itu membuat bayangan yang cukup besar , dan monster muncul di bawahnya. Apakah ini akurat untuk negara Islandia, bagaimanapun, adalah dugaan siapa pun.

Peringatan yang adil - akan / membunuh semua orang MinecartCommandBlockdi dunia dengan tujuan menyelamatkan empat karakter. Jangan menjalankan ini di dunia yang terlalu dekat dengan Anda.

Bendera

Menggunakan perintah combiner MrGarretto dan sedikit mengubah output (808 -> 734)

quat
sumber
1
"Apakah ini akurat untuk negara Islandia ..." 😂
Jordan
2
Tidak bisakah Anda menggunakan kill @e tanpa argumen pemilih target? Itu akan membunuh pemain tapi hei bendera akan tetap ada
Kuilin Li
11

Logo, 216 188 byte

Menggunakan implementasi Calormen.com . Untuk Anda yang puritan, implementasinya menggunakan beberapa antialiasing yang sedikit memperkeruh tepi. Saya membuang-buang 3 byte menyembunyikan kura-kura, jadi itu harus menebusnya.

Ini bisa sangat berkurang jika penerapan Logo Anda memungkinkan Anda mengatur ukuran jendela. Kemudian Anda bisa wrapdan membuat kura-kura membajak untuk membuat salib dalam empat pukulan, dan melompat harus memotongnya dengan perbatasan.

tangkapan layar bendera yang dihasilkan

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
sumber
Saya tidak tahu ada Logo versi berbahasa Inggris!
Vincent
1
Benar. Saya pikir saya pertama kali melihatnya lebih dari 30 tahun yang lalu pada Apple IIe. Saya juga memilikinya di TRS-80 Color Computer saya. Itu adalah rasa pertama saya menggunakan sudut dalam geometri, bertahun-tahun sebelum saya secara resmi mempelajarinya di sekolah.
GuitarPicker
Mengapa perbatasan putih di sekitarnya?
Solomon Ucko
1
Saya menggambar garis menggunakan pena besar, yang meninggalkan tepi bulat di ujung salib, jadi saya harus menyapu dengan penghapus besar untuk memasangnya. Saya sedang menulis versi lain dari ini yang menggunakan metode yang sama sekali berbeda di Logo dan ternyata lebih kecil. Saya juga sedang mengerjakan versi ketiga yang mencetak salib Latin Unicode besar dan mengecatnya, tetapi proporsinya tidak tepat dan ukurannya akan melebihi yang ini.
GuitarPicker
10

Java 8, 449 447 byte:

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

Jawaban yang sangat terlambat, dan juga yang terpanjang di sini, tampaknya. Menggunakan java.awt.Graphicskelas untuk membuat dan membuka jendela dengan bendera di dalamnya, yang dibuat oleh 5 total persegi panjang yang terdiri dari 1 untuk blok biru, 2 untuk garis-garis putih, dan 2 untuk garis-garis merah. Menggunakan 7 piksel: 1 unit rasio. Dengan kata lain, untuk setiap unit, 7 piksel digunakan. Berikut adalah gambar dari output pada Macintosh dengan OS X 10.11:

Contoh Output

Sekarang untuk menemukan cara untuk bermain golf ini sedikit lebih ...

R. Kap
sumber
Coba paintganti alih-alih paintComponent. Pertimbangkan untuk menggunakan kelas anonim untuk JPanel. Pertimbangkan hanya menggunakan BufferedImage dan mengeluarkan ke file.
Justin
@ Justin Sebenarnya, saya sudah menggunakan Blue1 persegi panjang besar sebagai latar belakang. Saya baru saja bingung antara ini dan versi lain yang saya buat dengan Python. Apapun, terima kasih untuk tips lainnya! :)
R. Kap
Beberapa saran lainnya: Jangan gunakan JPanel, cukup timpa JFrame. Jika Anda melakukan ini dan hanya menimpanya paint, Anda tidak perlu Swing, cukup AWT, jadi ubah JFrameto Framedan hapus impor. Jangan panggil super.paint. Atur ulang metode utama; pindahkan setSizeke paintmetode kita Frame, hapus variabel J, dan tambahkan .setVisible(true)ke akhir kelas anonim. Akhirnya, ubah .setVisible(true)menjadi show(), ya itu metode yang sudah usang, tapi lebih pendek. Gunakan a interfaceuntuk menghapus publicdari metode utama.
Justin
Hasil akhir pada 338 karakter (harus mengubah ketinggian juga karena itu bingkai):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();}}
Justin
1
Bahkan lebih baik: jangan cat persegi panjang pertama, panggil saja setBackground(color)(juga ukurannya masih salah). Sekarang pada 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();}}
Justin
10

R, 197 195 187 byte

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

Diindentasikan, dengan baris dan penjelasan baru:

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

Bendera pulau

Sunting : ternyata frame(), bertentangan dengan plot()atau plot.new()tidak secara default menambahkan perbatasan ke plot, artinya bty="n"tidak perlu di sini.

plannapus
sumber
9

Atari 8-bit dieksekusi, 123 byte

Entri "hanya untuk bersenang-senang" lainnya, program ini dimaksudkan untuk dijalankan pada komputer atau emulator 8-bit Atari. Misalnya, untuk memuat program di Atari800, jalankan saja:

atari800 iceland.xex

Kode mesin (dalam hex byte)

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

Kode sumber Assembler (dapat dikompilasi dengan 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

Bagaimana itu bekerja:

Program ini menggunakan daftar tampilan khusus yang didasarkan pada Mode ANTIC 8 (40 piksel per baris, 2 bpp). Baris yang berulang dimuat dari lokasi memori yang sama. Setelah mengatur tampilan, program memasuki loop tak terbatas.

Tangkapan layar:

iceland.xex berjalan pada Atari800

Locoluis
sumber
9

FFmpeg, 339 184 byte

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

Akan mencoba untuk bermain golf ini turun .. Selanjutnya.

Gambar 100x72 dari bendera Islandia

Gyan
sumber
9

Python, 119 118 114 112 byte

Tidak ada yang istimewa, langsung:

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

Output sebagai PPM biner, penggunaan

python golf_iceland.py > iceland.ppm
  • Sunting1: mendorong byte antara printdan tanda kutip
  • Sunting2: sedikit lebih pendek dari biner PPM
  • Sunting3: Figured yang \0dapat digunakan sebagai ganti\x00

Jika seseorang tahu cara menggunakan karakter ASCII yang tidak dapat dicetak secara langsung, beri tahu.

Dikonversi ke PNG

Karl Napf
sumber
2
Selamat! Anda banyak mengalahkan saya: D
Gábor Fekete
2
@ GáborFekete mengalahkan Anda dalam byte, ya. Tetapi jawaban Anda jauh lebih pintar dengan offset itu
Karl Napf
Mengapa tidak memiliki hasil pelarian itu sendiri dan bukannya pelarian itu sendiri?
Solomon Ucko
@SolomonUcko Saya mencoba b,w,r="\0Hà"*28,"ÿ"*12,"×(("*8dan menggunakan Python 3, tetapi tidak berhasil.
Karl Napf
@ KarlNapf, bagaimana itu bisa gagal? Apakah gambarnya salah, atau memberikan pesan kesalahan? Ini juga bisa menjadi masalah penyandian.
Solomon Ucko
8

JavaScript, 267 byte

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

Neil
sumber
1
Yakin rasio 7-14 lebar kiri dan kanan biru benar?
manatwork
1
@manatwork Ups, untuk beberapa alasan saya pikir 100/25 = 5, jadi semuanya berakhir 25% terlalu lebar.
Neil
8

Java, 335 byte

Fungsinya adalah

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

Dan itu menulis gambar yang diinginkan sebagai f.png, dengan ukuran 100x72

(Perhatikan bahwa ini bukan pesaing langsung dari Jawaban oleh R. Kap , karena ia menulis file, dan tidak menampilkan gambar di layar)

Berikut adalah versi yang tidak dikoleksi yang dapat dikompilasi dan dijalankan:

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

Catatan tambahan, berkenaan dengan pertanyaan terkait: Mungkin orang harus membuat tantangan untuk melukis bendera

  • Indonesia
  • Polandia
  • Finlandia
  • Perancis
  • Belanda
  • Thailand
  • Norway

pada waktu bersamaan:

masukkan deskripsi gambar di sini

Marco13
sumber
7

SVG + Javascript, 190 165 164 byte

Tidak ada ahli di sana, mengulangi satu jalur hanya untuk mengubah warna dan lebar garis terlihat konyol 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">`)

Lebih mudah dibaca:

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
sumber
Anda bisa menggunakan path d="m0,0h100v72H0"bukan persegi panjang untuk menyimpan dua byte. Demikian juga, gunakan M0 36H100M36 0V72untuk data jalur lain, yang menyimpan lima byte lagi. Dan Anda dapat menjatuhkan styleatribut untuk menyatakan keduanya stroke-widthdan strokesebagai atribut untuk menyimpan lima byte lainnya.
Joey
7

Memproses , 136 byte

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

Tidak disatukan

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

Keluaran:

masukkan deskripsi gambar di sini

Cody
sumber
1
Anda dapat mengurangi dua byte lagi dengan menggunakan filldan rectbukannya sizedan background. 134 byte: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
Menambahkan pada apa yang dikatakan GuitarPicker, fill(-1)lebih pendek satu byte darifill(255)
Kritixi Lithos
7

Mathematica 174 157 byte

Tanpa builtin:

157 byte

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

masukkan deskripsi gambar di sini

atau sebagai alternatif

232 byte

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

masukkan deskripsi gambar di sini

martin
sumber
1
sama-sama. Hal yang sama dapat diterapkan pada versi kedua yang lebih panjang. u=Unitize;c=ConstantArrayetc ^ _ ^
Dan Oak
1
Tunggu, ada sesuatu yang tidak dimiliki Mathematica untukmu? Aku terkejut.
Morgan Thrapp
@MorganThrapp Saya yakin dulu ada jawaban Mathematica lain menggunakan builtin.
gcampbell
3
AdaCountryData["Iceland", "Flag"]
dwa
7

JavaScript (ES6), 231 240

Kode di dalam cuplikan di bawah ini. Jalankan untuk menguji.

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
sumber
7

ZX Spectrum Z80 Assembly, 51 byte

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

masukkan deskripsi gambar di sini

Ralph Becket
sumber
7

J, 86 84 83 byte

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

Pendekatannya sama dengan @ Gábor Fekete dengan Python.

Argumen meninggalkan colorsuntuk viewmatsebuah array nilai RGB, dalam kasus kami:

255 255 255
  0  72 224
215  40  40

Dan argumen yang tepat adalah matriks indeks colors.
(_9 _9 |. matrix)menginstruksikan untuk menggeser matrix9 item di setiap dimensi.
Konstruksi menakutkan (border ([,~[,.~[,[,.]) matrix)dibungkus matrixdengan angka border.
Dan(14 21 $ 1) membuat 14 × 21 matriks yang.

Outputnya ditampilkan di jendela resizable terpisah, cukup besar secara default. masukkan deskripsi gambar di sini

Terima kasih

miles - menyelamatkan 2 byte dengan menata ulang warna, menggunakan fitur ,duplikat angka (255) untuk bentuk perjanjian.

Dan Oak
sumber
1
Sepertinya ketinggian bendera adalah 26 unit, bukan 25.
Gábor Fekete
@ GáborFekete hm, Anda berarti tinggi adalah 19 bukan 18? tidak menyebutkan itu, baru diperhatikan setelah komentar Anda
Dan Oak
Oh benar saya menulis ketinggian tetapi menggunakan nilai lebar ...
Gábor Fekete
Ya, memang. saya membuat kesalahan dalam nilai. bentuk matriks awal harus 14 21( 18 25 - 4 4). mengoreksi ... terima kasih!
Dan Oak
1
Anda dapat menyimpan 2 byte menata ulang nilai rgb(255,0 72 224,:215 40 40)viewmat _9 _9|.2(b=.[,~[,.~[,[,.])0 b 14 21$1
mil
6

TI-BASIC (non-bersaing), 323 byte

Kode ditulis untuk TI-84, 83, dan varian. Saya harap ini bukan masalah yang ukurannya bervariasi berdasarkan perangkat, dan kode tidak berwarna.

Mempersiapkan:

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

Gambar:

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

Golf:

: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

Ya, kurangnya )disengaja.

Ukuran:

Line(dan semua perintah seperti itu membutuhkan 1 byte, setiap angka membutuhkan satu byte. Itu 323 byte.

Benar-benar membosankan. Saya akan mendapatkan ini pada sebuah emulator semoga (saya harus memasukkan semuanya secara manual) tetapi secara harfiah hanya garis-garis dalam bentuk bendera.

charredgrass
sumber
1
@ Random832 Cukup aneh, ya! Periksa ukuran token di sini: tibasicdev.wikidot.com/line Saya tidak yakin apa byte sebenarnya. Namun saya tahu bahwa pada kalkulator, pada dasarnya diperlakukan sebagai char.
charredgrass
1
@ Random832 Byte untuk Line(adalah 0x9C. Anda dapat melihat tabel token satu-byte di sini: tibasicdev.wikidot.com/one-byte-tokens
f ''
1
Tidak bisakah Anda membuat grafik menggunakan wilayah (menggunakan <dan >) alih-alih garis untuk mendapatkan naungan abu-abu?
mbomb007
7
Mengapa ini tidak bersaing?
Mego
1
Perhatikan bahwa sekarang ada warna TI-84, jadi Anda mungkin bisa menjalankannya di sana hanya dengan sedikit modifikasi.
Moshe Katz
6

C #, 384 346 317 292 291 289 Bytes

Solusi sederhana dengan Windows Forms dan 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");

Pemakaian

Mulai proyek-konsol baru dan letakkan kode di atas dalam metode utama, tambahkan System.Drawing-Namespace.

Bagaimana itu bekerja

Kode menciptakan gambar baru dan menggambar beberapa garis di atasnya. Ini menyimpan gambar ke disk. Beberapa titik akhir garis berada di luar area yang terlihat.

masukkan deskripsi gambar di sini

soema
sumber
Selamat datang di PPCG! Codegolf pertama yang hebat, tetapi sepertinya Anda bisa memperbaikinya. Pertama, saya pikir Anda dapat menghapus beberapa spasi di sana-sini ( b = new=> b=new, using ()=> using(), jangan gunakan spasi setelah ;s. Jika Anda mau, Anda dapat membaca Tips kami untuk bermain golf di C # untuk menemukan beberapa saran.
Katenkyo
Terima kasih, spasi dihapus dan saya menghapus pernyataan menggunakan juga. Saya juga menggunakan variabel anonim sekarang.
soema
Anda yakin perlu Process.Start(f);? Seperti yang saya mengerti, itu mirip dengan cmd start. Karena Anda dapat memilih untuk menyimpan atau menampilkan gambar dan Anda sudah menyimpannya, langkah itu sepertinya tidak ada gunanya. Dalam hal ini mungkin Anda dapat menghindari mendeklarasikan variabel f ​​juga.
manatwork
Iya! Simpan saja sekarang dan tidak ada pembukaan lagi ...
soema
Anda harus menghitung byte untuk namespace usings serta untuk deklarasi metode atau program boilerplate. Ini semua adalah bagian dari apa yang dibutuhkan (tugas memberi Anda pilihan fungsi atau program, tetapi bukan pilihan hanya sekelompok pernyataan).
Joey
6

Python IDLE, 191 172 156 byte

IDLE adalah IDE standar Python. Kecuali memiliki tema khusus, STDOUTberwarna biru, STDERRmerah, dan latar belakang putih. Jadi, kode berikut:

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

Menghasilkan output ini:

masukkan deskripsi gambar di sini

Sebagai karakter yang dicetak sebagai tidak persegi, ini sedikit salah, tetapi jika kita mengambil 1 unit menjadi 2 karakter dan 1 karakter, maka proporsinya tepat.

Ini bisa di-golf, dengan setengah dimensi lebar, dan menggunakan karakter ASCII untuk blok-blok seperti itu '#', tetapi tidak persis memiliki efek yang sama.


Penjelasan

Kode itu sendiri kelihatannya cukup ceroboh saat ini, dan pasti dapat dip Golf, tetapi ide dasarnya adalah:

  • Bangun sebuah matriks di mana 0mewakili spasi, 1mewakili blok biru, dan 2mewakili blok merah.
    • Paruh pertama dibangun (terutama melalui slicing daftar / perkalian), dan ditambahkan ke kebalikan dari dirinya sendiri untuk menghasilkan bendera penuh.
  • Loop melalui matriks, mencetak setiap nilai sebagai spasi atau blok ke STDERR/ STDOUTsesuai. Cetak baris baru setelah setiap baris.
FlipTack
sumber
6

Penyu Python, 176 byte

Implementasi Python Turtle lain tapi kali ini berdasarkan stamping bukannya menggambar :

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

Dengan menggunakan stempel, dan tidak membuatnya mudah diskalakan, menghemat sekitar 60 byte kode.

masukkan deskripsi gambar di sini

Bagian yang menyenangkan adalah Anda dapat mengganti "square"opsi poligon dengan "turtle"opsi poligon dalam shape()panggilan dan mendapatkan logo ecogroovy:

masukkan deskripsi gambar di sini

cdlane
sumber
5

Perl, 134 byte

Catatan: \x1bsebenarnya adalah karakter pelarian ASCII dan dihitung sebagai 1 byte

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

Pemakaian

Simpan sebagai iceland-flag.pldan jalankan melalui:

perl iceland-flag.pl

Bendera terjepit

Menggunakan urutan pelarian ANSI dan mengasumsikan terminal Linux untuk menampilkan bendera. Terlihat agak aneh menggunakan ukuran yang disediakan.

Perl, 141 byte

Versi ini terlihat sedikit lebih dekat ke dimensi asli ...

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

Bendera yang tidak terjepit

Dom Hastings
sumber
1
Keanehan datang dari fakta bahwa karakter lebih tinggi dari lebarnya.
Erik the Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Memang, saya bertanya-tanya apakah ada font dengan lebar tetap persegi, tapi saya tidak membayangkan mereka terlihat sangat bagus! Saya mungkin memperbarui versi kedua agar terlihat lebih dekat (seharusnya tidak memerlukan lebih banyak byte daripada saat ini, tetapi waktu ...)
Dom Hastings
Pada TTY, Anda tidak dapat bertanya-tanya hal seperti itu, fontnya THE FONT! Anda tidak dapat mengubahnya hanya karena Anda tidak menyukainya.
Erik the Outgolfer
5

SpecaBAS - 150 byte

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

Membaca warna tinta, x, y, lebar dan tinggi dan menggambar persegi panjang dengan koordinat / dimensi tersebut.

masukkan deskripsi gambar di sini

Brian
sumber
Apakah Anda perlu spasi setelah masing-masing :? Oh, dan itu 151 byte.
Erik the Outgolfer