İsviçre Bayrağını çizin


46

Görev: İsviçre bayrağını çıkar.

İsviçre Ulusal Günü kutlu olsun / Schweizer Bundesfeiertag / Fête nationale suisse / Festa nazionale svizzera / Fiasta naziunala svizra!

Ayrıntılar: Bayrak, #FFFFFFkırmızı ( #FF0000) zeminindeki beyaz ( ) çarpıdan oluşur . Haç, her bir tarafa yapıştırılmış 6x7 boyutunda kollu 6x6'lık bir kareden oluşur. Haç, her bir tarafa 6 birim mesafeli 32x32 kare arka planın merkezindedir. ( Kaynak )

Çıktı boyutu katılımcı tarafından seçilebilir, ancak resim bu oranlarla tam olarak eşleşmelidir, bu, boyutunun 32 katı olması gerektiği anlamına gelir.

Minimal bir versiyon şöyle görünür:


1
Bayrak zorluklarının bazı versiyonlarında, renkli ASCII çıktısına izin verildi, ancak bilim sanatını dahil etmediniz . Sadece onaylamak için ASCII çıkışına izin verilmiyor mu?
Stephen,

1
Doğru, yalnızca yaygın olarak bilinen görüntü biçimlerinin yanı sıra ekran üzerinde çıkışa izin verilir.
flawr

20
echo 🇨🇭- Buna izin verilmediğini varsayıyorum
Digital Trauma

Mavi bir CH görüyorum, buna neden izin verilmesi gerektiğini anlamıyorum.
flawr

1
@Tutleman Sanırım öyle
Luis Mendo

Yanıtlar:


40

SVG (HTML5), 94 83 82 64 bayt

<svg><path d=M0,0V32H32V0M6,13h7V6h6v7h7v6H19v6H13V19H6 fill=red

@ThePirateBay sayesinde 2 bayt kaydedildi. @ATaco sayesinde 1 bayt kaydedildi. @CraigAyre sayesinde 32 baytlık 32 x 32 görüntünün kabul edilebilir olduğuna işaret ederek 18 bayt kaydedildi. @Shaggy tarafından belirtildiği gibi, bu varsayılan arka planınızın beyaz olduğunu varsayar; Herhangi bir arka plan üzerinde çalışan bir bayrak için 22 bayt ekleyin:

<svg><path d=M0,0V32H32V0 fill=red /><path d=M6,13h7V6h6v7h7v6H19v6H13V19H6 fill=#FFF


Yolu kapatmaya gerek yok. Yolu açık bırakarak 4 bayt kaydedebilirsiniz.

ThePirateBay'in dediği gibi, >yol etiketinizdeki hak isteğe bağlıdır.
ATaco,

6
SVG'nin kendi "golf dili" var mı? Oo
ETHproductions

16
XML sözdizimi yazmaya alışkın olan bu kod gözlerimin kanamasına neden oluyor
Nayuki

3
viewBoxMinimal sürüm için kaldırabilir misiniz ? <svg><path d=M0,0V32H32V0M6,13h7V6h6v7h7v6H19v6H13V19H6 fill=red
Craig Ayre

31

x86-16 DOS için Makine Kodu, 43 bayt

               ; Draw 32x32 red square
B8 0C 28          mov  ax, 0x0C28   ; AL == color red, AH == set pixel function
B9 00 1F          mov  cx, 31
               DrawBox:
BA 00 1F          mov  dx, 31
               DrawRow:
CD 10             int  0x10
4A                dec  dx
75 FB             jnz  DrawRow
E2 F6             loop DrawBox

               ; Draw the interior white cross
B0 0F             mov  al, 0x0F    ; high byte already set
B1 06             mov  cl, 6       ; high byte already 0
               DrawCross:
B2 0D             mov  dl, 13      ; high byte already 0
               DrawCrossInner:
CD 10             int  0x10        ; plot CX, DX
87 D1             xchg dx, cx
CD 10             int  0x10        ; plot DX, CX
87 D1             xchg dx, cx
42                inc  dx
80 FA 12          cmp  dl, 13+6
75 F2             jne  DrawCrossInner
41                inc  cx
80 F9 19          cmp  cl, 6+(32-6-6)
75 EA             jne  DrawCross

C3                ret

Yukarıdaki kod, bir COM dosyası olarak birleştirilerek DOS altında çalıştırılmak üzere tasarlanmıştır. Bayrağın münferit piksellerini çizmek için ROM BIOS video servislerini çağırır ve ekranın sol üst köşesinde İsviçre bayrağının 32 × 32 gösterimini oluşturur.

