Gambarlah bendera nasional Perancis


106

Ada banyak tantangan lainnya bendera diposting tapi tidak satu untuk bendera nasional dari Perancis . Minggu ini sepertinya waktu yang tepat.

Hasilkan flag ini dalam byte sesedikit mungkin:

Bendera Perancis

  • Gambar harus dalam perbandingan 3: 2, dengan ukuran selebar 78 piksel dan tinggi 52 piksel.
  • Setiap garis membutuhkan sepertiga dari lebar.
  • Warna-warna stripe dari kiri ke kanan adalah RGB: (0, 85, 164), (255, 255, 255), (239, 65, 53).
  • Gambar dapat disimpan ke file atau disalurkan mentah ke STDOUT dalam format file gambar apa pun yang umum, atau dapat ditampilkan.
  • Atau, output blok teks setidaknya 78 karakter lebar yang terbuat dari karakter non-spasi yang menggambarkan bendera, menggunakan kode warna ANSI untuk mewarnainya. (Gunakan standar biru, putih, dan merah.)
  • Gambar / pustaka bendera bawaan tidak diizinkan.

Kode terpendek dalam byte menang.

Papan peringkat

Cuplikan Stack di bagian bawah posting ini menghasilkan leaderboard dari jawaban a) sebagai daftar solusi terpendek per bahasa dan b) sebagai leaderboard keseluruhan.

Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:

## Language Name, N bytes

di mana Nukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Misalnya:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:

## Perl, 43 + 2 (-p flag) = 45 bytes

Anda juga dapat membuat nama bahasa menjadi tautan yang kemudian akan muncul di cuplikan:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


4
Nilai-nilai RGB itu tidak cocok dengan gambar Anda. Dari apa yang saya lihat, Anda punya RGB: (0, 35, 149), (255, 255, 255), (237, 41, 57).
gelas kimia

8
Menyimpan palet yang ditentukan secara kompak mungkin adalah bagian tersulit dari masalah ini di sebagian besar bahasa. Mengingat itu, tampaknya agak tidak adil untuk solusi grafis untuk mengizinkan keluaran ANSI dengan palet standar. Mengapa tidak mengizinkan solusi grafis menggunakan pure (0, 0, 255) / (255, 255, 255) / (255, 0 0) untuk meningkatkan level lapangan bermain?
JohnE

15
Setiap garis membutuhkan sepertiga dari lebar. Mungkin lebih menarik untuk menggunakan varian Naval: dengan peraturan tertanggal 17 Mei 1853, angkatan laut kembali menggunakan proporsi 30:33:37, yang sekarang terus digunakan, karena mengepakkan bendera membuat bagian-bagian lebih jauh dari tali bendera tampak lebih kecil.
Ben Jackson

34
echo 🇫🇷tidak cukup besar
Trauma Digital

5
@ JohnE saya setuju. Aturan warna memberi solusi ASCII-art keuntungan besar. Mereka juga tidak membuat tantangan lagi "sulit" (hanya menambahkan byte benar) untuk bahasa yang dapat menggunakan warna sewenang-wenang dan mendiskualifikasi beberapa bahasa keren yang tidak dapat melakukan warna sewenang-wenang.
spaghetto

Jawaban:


38

CJam, 23 22 byte

00000000: 27 9b 22 5c 22 25 1f 22 66 7b 69 27 6d 32 37 2a  '."\"%."f{i'm27*
00000010: 7d 4e 5d 32 36 2a                                }N]26*

Di atas adalah hexdump yang dapat dibalik dengan xxd -r.

Dengan biaya dua byte tambahan - untuk total 24 byte - kita bisa menggunakan warna latar belakang, membuat output sedikit lebih cantik.

00000000: 27 9b 22 2c 2f 29 00 22 66 7b 69 27 6d 53 32 36  '.",/)."f{i'mS26
00000010: 2a 7d 57 4e 74 32 36 2a                          *}WNt26*

Bagaimana itu bekerja

Di kedua program, kami menggunakan urutan pelarian ANSI \x9bXYm- di mana Xadalah 3untuk warna foreground dan 4untuk warna latar belakang, dan Ymenentukan warna yang akan digunakan - untuk beralih di antara tiga warna bendera.

'<CSI>       Push the '\x9b' character (Control Sequence Introducer).
"\"%<US>"    Push the string of the ISO 8859-1 characters with code
             points 34, 37, and 31.
f{           For each character in the string, push the CSI and that
             character; then:
  i            Cast the character to integer.
  'm27*        Push 27 m's. The first completes the control sequence,
               the remaining 26 will be printed.
}
N]           Wrap the generated array and "\n" in an array.
26*          Repeat it 26 times.

Program lainnya serupa.

Keluaran

keluaran


Saat ini saya tidak yakin seberapa tinggi saya harus membuat "gambar".
Dennis

Saya menjawab 78x30 dalam jawaban saya. Dimensi-dimensi dalam Lucida Console 9 pt (font default untuk xterm) memberi yang paling dekat dengan 3: 2.
Mego

Anda bisa menggunakan balok penuh untuk 'cantik'
Matthew Roh

75

Bash Murni (pada OSX), 84

Terminal OSX default mendukung emoji penuh warna. Tidak yakin apakah ini dianggap sebagai teks atau output grafis.