Kod, video modunun zaten 0x13 moduna ayarlandığını varsayar; bu, VGA ekranı gerektirdiği anlamına gelir. Diğer video modları kullanılabilir, ancak VGA gerektiren size iki şey verir: (1) kare pikseller ve (2) gerçek% 100 kırmızı içeren bir varsayılan palet ( 0xFF0000) (paleti değiştirmek için bayt harcamak zorunda değilsiniz) renkler). Bu programı çalıştırmadan önce, ekranınızı 0x13 moduna getirmeniz gerekecektir; aşağıdaki kodu yapmanız gereken tek şey:

mov  ax, 0x13
int  0x10

Kod başka bir varsayımda bulunmaz ve DOS uyumlu bir işletim sistemi altında x86 uyumlu herhangi bir donanımda çalışmalıdır.

Bununla birlikte, program bayrağın çizilmesinden hemen sonra sona erer, bu nedenle DOS istemi normal olarak ekranın sol üst köşesine yeniden basılarak bayrağın ilk birkaç satırını kaplar. Bu nedenle, gerçek çıkışa şaşırtmak istiyorsanız, sistemi çalıştırmadan önce RETkapatmanız / duraklatmanız gerekir . İşte bir FreeDOS sanal makinesinde çalışan, nasıl göründüğünü gösteren bir ekran görüntüsü:

Piksel verilerini doğrudan video arabelleğine yazarak bunu daha da golf oynamak mümkün olabilir, özellikle de zaten 0x13 modunu kabul ediyorum. Bunu henüz denemedim. INT 0x10zaten çok kısa bir talimat, ancak bir baytlık dize komutlarını doğrudan veri belleğine piksel veri yazmak için kullanabilirsem, bu önemli bir kod tasarrufuna neden olabilir.


Etkileyici! Çok fazla şey görmüyorum ama yaptığım zaman her zaman çok ilginç
Adrian Zhang

ASM hayranlarını görmek güzel.
Billal Begueradj

Tüm satırlarda yinelenen üç adet 32 ​​piksel genişliğinde çiniyle yapabilirsiniz. Daha fazla veri kullanır, ancak işlem sayısını kaydeder. Alternatif olarak, sol taraf için üç adet 16 piksel genişliğinde karo kullanabilirsiniz ve sol tarafını tersine çevirerek bir simetrik işlem yapabilirsiniz.
ATL_DEV

21

MATL , 29 bayt

2Y66t&Y"OJQht3$)6thYaQK7hBoYG

MATL Online'da deneyin !

açıklama

2Y6     % Push predefined literal: 3×3 matrix [0 1 0; 1 1 1; 0 1 0]
6t&Y"   % Repeat each entry 6 times in the two dimensions. Gives an 18×18 matrix
OJQh    % Push [0 1j+1]. Used as an index, this means [0 1 ... end+1]. Indexing
        % is 1-based and modular, so 0 is the same as end
t3$)    % Apply that index in the two dimensions. This extends by 1 entry in 
        % each dimension, so that the arms have length 7. Gives a 20×20 matrix
6thYa   % Pad with 6 zeros in the two dimensions. Gives a 32×32 matrix
Q       % Add 1. The matrix now contains values 1 (will become red) and 2 (white)
K7hBo   % Convert array [4 7] to binary. Gives [1 0 0; 1 1 1], to be used as
        % colormap. First row is red, second is white
YG      % Show image using colormap

17

Java 8, 246 + 42 = 288 bayt

-64 baytlık @Aaron'a teşekkürler. Uzantı olmadan
dosya çıktısı ile -4 bayt a.

import java.awt.*;import java.awt.image.*;
x->{BufferedImage i=new BufferedImage(32,32,1);Graphics g=i.getGraphics();g.setColor(Color.RED);g.fillRect(0,0,32,32);g.setColor(Color.WHITE);g.fillRect(13,6,6,20);g.fillRect(6,13,20,6);javax.imageio.ImageIO.write(i,"png",new java.io.File("a"));}

Bir istisna atan işlevsel bir arayüz yöntemine atanabilecek bir lamba ifadesi. aBu dosyayı çalıştıran dizinde (resim dosyası) adlı bir resim dosyası oluşturur .

Çalıştırmak için kullanılan çevreleyen kod: Çevrimiçi deneyin!

Ungolfed

x->{
    BufferedImage i=new BufferedImage(32,32,1);
    Graphics g=i.getGraphics();
    g.setColor(Color.RED);
    g.fillRect(0,0,32,32);
    g.setColor(Color.WHITE);
    g.fillRect(13,6,6,20);
    g.fillRect(6,13,20,6);
    javax.imageio.ImageIO.write(i,"png",new java.io.File("a"));
}

Sonuç

IntelliJ IDEA görüntü önizlemesi tarafından sağlanan ızgara (görünüşte).


Aramanızı fillPolygoniki aramaya dönüştürerek birkaç byte'ı tıraş edebilirsiniz fillRect. Boyutlara saygı duyduğumdan emin değilim ama g.fillRect(7,13,18,6);g.fillRect(13,7,6,18)hangisi daha kısa, 64 byte
Aaron

@Aaron İyi arama, nedense daha uzun olacağını düşündüm ... Teşekkürler!
Justin Mariner,

Dosyayı .pngyerine adlandırabilir a.pngve bayt kaydedebilirsiniz.
user2428118

@ user2428118 Güzel, daha ileri götürmek ve auzantı olmadan adlandırmak için izin verilir mi? Hala açılabilir, sadece bir fotoğraf görüntüleyicide açması söylenmesi gerekir.
Justin Mariner

1
@ OlivierGrégoire Çözümümün fikrinden çok uzak olduğunu hissediyorum, ancak bunu kendinizinki gibi gönderebilirsiniz
Justin Mariner

16

Excel VBA, 86 85 79 Bayt

kod

Anonim vbe bir girdi alır ve dizi üzerine İsviçre bayrağı üretir hemen pencere fonksiyonu [A1:F32]bir ActiveSheetnesne. Bu, önce hücreleri kare yaparak, sonra kırmızı bölgeyi çizerek ve son olarak beyaz haçta çizerek çalışır.

Cells.RowHeight=48:[A1:AF32].Interior.Color=255:[G14:Z19,N7:S26].Interior.Color=-1

İsviçre bayrağının "haçını" kırmızı arka plana koyduktan sonra renklendirme adımını kaldıran düzenlemelerin aslında yukarıdaki konfigürasyondan daha uzun olduğuna dikkat edin; bayrak

-1 bayt sayesinde Greedo en için @ RowHeight=48üzerindeColumnWidth=2

-6 Bayt -1yerine @ Greedo için teşekkürlerrgbWhite

Çıktı

görüntü tanımını buraya girin


1
Fantastik; ancak yine de Interior.Color=-1yerine 6 bayt tasarruf edebilirsinizInterior.Color=rgbWhite
Greedo

@Greedo, ha, ne biliyorsun - bu harika. rgbWhiteOndalık değerini 16777215netlik için kullanmıştım -1, aynı etkiye sahip olacağını bilmiyordum . Teşekkürler!
Taylor Scott,

1
bu bağlantıya göre: ( reddit.com/r/compsci/comments/62x9g9/… ) PowerPoint tamamlandı, bu yüzden bunun PowerPoint'e nasıl aktarılabileceğini merak ediyorum
Suhrid Mulay

13

C ++, SFML, 406 399 394 bayt

Pdpi sayesinde -2 bayt - Zacharý
sayesinde -10 bayt sayesinde

SFML (Basit ve Hızlı Multimedya Kütüphanesi) , video oyunları ve multimedya programlarının geliştirilmesini kolaylaştırmak için yazılmış bir C ++ kütüphanesidir.

Kod:

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

Bayrak 128x128 pencerede gösteriliyor. İşletim sisteminizin 128x128 bir pencere görüntüleyebilmesi gerekir (Win8.1'im daha küçük genişlikte görüntülenemiyor)

UYARI : Bu 2 kod satırını eklemek isteyebilirsiniz: bu t.setFramerateLimit(60);t.setVerticalSyncEnabled(true);nedenle, kodu çalıştırdığınızda CPU'nuz ısınmaz. Onları golf nedeniyle orjinal koda koymadım.


int main(){for(sf::RenderWindow t(sf::VideoMode(128,128),"");t.isOpen();){t.clear();sf::RectangleShape r({128.f,128.f});r.setFillColor(sf::Color::Red);t.draw(r);r.setFillColor(sf::Color::White);r.setPosition({24.f,52.f});r.setSize({80.f,24.f});t.draw(r);r.rotate(90);r.setPosition({76.f,24.f });t.draw(r);t.display();for(sf::Event e;t.pollEvent(e);)if(e.type == 0)t.close();}}
Whiles'ınızı

Ayrıca, boşlukları kaldırarak iki bayttan tasarruf edebilirsiniz: e.type == 0=> e.type==0, belki hatta !e.type(önceliği hatırlamıyorum). 24.f }=>24.f}
Zacharý

Oh, ve using namespace sf;mümkün mü?
Zacharý

12

Braindraw, 227 bytes (Yarışmıyor) (Çalışması için güncellendi)

Ungolfed versiyonu (241 bayt)

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

Hafif golf versiyonu (227 bayt)

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