printf -vs %26s
for i in {1..26}
do echo ${s// /🔵}${s// /⚪️}${s// /🔴}
done

Outputnya seperti:

masukkan deskripsi gambar di sini


Kalau tidak:

Bash dengan utilitas OSX, 56

yes `dc -e3do26^d1-dn2/*p|tr 201 🔵🔴⚪️`|sed 26q

The dcekspresi:

  • menghitung 3^26-1dan mencetaknya di ternary22222222222222222222222222
  • membaginya dengan 2, lalu dikalikan dengan 3^26. Output di ternary ini adalah1111111111111111111111111100000000000000000000000000

trkemudian menerjemahkan 210 karakter ke 🔵⚪️🔴. yesmenampilkan garis ini tanpa batas. sed 26qmenghentikan output pada 26 baris.


51
Terminal yang mendukung emoji. Wow.
rr-

6
Solusi pertama tidak menggunakan nilai RGB yang tepat juga tidak menggunakan warna ANSI standar, bukan?
Gagang Pintu

@Doorknob Anda tentu saja benar - tidak ada solusi - jadi jawaban ini mungkin melampaui batas. Saya sudah meminta OP untuk klarifikasi
Digital Trauma

3
Itu hanya Unicode.
undergroundmonorail

1
@veve Saya tidak benar-benar berharap jawaban ini menjadi sangat populer, terutama mengingat bahwa ada pertanyaan mengenai validitasnya . Bisakah Anda memberikan yay atau nay, apakah menurut Anda itu valid? Terima kasih!
Digital Trauma

51

Desmos, 30 12 byte

3x>10
3x<-10

Cobalah online.

Saya tidak sepenuhnya yakin apakah ini valid, beri tahu saya jika ada masalah.


3
@ CᴏɴᴏʀO'Bʀɪᴇɴ Warna default merah dan biru dalam urutan itu (saya percaya) sehingga tidak perlu mengaturnya.
spaghetto

7
@CᴏɴᴏʀO'Bʀɪᴇɴ Maka itu adalah generator bendera acak;)
DanTheMan

3
@ CᴏɴᴏʀO'Bʀɪᴇɴ Mereka tidak acak untuk saya - memasukkan dua ketidaksetaraan secara manual membuat saya merah, kemudian biru.
Mego

1
Ini aneh. Saya menjadi merah dan biru juga.
lirtosiast

2
Saya tidak berpikir itu ... juga tidak sesuai dengan aspek rasio tepatnya.
Gagang Pintu

51

Python 2, 47 byte

s="[3%smF";print(s%4*26+s%7*26+s%1*26+"\n")*30

Berisi unsintables - inilah hexdump (dapat dibalik dengan xxd -r):

00000000: 733d 221b 5b33 2573 3b31 6d46 223b 7072  s=".[3%s;1mF";pr
00000010: 696e 7428 7325 342a 3236 2b73 2537 2a32  int(s%4*26+s%7*2
00000020: 362b 7325 312a 3236 2b22 5c6e 2229 2a33  6+s%1*26+"\n")*3
00000030: 30                                       0

Menggunakan kode pelarian ANSI untuk mencetak karakter berwarna ke STDOUT - Saya memilih "F" untuk Prancis. Tidak ada tautan online karena ideone tidak mendukung kode pelarian ANSI dalam output.

Terima kasih kepada Dennis dan xnor untuk beberapa tips hebat.

Tangkapan layar dari xterm:

bendera


1
Anda punya ruang ekstra di sana. in [0]->in[0]
mbomb007

2
1. Anda dapat menggunakan byte ESC yang sebenarnya, bukan \x1b. 2. Bold sepertinya tidak perlu. 3. Saya tidak yakin apakah itu berlaku untuk seni ANSI juga, tetapi pertanyaannya tampaknya mengamanatkan rasio 3: 2.
Dennis

Ini lebih pendek untuk sub dalam parameter dengan format: print("\x1b[3%s;1mF"*78+"\n")%((4,)*26+(7,)*26+(1,)*26)*30.
xnor

16
Tekan F untuk memberi penghormatan
Riking

4
The karakter terlihat sedikit lebih bagus, misalnya print("\x1b[3%s;1m█"*78+"\n")%((4,)*26+(7,)*26+(1,)*26)*30
ali_m

44

HTML / SVG, 76 byte 87 88 121 122 149

Disimpan 27 byte berkat @insertusernamehere

Menghemat 9 byte berkat @ Joey

Disimpan 1 byte berkat @sanchies

Menghemat 1 byte berkat @Neil

<svg><path fill=#0055a4 d=m0,0h26v52H0 /><path fill=#ef4135 d=M52,0h26v52H52

Menggunakan banyak penyalahgunaan sintaks HTML, ini bisa menjadi sangat singkat.


Tangkapan layar output:

Output Bendera Perancis


Atau coba (pastikan browser Anda mendukung SVG):

<svg><path fill=#0055a4 d=m0,0h26v52H0 /><path fill=#ef4135 d=M52,0h26v52H52


3
Saya mencoba untuk mengalahkan Anda dengan CSS dan sekarang saya telah membuat SVG Anda bahwa itu bahkan lebih kecil daripada solusi CSS saya. : D Ini adalah yang terpendek yang dapat saya lakukan untuk bekerja di Safari, Chrome, dan Firefox, panjangnya 122 byte :<svg><rect width=78 height=52 fill="#ef4135"/><rect width=52 height=52 fill="#fff"/><rect width=26 height=52 fill=#0055a4>
insertusernamehere

1
@insertusernamehere Terima kasih, Itu menghemat 27 byte! Saya telah berhasil melanjutkan golf ini hingga 88 byte yang menakjubkan
Downgoat

3
Bagi saya, fill=#0055a4 />berfungsi juga (tidak "), menghemat seluruh byte.
Sanchises

3
@menyimpan seluruh byte? o_O wow : D
developerbmw

4
@developerbmw Sebenarnya, akan lebih mengesankan untuk menyimpan setengah byte ketika Anda memikirkannya.
Sanchises

29

Brainfuck $ , 153 byte

+++++++++++++[->>>++>+++++++>++++>>>>++++++++>+++<<<<<<<<<<]>>>+>>#->$#>$#+++++++>$--->+++++[<]<<+++++[->+++++>++++++<<]>+#>($#([-]>[.>]<[<])>>>>+++<<<<)

Menghasilkan gambar dengan kode warna ANSI. Saya memilih ketinggian 30 seperti Mego .

Implementasi referensi dari tahun 2009 yang tertaut pada halaman esolang telah hilang. Anda dapat menjalankannya menggunakan juru bahasa yang dibuat oleh saya, yang mendukung semuanya dari halaman esolang.

Brainfuck, 258 byte

Ini pada dasarnya adalah hal yang sama, tetapi hanya di Brainfuck tua biasa.

>>+++++++++++++[-<<++>>>>++>+++++++>++++>++++>+++++>++++>++++++++>+++[<]<]>>+>>->>------>--->+++++[<]<<<++++[>+++++[->+++++<]>+[>>[.>]<[<]<-]>>>>>+++[<]+++++[-<+++++>]<+[>>[.>]<[<]<-]>>>>>------[<]+++++[-<+++++>]<+[>>[.>]<[<]<-]>>>>>+++[<]<++++++++++.[-]<<-]

Atau, jika Anda lebih suka yang ini dalam OOo CODE (984 bytes):

one day ThERe WIlL Be PEaCE iN ThIS wORlD
OnE DaY ThERe WiLl Be peaCe iN ThIS wOrld
one day theRe WIlL be pEaCE iN ThIS wORlD
OnE DaY theRe WIlL Be PEaCe in ThIS wORlD
OnE day ThERe WIlL Be PEaCe in ThIS wORlD
OnE day ThERe WIlL Be PEaCE iN ThIS wOrld
OnE DaY ThErE wilL bE PeaCe IN this woRlD
one day There will Be pEacE in ThiS woRld
one Day TheRe will Be PEaCE iN ThIS wOrLd
onE dAY thEre WilL Be PEaCE iN ThIs World
OnE DaY ThERe WIlL bE pEace in ThIS wORlD
OnE DaY thErE Will Be PeAce in this WoRLd
one dAY thErE wilL bE PeaCE in tHIs world
one day theRe WIlL Be PeAce iN tHIS wORlD
OnE DaY ThErE wIll be PEaCE iN ThIS wORlD
one dAY thERe WiLl be peace In THis worLD
onE dAy thErE WilL Be peACe in this world
one Day TheRe wIll Be pEace In thIs WORlD
OnE DaY ThERe WiLl Be peaCE iN ThIS wORlD
OnE day tHEre WIlL bE peace in tHiS World
oNE daY tHere WiLL be PEace IN this world
one day ThERe WIlL bE peaCe IN thIS wORlD
OnE DaY ThERe WIlL Be PEaCE iN THis WoRld
oNE daY thERe wiLL

25

Bash + ImageMagick, 60 77 73 byte

convert -sample 78x52\! - a<<<"P3 3 1 255 0 85 164 255 255 255 239 65 53"

(eh, +17 karakter karena persyaratan warna yang tidak saya perhatikan sebelumnya ...)

Output ke file a, dalam format netpbm:

llama@llama:~$ convert -sample 78x52\! - a<<<"P3 3 1 255 0 85 164 255 255 255 239 65 53"
llama@llama:~$ file a
a: Netpbm image data, size = 78 x 52, rawbits, pixmap

Dapat juga menghasilkan PNG, jika Anda mengubah nama file menjadi a.png(+4 karakter).

Keluaran:

masukkan deskripsi gambar di sini


1
convert -sample 78x52\! - a<<<"P3 3 1 255 0 85 164 255 255 255 239 65 53"
Digital Trauma

@DigitalTrauma Terima kasih! Itu menghemat 4 karakter dan tidak keluar dengan kesalahan. (Juga, saya tidak pernah tahu bahwa ImageMagick dapat membaca dari / menulis ke STDIN.)
Gagang Pintu

Anda bisa menggunakannya -scalesebagai ganti -sample; juga, garis miring terbalik tampaknya tidak perlu
aditsu

25

LaTeX, 139 byte

Terima kasih kepada @WChargin karena telah menghemat 21 byte.

\documentclass{proc}\input color\begin{document}\def\z#1!{{\color[rgb]{#1}\rule{4cm}{8cm}}}\z0,.33,.64!\z1,‌​1,1!\z.94,.25,.21!\end{document}

Ini mencetak gambar 12cm * 8cm berikut pada halaman A4:

masukkan deskripsi gambar di sini

Perhatikan bahwa "Halaman 1" juga dicetak di bagian bawah halaman


1
Nah ini sekitar 100 byte lebih pendek dari asymptotesolusi saya ...
Arcturus

1
s.\newcommand\z[1].\def\z#1untuk menyimpan banyak byte. Selain itu, Anda dapat mencukur habis beberapa dengan menggunakan \def\z#1!{…}\z0,.33,.64!\z1,1,1!\z.94,.25,.21!—yaitu, gunakan pembatas Anda sendiri alih-alih kawat gigi untuk pengelompokan
wchargin

1
Anda juga bisa\input color
wchargin

1
Untuk kelengkapan, versi revisi (139 byte):\documentclass{proc}\input color\begin{document}\def\z#1!{{\color[rgb]{#1}\rule{4cm}{8cm}}}\z0,.33,.64!\z1,1,1!\z.94,.25,.21!\end{document}
wchargin

24

Pyth, 27 byte

 .w*52[smmdGc3CM"\0U¤ÿÿÿïA5

Ada beberapa karakter yang tidak patut, jadi inilah hexdump:

00000000   2E 77 2A 35  32 5B 73 6D  6D 64 47 63  33 43 4D 22  .w*52[smmdGc3CM"
00000010   5C 30 55 A4  FF FF FF EF  41 35                     \0U.....A5

Ini membuat file o.png, yang persis 78 lebar piksel dan tinggi 52 piksel:

masukkan deskripsi gambar di sini

Penjelasan:

.w*52[smmdGc3CM"........
               "........  a string containing the bytes 
                          0, 85, 164, 255, 255, 255, 239, 65, 53
             CM           convert them to integers
           c3             split into 3 lists
      smmdG               duplicate each list 26 times
     [                    put them into a list
  *52                     and duplicate it 52 times
.w                        save it as an image o.png

1
Untuk sesaat, saya pikir saya telah salah mengerti spesifikasi PNG.
primo

1
save it as an image o.png, tapi tidak ada ".png" di mana saja?
rev

1
@ AsidShout Bagaimana Anda memanggil program? Jika Anda menggunakan python3 pyth.py code.pyth, maka Anda dapat menemukannya di direktori yang sama.
Jakube

20

HTML (mode quirks), 68 byte

Ini menggunakan mode kebiasaan untuk membuat bendera.

HTML SANGAT tidak valid, tetapi bekerja pada browser Android 4.4.2 dan pada Firefox 42.0 (pada Windows 7 x64).

<table width=78 height=52><td bgcolor=0055a4><td><td bgcolor=ef4135>

Bendera diberikan dengan ukuran yang tepat dan warna merah dan biru standar. Semua halaman web dimulai dengan latar belakang putih standar.



Sebagai alternatif:

Sebuah sempurna berlaku versi HTML5 (141 bytes):

<!DOCTYPE html><title>x</title><table style=width:78px;height:52px><tr><td style=background:#0055a4><td><td style=background:#ef4135></table>

Periksa validitasnya di: https://html5.validator.nu/

Layar hasil cetak:

hasil validasi


1
Apakah kamu yakin Ketika saya memiliki file HTML dengan hanya baris ini, itu tidak berfungsi di Firefox, Chrome dan Safari. Jika file berisi elemen HTML lain setelah baris itu, itu berfungsi untuk saya. Jadi mungkin Anda tidak bisa membuang jejaknya >?
masukkan nama pengguna di sini

1
"Sangat valid"? Seharusnya style="..."jika itu yang Anda inginkan dalam contoh kedua.
mbomb007

3
@ mbomb007 Yang ingin saya lakukan adalah membuat kode HTML terkecil yang valid. Ini divalidasi dengan validator resmi, jadi, itu adalah HTML yang benar-benar valid . Anda dapat mencobanya sendiri jika Anda tidak percaya.
Ismael Miguel

1
@ mbomb007 Selain itu, kutipan yang hilang adalah masalah terkecil: tidak ada <html>, tidak <head>, tidak <body>, tidak </tr>, tidak, </td>dan tidak ada penutupan semua tag yang hilang.
Ismael Miguel

1
@insertusernamedi sini Anda benar. Itu mengganggu di Android juga. Saya mengujinya di jsfiddle. Tetapi ketika mengakses data:text/html,<table width=78 height=52><td bgcolor=0055a4><td><td bgcolor=ef4135>, itu tidak berfungsi. Perbaiki sekarang, dan gunakan tautan untuk mengujinya.
Ismael Miguel

17

TI-Basic, 52 44 42 byte

GridOff
AxesOff
11
Shade(-Ans,Ans,Xmin,Xmin/3
Shade(-Ans,Ans,Xmax/3,Xmax,1,1,Ans

(mengasumsikan default [-10,10,1] oleh [-10,10,1] area grafik)

Akan lebih pendek 4 byte tanpa 2 baris pertama, tetapi secara default akan memiliki sumbu dan tidak akan terlihat bagus.

Terlihat seperti ini:

masukkan deskripsi gambar di sini

Jika bayangan tidak valid untuk tantangan, beri tahu saya!

Tanpa 2 baris pertama, akan terlihat seperti ini:

masukkan deskripsi gambar di sini


Saya juga akan menyertakan versi tanpa tiga baris pertama hanya sebagai perbandingan.
GamrCorps

1
Saya pikir Anda bisa pergi dari Ymin ke Ymax. Anda juga dapat mengasumsikan layar default dari -10 hingga 10. Saya juga tidak yakin tentang validitas ini, karena wilayah merah dan biru hanya setengah teduh.
lirtosiast

@ThomasKwa Saya mengedit posting saya untuk menunjukkan mengapa saya tidak hanya menggunakan Ymin dan Ymax. Saya tidak menyadari bahwa saya dapat menganggap layar default, tetapi Anda tidak jelas tentang apa itu layar default. Bisakah Anda menjelaskan? Tentang hal "setengah teduh", itu hanya bagaimana TI-Basic menaungi sesuatu, jika tidak valid, saya akan segera mengubahnya.
DanTheMan

1
Layar default adalah Ymin = Xmin = -10, Ymax = Xmax = 10. Kalkulator dimulai dengan pengaturan jendela itu, dan AxesOn dll, sehingga Anda dapat menganggapnya.
lirtosiast

1
@ Doorknob Sejauh yang saya tahu, tidak mungkin melakukan itu tanpa menggunakan ilmu sihir.
DanTheMan

17

ffmpeg, 110 113 116 117 119 108 100 byte

Tampilan, menggunakan ffplay, 100 byte:

ffplay -f lavfi color=#0055a4:49x98[r];color=white:49x98[w];color=#ef4135:49x98[b];[r][w][b]hstack=3

Disimpan ke file, menggunakan ffmpeg, 108 byte:

ffmpeg -lavfi color=#0055a4:49x98[r];color=white:49x98[w];color=#ef4135:49x98[b];[r][w][b]hstack=3 -t 1 .png

Versi saat ini dari perintah akan dibatalkan dengan kesalahan TETAPI akan menghasilkan gambar tunggal ".png", sama seperti yang ditunjukkan di bawah ini.

masukkan deskripsi gambar di sini


8
Wow. Menyalahgunakan ffmpeg untuk membuat gambar ...
Cole Johnson

Heh, saya melihat pertanyaan ini dan berpikir untuk melakukan hal yang sama. Pekerjaan yang bagus membuatnya kompak. Jika diizinkan, Anda dapat membuatnya sedikit lebih kecil dengan menggunakan whitealih-alih #ffffff: nilainya harus sama.
Logan

Aku tahu. Tidak cukup terganggu. Akan melakukannya sekarang.
Gyan

Apakah #fff berfungsi?
ev3commander

Tidak. Tapi saya bisa melewatkan f di f.png
Gyan

16

CSS, 127 128 144 byte

body:before,body:after{content:'';float:left;width:33%;height:100%;background:#0055a4}body:after{float:right;background:#ef4135}

Tidak perlu tag lain, hanya bekerja dengan elemen body-ement.

Suntingan

  • Disimpan 16 byte dengan menghapus display:block;dan beberapa ;.
  • Disimpan 1 byte , menghapus trailing }.

6
Padahal secara teknis CSS bukan bahasa pemrograman dengan definisi kami.
Conor O'Brien

10
@ CᴏɴᴏʀO'Bʀɪᴇɴ Saya tahu - hanya ingin mengalahkan SVG .
masukkan nama pengguna di sini

4
@ CᴏɴᴏʀO'Bʀɪᴇɴ benar, ini bukan jawaban yang valid.
Mego

2
@CᴏɴᴏʀO'Bʀɪᴇɴ it css disimpan sebagai file SASS, karena SASS adalah bahasa scripting apakah itu jawaban yang valid?
fcalderan

6
Ya, CSS biasa adalah file SASS yang valid.
ev3commander

16

JavaScript, 140 143 147 151 153 byte

   with(document)with(body.appendChild(createElement`canvas`).getContext`2d`)for(i=2;i--;fillRect(i*52,0,26,52))fillStyle=i?"#ef4135":"#0055a4"


Suntingan

  • Disimpan 2 byte dengan mengganti 2*i*26dengan i*52. Terima kasih untuk Cᴏɴᴏʀ O'Bʀɪᴇɴ .
  • Disimpan 4 byte dengan refactoring for-loop. Terima kasih untuk produk ETH .
  • Disimpan 2 byte dengan menggunakan withpernyataan. Terima kasih untuk Dendrobium .
  • Disimpan 2 byte dengan mengubah kenaikan menjadi penurunan. Berkat Shaun H .
  • Disimpan 3 byte dengan mengganti fillStyle=["#0055a4","#ef4135"][i]dengan i?"#ef4135":"#0055a4".

3
2*i*26bisa menjadi 52*i, bukan?
Conor O'Brien

7
@ CᴏɴᴏʀO'Bʀɪᴇɴ Tentu saja bisa. Terima kasih. Ini jauh melebihi waktu tidur saya.
masukkan nama pengguna di sini

2
Anda dapat mengurangi 2 byte dengan menggunakan withpernyataan:with(document)with(body.appendChild(createElement`canvas`).getContext`2d`)for(i=0;i<2;fillRect(i++*52,0,26,52))fillStyle=["#0055a4","#ef4135"][i]
Dendrobium

2
simpan satu byte: x=(d=document).body.appendChild(d.createElementkanvas ).getContext2d;for(i=3;--i;x.fillRect(i*52,0,26,52))x.fillStyle=[,"#ef4135","#0055a4"][i]
Shaun H

2
@Dendrobium Itu bagus. Terima kasih banyak.
masukkan nama pengguna di sini

13

R, 59 byte

frame();rect(0:2/3,0,1:3/3,1,,,c("#0055a4",0,"#ef4135"),NA)

Output ditampilkan:

masukkan deskripsi gambar di sini

Satu juga dapat melakukan 49 byte dengan

barplot(rep(1,3),,0,col=c("#0055a4",0,"#ef4135"))

jika Anda tidak keberatan dengan sumbu dan batas:

masukkan deskripsi gambar di sini


2
Rasio tampaknya salah. Saya pikir Anda memiliki rasio 2: 3 pada satu persegi panjang berwarna, bukan rasio 3: 2 pada seluruh bendera.
Fatalkan

Rasio dapat disesuaikan secara manual dengan mengubah ukuran jendela plot.
flodel

3
Agar memenuhi syarat, entri Anda harus bekerja 'di luar kotak'. Lain, siapa pun dapat memposting solusi 6-pixel dan mengatakan 'Anda dapat memperbesar secara manual'.
Sanchises

4
Anda mengatakan 'kapak', saya katakan 'tiang bendera'.

2
@sanchises: Saya orang Prancis dan saya katakan f ** k it. LIBERTE!
flodel

12

Blitz 2D / 3D , 154 108 byte

Ini menghasilkan hal yang persis sama dengan contoh yang diberikan dalam pertanyaan (kecuali untuk anti-aliasing di tepi tempat warna bertemu).

Graphics 800,533
ClsColor 255,255,255
Cls
Color 0,35,149
Rect 0,0,267,533
Color 237,41,57
Rect 533,0,267,533

Output ditampilkan dan terlihat seperti ini:

masukkan deskripsi gambar di sini


12

Mathematica, 63 94 103 byte

Ketika saya pertama kali melihat tantangan ini, saya berpikir Manis! Mathematica akan sempurna untuk ini! sampai saya perhatikan bahwa built-in dilarang: '(

Tapi tunggu! Saya bisa menggunakan grafik batang!

r=RGBColor;BarChart[{1,1,1},ChartStyle->{r@"#0055a4",White,r@"#ef4135"},BarSpacing->0,AspectRatio->2/3]

(Terima kasih kepada Martin Büttner karena mencukur 5 byte tetapi menambahkan 16)

Terlihat seperti ini:

masukkan deskripsi gambar di sini

Jika Anda menambahkan ,Axes->Nonetampilannya seperti ini:

masukkan deskripsi gambar di sini

Jika Anda tidak peduli dengan perbatasan, Anda dapat menggunakan ini: (95 byte)

r=RGBColor;BarChart[{1,1},ChartStyle->{r@"#0055a4",r@"#ef4135"},BarSpacing->1,AspectRatio->2/3,Axes->None]

Terlihat seperti ini:

masukkan deskripsi gambar di sini

Tanpa sumbu:

masukkan deskripsi gambar di sini


3
Axes->None. Anda juga harus teliti AspectRatio->2/3. Mengganti Nama RGBColorsederhana: r=RGBColor;...r["..."]. Anda juga dapat menggunakan notasi awalan untuk menyimpan dua byte lagi r@"#0055a4".
Martin Ender

Jika Anda tidak membutuhkan garis besarnya, cobalah BarChart[{1, 1}, ChartStyle -> {RGBColor["#0055a4"], Red}, BarSpacing -> 1]. Merah terlihat cukup dekat.
DavidC

@DavidCarraher Meh, karena pertanyaan menentukan nilai RGB tertentu, yang harus digunakan dengan tepat.
Martin Ender

Rekomendasi utama saya adalah menggambar dua persegi panjang, bukan tiga. Anda secara teknis benar tentang Merah, namun.
DavidC

Tidakkah perbatasan di sekitar bilah membatalkan solusi ini?
LegionMammal978

11

Javascript (ES6) 117 byte

Menariknya di konsol

for(i=c=s=[];i<156;c[i++]=`color:${[,'blue','#fff'][i%3]||(s+=`
`,'red')}`)s+='%c'+'+'.repeat(26);console.log(s,...c)


2
Untuk 'white'saya pikir itu lebih pendek untuk melakukan: #fff. Juga, warna Merah dan Biru harus cocok dengan warna yang ditentukan dalam spesifikasi
Downgoat

1
Anda dapat menyimpan beberapa byte dengan i=c=s=[]alih - alih i=0,c=[],s=''setelah memperbarui warna yang mungkin sedikit membantu ...
Dom Hastings

1
@ Vɪʜᴀɴ Saat mengeluarkan dalam teks, Anda dapat menggunakan warna standar ( reddan blue). Ini adalah poin ke-2, dihitung dari bawah. Ini dalam spesifikasi.
Ismael Miguel

@HomHastings Tip yang bagus, penggunaan paksaan yang cerdas. Terima kasih!
George Reith

1
@sysreq Teksnya di konsol ... Saya tidak punya kendali atas ketinggian konsol Anda. Ini 78 karakter lebar 52 tinggi.
George Reith

10

pb , 68 byte

cw[Y!52]{cccw[X!26]{b[77]>}ccccw[X!52]{b[77]>}cw[X!78]{b[77]>}<[X]v}

Wow, tantangan yang pb sebenarnya cukup bagus untuknya! Mereka sedikit dan jarang sekali.

Ketika saya sedang menulis spec untuk pb, saya memasukkan keluaran berwarna sebagian besar sebagai lelucon. Bahasa itu dinamai "kuas", mengapa itu tidak warna? Selain program contoh, ini adalah kedua kalinya saya menggunakannya. Ini diimplementasikan dengan kode ANSI sesuai pertanyaan.

Saya menggunakan 'M' sebagai karakter untuk di-output karena cukup padat.

Keluaran:

Saya mengubah ukuran tangkapan layar secara vertikal menjadi dua pertiga dari tingginya karena hurufnya tidak persegi. Outputnya 78 x 52, tetapi tangkapan layar aslinya terlihat sangat salah.

Dengan komentar dan lekukan dan sampah:

c               # Increase output colour by 1
                # 0 (White) -> 1 (Red)
                # Loop ends with output colour == 1, this is cheaper than
                # setting it back to white every time.

w[Y!52]{        # While the brush's Y coordinate is not 52:
    ccc           # Increase output colour by 3
                    # 1 (Red) -> 4 (Blue)

    w[X!26]{      # While the brush's X coordinate is not 26:
        b[77]       # Write 'M' at the brush's coordinates
        >           # Increase X coordinate by 1
    }             

    cccc          # Increase output colour by 4
                    # 4 (Blue) -> 8 mod 8 = 0 (White)

    w[X!52]{      # While the brush's X coordinate is not 52:
        b[77]       # (same as before)
        >         
    }             

    c             # Increase output colour by 1
                    # 0 (White) -> 1 (Red)

    w[X!78]{      # While the brush's X coordinate is not 78:
        b[77]       # (same as before)
        >
    }

    <[X]          # Set X back to 0
    v             # Increase Y by 1
}

78x30 akan memberi Anda dimensi yang Anda inginkan untuk output terminal.
Mego

@Mego Ya, tapi saya tidak yakin apakah itu diizinkan.
undergroundmonorail

Output yang dihasilkan pada xterm dalam font default cocok dengan dimensi yang ditentukan.
Mego

Namun, saya merasa aneh mengukur ukuran output konsol selain "karakter".
undergroundmonorail

1
Ketika karakter Anda 1.2x lebih tinggi dari lebar, mereka tidak menghasilkan piksel yang sangat baik.
Mego

10

C, 115 byte

masukkan deskripsi gambar di sini

#define c"[48;2;%d;%d;%dm%9c"
d=255;main(a){while(a++<9)printf(c c c c,0,85,164,0,d,d,d,0,239,65,53,0,0,0,0,10);}

Berisi unsintables:

00000000: 2364 6566 696e 6520 6322 1b5b 3438 3b32  #define c".[48;2
00000010: 3b25 643b 2564 3b25 646d 2539 6322 0a64  ;%d;%d;%dm%9c".d
00000020: 3d32 3535 3b6d 6169 6e28 6129 7b77 6869  =255;main(a){whi
00000030: 6c65 2861 2b2b 3c39 2970 7269 6e74 6628  le(a++<9)printf(
00000040: 6320 6320 6320 632c 302c 3835 2c31 3634  c c c c,0,85,164
00000050: 2c30 2c64 2c64 2c64 2c30 2c32 3339 2c36  ,0,d,d,d,0,239,6
00000060: 352c 3533 2c30 2c30 2c30 2c30 2c31 3029  5,53,0,0,0,0,10)
00000070: 3b7d 0a                                  ;}.

Agar program ini dapat berfungsi, beberapa hal harus benar:

  • Terminal mendukung ESC [48;2;<r>;<g>;<b>murutan pelarian "truecolor".
  • Terminal bukan xterm, karena implementasi xterm di atas akan menghasilkan warna yang sedikit salah.
  • Terminal sepenuhnya mengabaikan karakter NUL.

Ini juga terlihat lebih bagus jika latar belakang terminal Anda berwarna hitam.

Untuk mengubah ketinggian bendera, berikan argumen baris perintah ke program. Untuk setiap argumen yang dilewati, bendera menjadi satu garis lebih pendek. Ini bukan bug, ini fitur!

Keluaran:

masukkan deskripsi gambar di sini


Mengalami masalah saat menyusun ini dengan gcc(versi 5.1.1). Adakah flag khusus yang diperlukan untuk dikompilasi? "ac: 1: 10: peringatan: ISO C99 memerlukan spasi putih setelah nama makro #define c" \ x1b [48; 2;% d;% d;% dm "
steve

1
@ Sveve apakah itu peringatan kesalahan kita?
Functino

1
@Steve Baru saja mengujinya, gcc 5.2.1. Tidak ada bendera. Menghasilkan 12 peringatan tetapi membuat biner yang berfungsi.
Functino

permintaan maaf - berfungsi dengan baik - bingung dengan peringatan (dan fakta bahwa kode tersebut terlihat cukup samar untuk seorang pemula C seperti saya)
steve

9

MATLAB, 82 79 78 byte

x=[0 1 1 0];y(3:4)=2;fill(x,y,[0 85 164]/255,x+1,y,'w',x+2,y,[239 65 53]/255)

Outputnya seperti:


1
Versi MATLAB yang mana? Tidak bekerja pada r2013a karena warna harus angka desimal dalam kisaran [0,1].
Tom Carpenter

1
Baris berikut berfungsi fill(x,y,[0 85 164]/255,x+1,y,'w',x+2,y,[239 65 53]/255)dan menghemat 2 byte. :) Saya juga menggunakan titik koma alih-alih baris baru untuk menghindari hal-hal tambahan yang dicetak.
Tom Carpenter

1
@ TomCarpenter Saya berjarak pada skala warna 0-1, sudah agak lama sejak saya harus menentukan warna. Sedangkan untuk titik koma / baris baru, saya memilih keterbacaan daripada penulisan konsol, tapi saya sudah mengubah jawaban saya
costrom

9

Visual Basic + Excel, 618 137 byte

Hanya ingin tahu bagaimana ini bisa bermain golf.

EDIT: Keingintahuan puas, terima kasih kepada @Neil dan @JimmyJazzx, 618 byte turun hingga 137 byte

Sub a(): Columns("A:C").ColumnWidth = 26: Range("A1:A13").Interior.Color = RGB(0, 85, 164): Range("C1:C13").Interior.Color = RGB(239, 65, 53): End Sub

Bendera Excel


1
Merekam hasil makro dalam kode sangat tidak efisien. Coba Range("A1:C13").Interior.ColorIndex = 5dan Range("G1:I13").Interior.ColorIndex = 3yang sepertinya cukup.
Neil

2
Maaf, itu adalah Excel 2003, dan saya lupa menyertakan ActiveWorkbook.Colorsuntuk menentukan nilai RGB yang tepat. Excel 2007 memiliki opsi warna tambahan tapi saya tidak mengetahuinya begitu saja.
Neil

1
Saya mendapatkan 137 byte dengan beberapa Perubahan Cepat. Saya pikir Anda bisa Kurangi ini tetapi ini adalah perubahan yang mudah. Sub a():Columns("A:C").ColumnWidth=26:Range("A1:A13").Interior.Color=RGB(0,85,164):Range("C1:C13").Interior.Color=RGB(239,65,53):End Sub
JimmyJazzx

Saya mendapatkan 135 denganSub a:Columns("A:C").ColumnWidth=26:Range("A1:A13").Interior.Color=RGB(0,85,164):Range("C1:C13").Interior.Color=RGB(239,65,53):End Sub
Joey

9

CSS, 102 110 111 114 byte

*{background:linear-gradient(90deg,#0055a4 33%,#fff 33%,#fff 66%,#ef4135 66%) 0 0/78px 52px no-repeat


1
* *{background:linear-gradient(90deg,#0055a4,#0055a4 33%,#fff 33%,#fff 66%,#ef4135 66%) 0 0/78px 52px no-repeat}- satu byte lebih pendek
user2428118

1
sebenarnya satu * sudah cukup :) Terima kasih!
Thomas Eschemann

1
+1; Anda bisa menyimpan byte lain dengan menghapus trailing }.
masukkan nama pengguna di sini

1
Anda dapat menghapus warna pertama, Anda menghemat 8 byte.
Awashi

Anda dapat mengganti yang terakhir 66%dengan 0.
Mr_Green

8

Dyalog APL ( 47 44)

⎕SM←↑1 21 41{(''⍴⍨2/20)1⍺,⍵,⍨4↑0}¨2*8 11 10

Hasil:

bendera


2
Anda dapat melakukan 2*8 11 10?
lirtosiast

1
@ ThomasKwa: terima kasih
marinus

8

iKe , 43 byte

,(0 0;"|"\"#0055A4|#FFF|#EF4135";52#,&3#26)

Ini adalah contoh dari program iKe "tuple mentah" - ini hanya deskripsi dari suatu asal ( 0 0), sebuah palet (3 7#"#0055A4#FFFFFF#EF4135" ) dan bitmap ( +52#'&3#26). Anda perlu membungkus deskripsi seperti ini dalam suatu fungsi atau menggunakan referensi untuk tampilan jika Anda ingin menghidupkannya.

Palet adalah cara yang sangat sederhana untuk menciptakan serangkaian warna CSS, setara hex spesifikasi.

  3 7#"#0055A4#FFFFFF#EF4135"
("#0055A4"
 "#FFFFFF"
 "#EF4135")

Jika persyaratan warna kurang ketat, kami dapat menggunakan salah satu palet bawaan iKe dan menyimpan sejumlah besar karakter:

windows@7 0 4

bendera

Cobalah di browser Anda .

Sunting:

Disimpan satu byte dengan menggunakan #FFFwarna CSS pendek untuk garis putih:

,(0 0;3 7#"#0055A4#FFFFFF#EF4135";+52#'&3#26)
,(0 0;"|"\"#0055A4|#FFF|#EF4135";+52#'&3#26)

Jika ada orang lain yang tertarik bermain dengan iKe, ada manual tentang repo github . inilah masalah lain saya pecahkan menggunakan iKe.

Edit 2:

Disimpan satu byte dengan cara yang lebih sederhana untuk membangun bitmap:

+52#'&3#26
52#,&3#26

Pertanyaan saya di OP belum dijawab, tetapi sebagai catatan jika persyaratan warna yang lebih fleksibel diizinkan, program ini akan menjadi 30 byte dengan menggunakan palet Windows 3.1:

,(0 0;windows@7 0 4;52#,&3#26)

flag2

Karena masalah ini diposting, iKe telah memperoleh fitur yang secara otomatis memusatkan tekstur yang dibuat tanpa posisi, yang dapat menyimpan 3 byte lainnya, tetapi ini akan melanggar aturan:

,(;windows@7 0 4;52#,&3#26)

7

Oktaf, 77 76 byte

s(98,49)=0;imshow(cat(3,[s w=s+255 w-18],[s+35 w s+41],[s+149 w s+57])/255);

Menampilkan gambar:

masukkan deskripsi gambar di sini


7

Memproses, 100 Bytes

size(78,52);background(255);noStroke();fill(#0055A4);rect(0,0,26,52);fill(#EF4135);rect(52,0,26,52);

Menampilkan ini: Perancis

(Solusi naif lebih pendek dari yang pertama.)


Saya pikir perintah menggambar Processing dapat keluar sebelum pixel mendorong di sini:size(78,52);noStroke();int[]p={0xFF0055A4,255,0xFFEF4135};for(int c:p){translate(26,0);fill(c);rect(0,0,-26,52);}
JohnE

@ John Lol, ya saya baru saja memperhatikan itu.
geokavel

@ JohnE Bahkan solusi super dasar saya lebih pendek dari milik Anda!
geokavel

haha- sepertinya kita berdua terlalu rumit
JohnE

bagaimana dengan menyalahgunakan instruksi skala? Ini berfungsi pada sketchpad.cc tetapi mungkin rusak dalam Memproses 3:size(78,52);scale(26,52);fill(#EF4135);stroke(#0055A4);rect(0,-1,0,2);stroke(255);rect(1,-1,3,3);
JohnE

7

Ruby, 56 47 45 byte

ASCII

$><<"\e[34z\e[37z\e[31z\n".gsub(?z,?m*27)*52

Yap, ini lebih baik dari milikku. Kecuali bilah tengah harus berwarna putih.
iamnotmaynard

@iamnotmaynard Benar, sudah diperbaiki. Terima kasih!
Peter Lenkefi

7

PHP, 70 byte

0000000: 424d 0000 0000 0000 0000 2300 0000 0c00  BM........#.....
0000010: 0000 2001 c000 0100 0800 a455 00ff ffff  .. ........U....
0000020: 3541 ef3c 3f66 6f72 283b 3665 343e 2469  5A.<?for(;6e4>$i
0000030: 3b29 6563 686f 2063 6872 2824 692b 2b2f  ;)echo chr($i++/
0000040: 3936 2533 293b                           96%3);

Di atas adalah hexdump yang dapat dibalik dengan xxd -r. Atau, itu juga dapat dibuat dengan skrip PHP berikut:

<?=hex2bin('424d0000000000000000230000000c0000002001c00001000800a45500ffffff3541ef3c3f666f72283b3665343e24693b296563686f206368722824692b2b2f39362533293b');

Saya menganggap pengaturan default, karena mereka tanpa .ini (Anda dapat menonaktifkan .ini lokal Anda dengan -nopsi). Menghasilkan gambar .bmp (288 x 192), yang harus disalurkan ke file. Ini sebesar yang saya bisa membuatnya tanpa mempengaruhi jumlah byte.


Contoh Penggunaan

$ xxd -r in.hex > france.php
$ php -n france.php > out.bmp
$ out.bmp

Keluaran

Bendera Perancis


Warna-warna ini tidak terlihat benar. Apakah mereka menggunakan nilai RGB yang ditentukan dalam pertanyaan?
Gagang Pintu

@ Doorknob Mereka lakukan. Mulai dari byte 26, tiga palet warna nilai didefinisikan (bgr): A45500, FFFFFF, 3541EF.
primo

6

ShaderToy (GLSL), 147 byte

void mainImage(out vec4 o,vec2 i){float x=i.x/iResolution.x*3.0;vec3 w=vec3(255,255,255);o=vec4((x<1.0?vec3(0,85,164):x<2.0?w:vec3(239,65,53))/w,1);}

Lihat di sini

Tidak terlalu mengasyikkan. Saya yakin ada cara untuk golf lebih banyak; Saya akan mengambil celah ketika saya pulang.


3
Tautan dialihkan ke shadertoy.com/error : /
Quentin
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.