Braindraw kendi tasarımımın programlama dilidir. Bugün öğleden sonra 3.10'dan itibaren çalışan bir tercümanım var ve programın düzgün çalıştığını kontrol ettim. Ancak, tercüman bu yarışma başlamadan önce yoktu, bu yüzden rekabet etmiyorum.

Braindraw, Brainf *** ile aynıdır, ancak tek boyutlu bir diziden ziyade üç boyutlu bir dizide çalışır. Bu dizilere r, g ve b denir ve kırmızı yeşil ve mavi renk kanalları olarak işlev görür. Operatör r, imleci kırmızı kanala vs. yönlendirir. Yukarı ^, aşağı v.


9
Bunun için bir tercüman görmek için sabırsızlanıyorum, denemek eğlenceli olabilir
Darren H

1
Kesinlikle eğlenceli bir fikir, ben de tercüman bekliyorum! (Teknik olarak yalnızca uygulanmış dillere izin veriyoruz ve tercümanı tanımı olarak
görüyoruz

Açıkça hiçbir şey çıkmadığın, sonunda sadece bütün "kanvas" ı çıktığın doğru mu? Tuvalin sonsuz olduğunu mu düşünüyorsun?
kusur

Re: tercüman yok, sanırım bu girişimin rekabet etmediği anlamına geliyor. Oh iyi. Ancak evet, bu programın kendi başına bir çıktısı yoktur, programın çalışması sırasında ve sonrasında bilgisayar alanı görüntülenir. Tuval teorik olarak sınırsızdır, ancak uygulamada, muhtemelen 512x512
benzen

Bu dil kolmogorov karmaşıklık imajı zorluklarına karşı yetenekli gözüküyor. Ve şu anda bir tercüman üzerinde çalışıyor musunuz?
Zacharý

10

TI-BASIC (yalnızca TI-84 Plus C (S) E), 58 bayt

:For(A,0,31
:For(B,0,31
:Pxl-On(A,B,RED
:End
:End
:For(A,6,25
:For(B,13,18
:Pxl-Off(A,B
:Pxl-Off(B,A
:End
:End

Bu harika bir cevap. Daha yeni oy vermek için bir hesap yaptım. TI-BASIC harika
Zags

1
Oh ne lüks bir üçüncü parametre Pxl-On şimdi oldu ... beni sadece monokrom olan ağlatıyor :(
Ray

10

Mathematica, 83 bayt

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

bir sonraki @ @ ASCII'den (Şaka olduğunu düşündüm ama işe yarıyor!)

Mathematica, 23 bayt

"CH"~CountryData~"Flag"

-10 bayt @Jonathan Frech tarafından


4
Mathematica’nın İsviçre bayrağı için yerleşik bir yeri yok mu?
CJ Dennis

4
CountryData["Switzerland","Flag"]ancak doğru oranlara sahip olmayabilir
ASCII sadece

6
Mathematica'da her şey için bir yerleşik var, ama bu?
sergiol

10
"Switzerland"~CountryData~"Flag"size biraz daha kazandırıyor
A Simmons

1
"CH"~CountryData~"Flag"sadece 23 bayt alır.
Jonathan Frech

9

HTML + CSS, 15 + 117 bayt = 132 bayt

İle bir flexbox sarıcı kullanma inset box-shadow.

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


HTML + CSS, 18 + 139 137 122 bayt = 140 bayt

Kullanarak önceki cevap borderve negatif ile bir ara flexbox sarıcı margin.

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


7

GraphicsMagick (?), 96 bayt

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

GM ile nasıl golf oynayacağınızdan emin değil (bu bir dil olarak mı düşünülmeli?). Ayrıca burada baytları nasıl sayacağımdan da emin değilim.

GM yüklüyken, verilen kodu windows cmd'ye yazın, adında bir görüntü elde edin 1.bmp. Bash kullanıyorsanız çift alıntıyı tek bir alıntıya çevirmek isteyebilirsiniz (çalışması gerekir, ancak bunu test etmedim).

Dijital Travma sayesinde. yalnızca bir tane -drawkaydet 8 bayt kullan


GraphicsMagick'te aynı olup olmadığından emin değilim, ancak ImageMagick ile her iki dikdörtgeni aynı -drawdizeye koyabilirsiniz :convert -size 32x32 xc:red -fill white -draw "rectangle 13,6 18,25 rectangle 6,13 25,18" i.png
Dijital Travma

@ DigitalTrauma aynı. düzenlendi.
tsh

7

JavaScript + HTML, 99 + 13 = 112 bayt

User2428118 sayesinde 2 bayt
kaydedildi Matheus Avellar ile 2 bayt kaydedildi

JSFiddle

with(c.getContext`2d`)fillStyle='red',fillRect(0,0,32,32),clearRect(6,13,20,6),clearRect(13,6,6,20)
<canvas id=c>


Saf JavaScript, 194 129 bayt

JSFiddle

with(document.write`<canvas id=c>`,c.getContext`2d`)fillStyle='red',fillRect(0,0,32,32),clearRect(6,13,20,6),clearRect(13,6,6,20)


2
Bunu sıfırdan yapmak zorunda olduğuna inanıyorum.
Stephen,

@StepHen. Tamam, ben de ekledim.

1
... Bayt'a eklemeniz gerekir
ASCII-yalnızca

@ ASCII sadece. Dahil.

1
Gelecekte başvurmak için, ihtiyacınız olduğunda <canvas>, HTML'yi doğrudan cevabınıza dahil edebilirsiniz. Bkz codegolf.stackexchange.com/a/136972/47097
darrylyeo

6

HTML4’te (?) JavaScript (ES6), 178 176 bayt

document.write('<table cellspacing=0>'+[...Array(32)].map((_,y,p)=>p.map((_,x)=>`<td bgcolor=${x>5&&x<26&&y>12&&y<19||y>5&&y<26&&x>12&&x<19?'#fff':'red'}>`).join``).join`<tr>`)

Evet! Biz gerek yok <canvas>ne de <svg>hatta <img>!

Justin Mariner sayesinde, 2 bayt tasarruf edin.


5

Löve2D , 139 138 Bayt

l=love g=l.graphics c=g.setColor r=g.rectangle f="fill"w=255 l.draw=loadstring"c(w,0,0)r(f,0,0,32,32)c(w,w,w)r(f,13,6,6,20)r(f,6,13,20,6)"

ThePirateBay sayesinde bir bayt kurtarıldı

Ungolfed

function love.draw()
    love.graphics.setColor(255,0,0)
    love.graphics.rectangle("fill",0,0,32,32)
    love.graphics.setColor(255,255,255)
    love.graphics.rectangle("fill",13,6,6,20)
    love.graphics.rectangle("fill",6,13,20,6)
end

5

Python 3 , 190 bayt

Çıktıyı farklı kaydet image.xpmve favori metin editörünle aç.

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

Çevrimiçi deneyin!

Çıktı:

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

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

Linux'ta gimp ile açmak için boş 5. hattı kaldırmak zorunda kaldı.
Tim

5

Perl 5 , 184 bayt

İçin 176 bayt kodu + 8 -Mutf8 -p.

Gerektiğinden tam olarak emin değilim, bu meta post'a göre sağlanan boş girişe güveniyor , bu da TIO'da çalışmıyor, böylece yeni bir hat sağlıyor (kullanılmıyor). Çıktı terminale ve şöyle görünür:

görüntü tanımını buraya girin

Oranlar, iki dikey 'piksel' olan bir karakter alanını temel alarak ölçeklendirilmelidir.

%a=qw(R 101 W 107 A 101;97 B 91;107);$_=R.($a="32 
"x3).($b="13 W6 R13 
"x3)."6 A7▄W6 A7▄"."R6 
6 W20 "x2 ."R6 
6 B7▄W6 B7▄R6 
$b$a";s/\d+(.)/$1x$&/ge;s/\pL/[$a{$&}m/g

Çevrimiçi deneyin!

Çıktıyı TIO'dan kopyalayıp buraya yapıştırarak önizleyebilirsiniz (bu, öğenin üzerine getirildiğinde kontrol karakterlerini gösterir) .


5

GFA BASIC (Atari ST), 62 bayt

.LST biçiminde el ile düzenlenmiş bir liste. Tüm satırlar CR, sonuncusu da dahil olmak üzere biter .

DEFFILL2
PBOX0,0,31,31
DEFFILL0
PBOX13,6,18,25
PBOX6,13,25,18

Genişletildi ve yorumlandı:

DEFFILL 2         ! set fill color: default system color #2 is red (&H700)
PBOX 0,0,31,31    ! draw the red square
DEFFILL 0         ! set fill color: default system color #0 is white (&H777)
PBOX 13,6,18,25   ! draw a vertical white rectangle
PBOX 6,13,25,18   ! draw a horizontal white rectangle

Çıktı

Çıkış 32x32.

GFA çıkışı

Not: Bu gerçekten de 'beyaz' renk kullanıyor, ancak öykünücüye (ve parlaklığı oldukça yüksek hale getirmediğiniz sürece gerçek olana) gri bakıyor.


5

R, 171 140 bayt.

x = rep(c(6,13,19,26,19,13),e=2)
l=c(0,32)
par(bg="red",mar=0*1:4)
plot(0,0,'n',l,l,xaxs="i",yaxs="i")
polygon(x,c(x,x)[4:15],c="white",b=0)

(biraz) ungolfed:

x <- rep(c(6,13,19,26,19,13),each=2)
y <- c(x,x)[4:15] # index by 3 positions
par(bg="red",mar=c(0,0,0,0)) # prepare the plot space
plot(0,type='n', xaxs="i",yaxs="i",xlim=c(0,32),ylim=c(0,32))
polygon(x,y,col="white",border=0)

Bazı baytları kaydettiği için @gregor'a teşekkürler

Koş!


1
Siteye Hoşgeldiniz! :)
DJMcMayhem

Güzel! Sen argüman isimlerinin kısmi eşleşen epeyce bayt kaydedebilirsiniz: e=2yerine each=2, tyerine type, ciçin col, biçin border. Ve 0*1:4bundan daha kısa c(0,0,0,0).
Gregor

Aslında konumsal eşleştirme ile şu durumdan uzaklaşabilirsiniz plot: plot(0,0,'n',l,l,xaxs="i",yaxs="i")(atamak m="i"size bir bayt maliyeti). Tüm bunlarla 141 bayta iniyor.
Gregor

Kısmi eşleşmeyi tamamen unuttum. Teşekkürler!
Alex Axthelm

Birkaç bayt daha kaldırın: lve xlim/ ylimgerekli değildir, sadece plot(0:32,0:32,...). Ayrıca yaklaşımınızı uyarladım ve bunun yerine 117 yerine kullandımrectpolygon .
Gregor,

5

Octave, 105 bayt 73 bayt

Not: Satır sayımı, bayt sayısına dahil edilmeyen netlik için eklendi

x(32,32,3)=0;
x(:,:,1)=1;
x(7:26,14:19,:)=1;
x(14:19,7:26,:)=1;
imshow(x*255)

EDIT: oldukça fazla bayt tasarrufu için kusur teşekkürler !

İşte octave-online.net üzerinde sonuç, sayesinde sanchises

Sonuçlar


Octave hakkında emin değilim, ama MATLAB'de aşağıdakiler çalışmalı:x(32,32,3)=0; x(:,:,1)=1; x(7:26,14:19,:)=1; x(14:19,7:26,:)=1; imshow(x*255)
kusur

Btw: PPCG hoşgeldiniz !!!
kusur

Octave-online.net resimleri gösteriyor.
Sanchises

5

GIF, 97 Bayt

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

Ucuz ve bayt ağır, ama buna değer.

EDIT: Bazı karakterler yukarıdaki kodda değil, işte GIF'in hexdumpı için bir pastebin var.

EDIT: çevrimiçi araçla 97 byte'a kadar sıkıştırılmış.


1
Bazı yazdırılamayan karakterlerin kod snippet'inizden kaldırıldığı anlaşılıyor. Belki altıgen bir çöplük göndermeyi deneyin.

18
Dili nasıl telaffuz edersiniz?
Oliver

1
@Oliver ZHAIF
Neil

1
Gimp, yalnızca 95 baytta aynı görünen bir GIF dosyası üretir (diğer birçok çözümden daha az). İşte onaltılık bir dökümü.
Armin Rigo

6
GIF ne zamandan beri bir programlama dilidir?
Adám

4

HTML + JavaScript (ES6), 13 + 112 = 125 bayt

C=c.getContext`2d`
C[s='fillStyle']='red'
C[r='fillRect'](0,0,32,32)
C[s]='#fff'
C[r](6,13,20,6)
C[r](13,6,6,20)
<canvas id=c>

HTML + JavaScript (ES6), 13 + 114 = 127 bayt

with(c.getContext`2d`)fillStyle='red',fillRect(0,0,32,32),fillStyle='#fff',fillRect(6,13,20,6),fillRect(13,6,6,20)
<canvas id=c>


Dikdörtgen yaklaşımınızı çaldım ve bunu kullanarak 117 bayta yükselttim clearRect, umarım bununla iyi edersiniz?

Bu zekice, ancak ne yazık ki OP, şeffaf piksellere izin verilmediğini söylüyor. codegolf.stackexchange.com/questions/136927/draw-the-swiss-flag/…
darrylyeo

Aslında, bir beyaz. Varsayılan olarak, tüm web sayfalarında beyaz arka plan vardır ve bayrak şeffaftır, ancak bu yalnızca şeffaflık tanımlamasıdır. Saydamlığın dış tanımı, eğer o bölgedeki pikseller (beyaz artı) bazı durumlarda rengini değiştirebiliyorsa (veya rastgele ayarlanabiliyorsa) olabilir. Ancak, hem HTML hem de JavaScript kullandığım için çıktıların tamamı beyaz çarpı işaretli kırmızı bayrak . Tuvali ve arka planı ayrı ayrı düşünemezsiniz. Tuvalin arka planda nasıl görüntülendiği iyi tanımlanmıştır ve sonuç her zaman spesifik tanımlara göre beyaz çarpı içerir.

İnşallah şimdi biraz daha açık, demek ki aynı fikirde olmayabilirsin, ama gerçekten düşünürsen cevabımı OP’nin gereklilikleriyle tamamen tutarlı bulacağından eminim.

@PirateBay Fuarı yeterince.
darrylyeo

4

C # 265/266 209 bayt

 using System;using c=System.Console;class P{static void Main(){for(int i=0,j;i<32;i++){for(j=0;j<32;j++){if((6<i&&i<26&&j>13&&j<19)||(6<j&&j<26&&i>13&&i<19))c.BackgroundColor=ConsoleColor.White;else c.BackgroundColor=ConsoleColor.Red;c.Write(" ");}c.WriteLine();}}}     

Arka Plan Rengini değiştirirken konsola "boşluk" karakterleri yazdım. Ancak çok uzun olduğunu düşünüyorsanız ve tek karakteri 8 x 16 piksel olarak sayıyorsanız, "j" yakınında değerleri iki katına çıkarırsınız (+ 1 bayt ve + c.ReadKey();böylece durur):

  using System;using c=System.Console;class P{static void Main(){for(int i=0,j;i<32;i++){for(j=0;j<64;j++){if((6<i&&i<26&&j>26&&j<38)||(12<j&&j<52&&i>13&&i<19))c.BackgroundColor=ConsoleColor.White;else c.BackgroundColor=ConsoleColor.Red;c.Write(" ");}c.WriteLine();} c.ReadKey(); }}     

TheLethalCoder sayesinde 56 bayt kaydedildi

 namespace System{using static Console;class P{static void Main(){for(int i=0,j;i<32;i++,WriteLine())for(j=0;j<32;Write(""))BackgroundColor=(ConsoleColor)((6<i&i<26&j>13&j<19)|(j++<26&i>13&i<19&6<j​)?15:12);}}}

209 baytnamespace System{using static Console;class P{static void Main(){for(int i=0,j;i<32;i++,WriteLine())for(j=0;j<32;Write(" "))BackgroundColor=(ConsoleColor)((6<i&i<26&j>13&j<19)|(6<j&j++<26&i>13&i<19)?15:12);}}}
TheLethalCoder

4

Tikz, 145 143 bayt

\documentclass[tikz]{standalone}\begin{document}\tikz{\def~{)rectangle(}\fill[red](,~33,33);\fill[white](7,14~27,20)(14,7~20,27)}\end{document}

İşte "ungolfed"

\documentclass[tikz]{standalone}
\begin{document}
\tikz{
\def~{)rectangle(}
  \fill[red](,~33,33);
  \fill[white](7,14~27,20)(14,7~20,27)
}\end{document}

İşte biraz daha ungolfed

\documentclass[tikz]{standalone}
\begin{document}
\tikz{
  \fill[red](1,1)rectangle(33,33);
  \fill[white](7,14)rectangle(27,20)(14,7)rectangle(20,27)
}\end{document}

Bu, 3 dikdörtgeni büyük, kırmızı, iki küçük beyazı artı yapar.

İşte göründüğü gibi. Gerçekten diğerlerinden farklı görünmüyor.

bayrak


Birkaç hafta önce documentclass github'a golf oynadım . ve herhangi bir pencere arka plan gereksinimi görünmüyor. Bununla beraber \documentclass{g}\input tikz5B'yi kurtarmaya çalışmalı. TikZ ile bile düz TeX'te çalışarak daha fazla tasarruf edebilirsiniz
Chris H 15:

4

R, 109 bayt

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

Kullanımları framebir arsa ön ayar önlemek için, ancak varsayılan komplo bölge [0,1] aralığı yerine [0,32] arasında açıktır. Ayrıca rectvectorized gerçeğini kullanır . Çizim penceresinin varsayılan boyutu 7in x 7in'dir. Aşağıdakileri çıkarır:

Çizim penceresinde İsviçre bayrağı

R, 125 bayt

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

Varsayılan pngdeğeri, 480x480 piksel karedir. Çıktı aşağıdaki png dosyasıdır:

İsviçre bayrağı


4

R, 112 bayt

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

En boy oranını garanti etmek için toplam 117 için 5 bayta ihtiyacımız var:

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

Alex Axthelm'in cevabından ilham alan ve birkaç bayttan tasarruf için Rift'e teşekkürler.


3
Eğer 4 bayt değişen kurtarabilecek bg="red"için bg=2varsayılan paletinde aynı olan
Rift

4

Postscript, 301 286 187 bayt

/m{moveto}def
/s{setrgbcolor}def
/r{rlineto}def
/c{closepath fill}def
1 0 0 s
0 0 m
0 320 r
320 0 r
0 -320 r
c
1 1 1 s
130 60 m
60 0 r
0 200 r
-60 0 r
c
60 130 m
0 60 r
200 0 r
0 -60 r c

99 byte indirim öneren isimsiz editöre teşekkür ederiz !


Sadece size bildirmek için: Birileri bu yazı için bir golf düzenleme gönderdi. Politikamız uyarınca, reddedildi, ancak değişikliklerin bazılarını uygulamayı düşünebilirsiniz.
Rɪᴋᴇʀ

3

Kırmızı , 79 Bayt

Kod:

view[base 32x32 red draw[fill-pen white pen off box 6x13 26x19 box 13x6 19x26]]

Sonuç:

pencere

Açıklama:

view [              ; activate view engine
base 32x32 red      ; draw a 32 by 32 red box as base
 draw [             ; draw on top of the base
  fill-pen white    ; fill color is white
  pen off           ; turn off outline, alternatively could use white
  box 6x13 26x19    ; draw a horizontal rectangle, specified as 2 corners XxY
  box 13x6 19x26    ; draw vertical rectangle
]]

3

Bit eşlem, 160 bayt

İşte 24 bit renk tanımı kullanarak 1 bit renk derinliğine sahip bir bitmap. İkinci satırın son altı baytı palettir ve ardından piksel dizisidir. Her dört bayt bir tam piksel satırı içerir.

42 4D A0 00 00 00 00 00 00 00 20 00 00 00 0C 00
00 00 20 00 20 00 01 00 01 00 00 00 FF FF FF FF
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 07 E0 00 00 07 E0 00
00 07 E0 00 00 07 E0 00 00 07 E0 00 00 07 E0 00
00 07 E0 00 03 FF FF C0 03 FF FF C0 03 FF FF C0
03 FF FF C0 03 FF FF C0 03 FF FF C0 00 07 E0 00
00 07 E0 00 00 07 E0 00 00 07 E0 00 00 07 E0 00
00 07 E0 00 00 07 E0 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

İzleyen sıfırları kesmeye çalıştım, ancak resim izleyiciler tuvalin tamamı için tanımlanmış yeterli piksel bulunmasını gerektiriyor.

Swiss.bmp


3
"Rasgele dosyaları kalıcı olarak kaydedebileceğim herhangi bir öneriniz var mı?" - GitHub’da.

1
RLE kodlamasını kullanabilir misiniz?
Neil,

1
Haha, benim GIF örneğimin 1'ini yaptın.
Adrian Zhang,

1
Bunun geçerli bir programlama dili olmadığını düşünüyorum. IFAICT, BMP ne önceliği kontrol edemez, ne sayı ekleyebilir.
Adám

3
Lütfen herkes , bu fikir birliğine göre programlama dili dışındaki gönderilere izin verdiğimizi unutmayın , bu nedenle bu gönderim tamamen iyi. (Ve IMO'ya sahip olmak için güzel bir kriter.)
kusur,

3

Python 2, 92 91 89 bayt

r,w=' \0\0',' '*3
A,B=192*r,(13*r+6*w+13*r)*7
print"P6 "+"32 "*3+A+B+(6*r+20*w+6*r)*6+B+A

İkili ppm olarak çıktı, kullanım:

python golf_swiss.py > swiss.ppm

Renk derinliğini arttırmak, maksimum değer için boşluk kullanmamı sağladı


3

Tcl / Tk, 94

Etkileşimli kabuk üzerinde çalışıyorsa, bir kısaltabilirsiniz canvasiçin canve gridhiçgri

gri [can .c -bg red -w 32 -he 32]
lmap R {{8 15 28 21} {15 8 21 28}} {.c cr r $R -f #FFF -w 0}

Tcl / Tk, 98

Etkileşimli kabukta çalışıyorsa, kişi kısaltılabilir canvas.can

grid [can .c -bg red -w 32 -he 32]
.c cr r 8 15 28 21 -f #FFF -w 0
.c cr r 15 8 21 28 -f #FFF -w 0

Tcl / Tk, 101

pack [canvas .c -bg red -w 32 -he 32]
.c cr r 8 15 28 21 -f #FFF -w 0
.c cr r 15 8 21 28 -f #FFF -w 0

görüntü tanımını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.