İzlanda'nın ulusal bayrak çekmek


107

İzlanda milli futbol takımı - Bu yılki UEFA Euro 2016 sona erdi ve birkaç olumsuz manşetin yanı sıra çok olumlu bir sürpriz oldu . Ulusal bayraklarını çizelim.

Giriş

Belli ki bu zorluğun girişi yok.

Çıktı

  • İzlanda bayrağını en az 100 x 72 piksel veya 25 x 18 karakterden oluşan herhangi bir görsel biçimde çizin .
  • Çıktıyı bir dosyaya kaydedin veya anında sunun - örnek biçimler: png, jpg vb. Görüntüler, vektör grafikleri, HTML tuvalinde çizim veya hatta görselleştirme için boşluk olmayan karakterler kullanın.
  • Bu renkleri kullanın : mavi : #0048e0, beyaz : #ffffffve kırmızı : #d72828.
  • Diliniz belirli renk değerlerini desteklemiyorsa , ANSI renk kodlarından kırmızı , mavi ve beyaz için standart değerleri kullanın .
  • Aşağıdaki şekilde gösterildiği gibi, bayrağı doğru oranlarda çizin:

Basmakalıp

  • Bir program veya işlev yazabilirsiniz. Adsız bir işlevse, lütfen onu nasıl çağıracağınıza dair bir örnek ekleyin.
  • Bu , bayt cinsinden kazanılan cevapların çok kısa olması
  • Standart boşluklara izin verilmez.

Liderler Sıralaması

Cevabınızı bulamıyorsanız, dilinizi ve bayt sayınızı Lider Tablosunun " Bilgi Bölümünde " açıklandığı şekilde biçimlendirin .


Bu zorluk, Fransa'nın ulusal bayrağını çizmekten esinlenmiştir .


20
Galler'de, bu yıl Avro'da beklenenden çok daha iyi olan, ülkemin bayrağı olacaktır. :-)
Gareth

24
@ Gareth ejderha su geçirmez bir özelliğini dört gözle bekliyorum. ;)
Martin Ender

4
Görünüşe göre yukarıdaki resimdeki mavi gerçeklerden daha koyu#0048e0
Luis Mendo

10
@MartinEnder Taş bir tablete oymak mı sayılır? Bu su geçirmez.
immibis

5
@MartinEnder Mathematica'da bir tane olacak.
gcampbell

Yanıtlar:


259

Python 3, 190 172 171 169 167 160 159 147 143 bayt

Kullanılmayan ancak kaldırılmayan bir offset yöntemi olan PIL sürüm 1.1.7'nin kullanılması.

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

Kırmızı ile doldurulmuş 25 * 18 piksel bir görüntü oluşturur, ardından bir pikselin beyaz dış çizgisiyle mavi ile doldurulmuş 23 * 16 piksel bir dikdörtgen çizer. Sonra görüntüyü kenarları saran (9,9) ile dengeler, 100 * 72 olarak yeniden boyutlandırır ve daha sonra bir pencerede gösterir.

Dengelemeden önce işaretle:

enter image description here (100 * 72 olarak yeniden boyutlandırıldı)

Çıktı:

enter image description here

animasyon:

enter image description here

Düzenleme1: Başlangıçta 25 * 18 görüntü oluşturarak kırpmayı kaldırarak 18 bayt golf yaptı.

Edit2: #fffyerine 1 baytla Golfed white.

Düzen3: İçe aktarma takma adıyla 2 bayt golf oynadı.

Edit4: ofset yönteminin ikinci argümanı kaldırarak Golf 2 bayt.

Düzen5: Golfed 7 bayt kaydetmek yerine görüntüyü göstererek. (Unix'te yüklü imagemagick gerekiyor)

Düzenleme6: İthalleri yeniden yazarak Golf 1 bayt.

Düzenleme7: Golf tekrar tekrar yazarak 12 bayt aldı. (@Dennis tarafından teşekkürler)

Düzen8: Eklenen animasyon.

Düzen 9: Son karede eksik olan animasyon güncellendi.

Edit10: Albert Renshaw sayesinde 4 bayt golf oynadı!


42
Gerçekten güzel cevap.
insertusernamehere

17
Bu bir dahi! (Viking) Sana şapka aç.
Ioannes,

25
Vay, SO'da kod-golf tipi sorulara oy vermem çok nadirdir, ancak bunu yapmak için tamamen yeni bir topluluğa katılmam daha da nadirdir. Bu mahsup kesmek, genç fırtınalı çalışanların birlikte çalışacak hafızanıza sahip olmasından önce ne yapmamız gerektiğini hatırlatır. Mükemmel iş

5
deha, gerçekten! 💡
InuYaksa

3
Bunu yaparsanız from PIL.ImageDraw import*, Iolur Imageve D.Drawolur Draw, 11 bayt kaydeder.
Dennis,

117

DOS COM, 69 65 63 62 bayt için x86 gerçek mod makine kodu

Iceland flag produced

Kod, DOS COM çalıştırılabilir olarak çalıştırılmak içindir.

Özel teşekkür

  • meden , dört bayt kurtardı.
  • meden , iki byte kurtardı ve titreyen kaldırıldı.

Makine kodu (onaltılık bayt cinsinden)

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

Derleme kaynağı

Kaynak NASM içindir.

ORG 100h

push 0a000h
pop es

mov ax, 13h
int 10h

mov si, data


_draw:
 lodsw
 xchg ax, cx

 lodsw
 xchg ax, di

 lodsb

_cycle:
 jcxz _cycle

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

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

jmp SHORT _draw


data: 

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


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


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

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


        db 250
        db 20
        dw 25600d 
        db 0ch


        dw 0000h

13
Bu gerçekten harika bir ilk cevap! Hoşgeldiniz!
AdmBorkBork

5
10h & 13h'de 'mov' ile 'xchg' değiştirerek 2 byte, 16h
meden

3
Bazı düşünceler. Program sonsuz döngüye çalışır olduğundan, döngü daha kısa yaparak sadece titreyen önleyebilirsiniz: _loop: jcxz _loop. Ayrıca yükleme sırasını değiştirirseniz cxvedi
meden 12:16

@Meden tekrar teşekkürler. Titreşen aslında tamamen gereksizdi :) Ben de kaldırdım mov bx, 320ve 320add di, 320 (daha önce add di, bx) içine taşındı .
Margaret Bloom,

Harika. Artık bu zorluğun içindeki tüm makine kodu cevapları üzerinde kesin bir avantajınız var. Sadece doğruluk uğruna: jcxz _cyclehemen sonra hareket etmek daha iyi xchg ax,cxolurdu, bu yüzden verilerin sonuna bayt yüklenmeyecek. Ve kaynağında bazı yanıltıcı yorumlar var: ;dx = row. dxkodun hiçbir yerinde kullanılmaz.
meden

55

C, 194 191 183 Bayt

#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 bir ekleme @ile #define A
-8 ekleme [ile#define C

kullanım

main(){f();}

Çıktı

image

OP’nin bu yorumuna dayanarak

Çift Boyutlu Çıkış, 204 Bayt

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

image2


22
5'er oylama, geniş bir +810 temsilcisi ağ tetikledi ... Teşekkürler! (Evet, 200 temsilciye ulaştığım ilk site: D)
Giacomo Garabello 11:16

1
Sonuç "birimin piksel veya karakter olduğu en az 100 x 72 birim" olmak zorunda değil mi? Bu, bu gereksinimi karşılamıyor, ancak OP'nin bu tanımı formüle ederken hata yaptığını düşünüyorum.
Kritzefitz

4
@Kritzefitz Eh, bir karakter birçok piksel alır, bu yüzden karakter yerine bir piksel olabilir. Bir delik bulundu.
Outgolfer Erik,

@GiacomoGarabello +150’de fotoğrafınızdaki ilk site hangisidir? Simgeyi tanımıyorum.

@LegoStormtroopr Bu PPCG !! GitHub Projesine
Giacomo Garabello 14:16 '

31

Excel VBA, 254 228 153 bayt

Excel'in işleme biçimi nedeniyle sütun / satır boyutunu piksel olarak ayarlayabilen bir yol bulunamadı (bu nedenle onları kare yapar), bu nedenle ilk önce onları güzel ve kare yapın.

Düzenleme 1: RGB, renkler için döndürülen değerlerle değiştirildi, -26 bayt

Düzenleme 2: Olabildiğince çok öneri eklemeye çalıştım, -75 bayt. &48e0Renk olarak kullanamadım ve neden olduğundan emin değilim. Herkese teşekkürler

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

Resim: Iceland Flag


Hücreleri nasıl kare yaptın? El ile mi yaptınız, yoksa başka bir komut dosyası dahil edilmedi mi? Bu, puanlanmış programınızın bir parçası olmasa bile görmek isterim.
mbomb007

Manuel olarak yaptım, hücre genişliğini değiştirme kodu eklemek istediğim yerde yeterince kolay ancak boyutları, yapılamayan piksellere göre ayarlamadıysanız, Satır / Sütun veya monitör çözünürlükleri arasında tutarlı değil ne bulabilirim. Okuduklarımdan itibaren çözünürlüğü bulmanız ve pikselleri işlevin kabul ettiği boyuta dönüştürmek için bazı matematik işlemleri yapmanız gerekir.
tjb1

1
Ayrıca piksellere dönüştürmek için kod, çözünürlüğün bir kısmını ya da ÜFE'nin (formülü gerçekten anlamıyorum) zor bir kod gerektirdiğinden, tüm aygıtlarda da işe yaramayacak gibi görünüyor.
tjb1

2
Ve sadece tamlık için (çözümün kendisinden ziyade kare hücrelerin kurulmasıyla ilgili), sayfa düzeni görünümüne geçerseniz hücre yüksekliğini ve genişliğini belirli değerlere ayarlayabilirsiniz 0.2cm. Bu, geri döndüğünüzde korunacak ve tuhaf Excel boyut oranlarını denemek ve çalışmak zorunda kalmayacaksınız :-) Bu arada, daha güzel Excel püf noktaları istiyorsanız, Joel Spolsky'nin "Excel'de emiyorsunuz" videosuna bakın.

3
Daha sonra otomatik olarak eklense bile, fazladan boşlukların kaldırılabileceğini düşünüyorum.
Outgolfer Erik,

29

MATL , 57 56 52 49 48 bayt

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

Bu, aşağıdaki şekli üretmektedir (Matlab ve Octave üzerinde çalışan derleyici ile test edilmiştir).

enter image description here

EDIT: Deneysel olarak MATL Online'da deneyebilirsiniz ! (başlangıçta çalışmazsa sayfayı yeniden yüklemeniz gerekebilir).

Nasıl çalışır

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

26

CSS, 285 284 264 bayt

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

@İnsertusernamehere sayesinde 1 bayt kaydedildi.

Tüm kullanıcıları kaldırarak @ user2428118 sayesinde 20 bayt kaydedildi px . Bunun sayfanın tuhaflar modunda oluşturulmasını gerektirdiğini ve Yığın Parçacıklarında çalışmadığını unutmayın.

Python'un bir resmi bir ofsette sarmalama yaklaşımını kopyalayabilirdim, ama ilginç olmazdı.

Ungolfed:

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

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

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

*::after { background: #d72828 }

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

Bu, sözde unsurları (HTML'de yazılmayan öğeler) ::beforeve ::afterbayrakta çizgiler oluşturmak için kullanır. HTML'siz çalışmasının nedeni, HTML5'te <html>ve <body>öğelerinin isteğe bağlı olmasıdır, bu nedenle tarayıcılar yoksa, otomatik olarak onları oluşturur.

Daha fazla eğlence:


2
Hala kaydedebilirsiniz 1 byte değiştirerek whiteile #fff.
insertusernamehere

@insertusernamehere Evet, teşekkürler.
gcampbell

1
CSS’yi tuhaflar modunda (sayfa türü olmadan) uygularsanız, pxher yeri atlayarak bunu 264 bayta indirebilirsin .
user2428118

@ user2428118 HTML olmadığı için daha da faydalı, bu yüzden hayır <!doctype html>!
wizzwizz4

@ user2428118 Bazı nedenlerden dolayı bu benim için mobil Safari'de çalışmıyor. Bir sonraki bilgisayardayken bir göz atacağım.
gcampbell

26

Bash + Imagemagick 7, 94 90 86 85 bayt

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

@ GlennRanders-Pehrson sayesinde @manatwork ve 1 byte sayesinde 8 bayt kaydedildi


5
x:Çıktı dosya adı yerine belirtirseniz convert, sonucu aynı zamanda kabul edilebilir bir pencerede görüntüler. Ve sadece keskinlerden kaçmak için yeterli, alıntı yapmaya gerek yok \#d72828.
Manatwork

2
Genellikle Bash + Imagemagick gibi cevapları etiketleriz . Açık bashyan Başka 4 karakter kaydedebilirsiniz: convert -size 84x56 xc:#0048e0 ${s=-splice 8x8}+28+28 -background \#d72828 $s+32+32 x:.
Manatwork

Sadece aptal bir soru: Yapabilir misin ${s=-splice 8x8}+56?
Outgolfer Erik,

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ , değil +56olarak kabul edilir . +56+0+28+28
bodqhrohro

2
ImageMagick’in yeni bir sürümünü kullanarak başka bir byte kaydedebilirsiniz; sonra komut "convert" yerine "magick" olabilir.
Glenn Randers-Pehrson

20

ZX Spektrumu BASIC, 210 141 92 bayt

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

enter image description here

Boyut, bant üzerindeki BASIC programının boyutu olarak belirlenir SAVE. Facebook'ta ZX Spectrum grubunun bazı üyelerine, özellikle @impomatic ve Johan Koelman'a golf kredisi kazandı.


Bunları görmek PAPERve BRIGHTpek çok güzel hatıralar getiriyor :-)
Luis Mendo

Bir ZX Spectrum BASIC programının ne kadar hafıza harcadığına dair herhangi bir bilgi var mı? "Tokenize edilmiş" bir dil olduğunu düşündüm, yani beklediğim FOR, NOTvb. Her birinin yalnızca 1 veya belki 2 bayt
Luis Mendo

1
@LuisMendo Evet, tokenize - FORkesin olarak bir bayt. Bununla birlikte, sayılar hem metin hem de ikili biçimler olarak depolandıkları ve beklediğinizden 5 bayt alan, dolayısıyla NOT PIsıfır yerine vb.
Philip Kendall

AT'yi kaldırarak ve sınır testini ayarlayarak 132 bayt twitter.com/john_metcalf/status/752760203007791105
zombi

1
Bazı daha fazla iyileştirme ile 122 bayt twitter.com/john_metcalf/status/752783690179211264
bedensiz

15

ZX Spectrum Z80 Düzeneği, 65 bayt

    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

Icelandic Flag


14

Minecraft 1.10.2, 734 karakter

734 karakter olabilir, ancak şimdiye kadar gerçek yünden yapılmış tek başvuru !

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

Yaklaşık -5x -5z'ye gidin, bir Impulse komut bloğuna yapıştırın, "Always Active" olarak ayarlayın ve Tamam'a basın.

Bayrak 0, 0 ila 100, 72; ve yerleştirildiği gibi komut bloğunun 3 blok üzerindedir. Bu oldukça büyük bir gölge ve canavarlar altında yumurtlamaya. Bununla birlikte, bunun İzlanda ülkesi için doğru olup olmadığı herkesin tahmininde bulunuyor.

Adil uyarı - MinecartCommandBlockdört karakterden tasarruf etmek amacıyla dünyadaki herkesi öldürecek / öldürecek . Bunu fazla bağlı olduğunuz bir dünyada yönetmeyin.

Flag

Kullanılan MrGarretto komuta birleştiricisi ve çıktı üretmesi biraz tweaked (808 -> 734)


1
"Bunun İzlanda ülkesi için doğru olup olmadığı ..." 😂
Ürdün

2
Hedef seçici argümanı olmadan kill @ e'yi kullanamaz mısınız?
Oyuncuyu

11

Logo, 216 188 bayt

Calormen.com'un uygulamasını kullanarak . Sizin temizleyicileriniz için uygulama, kenarları birazcık hafifleten bir miktar antialiasing kullanıyor. Yine de, bunun için telafi etmesi gereken 3 baytı kaplumbağayı gizleyerek boşa harcadım.

Logo uygulamanız pencerenin boyutunu ayarlamanıza izin veriyorsa, bu büyük oranda azaltılabilir. Ardından wrap, dört vuruşta haç yapmak için kaplumbağayı sürtünebilir ve bir kenarlıkla kesmek zorunda kalmadan atlayabilirsiniz.

generated flag screenshot

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

Logo'nun İngilizce bilen bir sürümü olduğunu bilmiyordum!
Vincent,

1
Kesinlikle. Sanırım ilk 30 yıl önce Apple IIe'de gördüm. Ayrıca TRS-80 Renkli Bilgisayarımda da vardı. Okulda resmen öğrenmemden yıllar önce, geometride açıları kullanmak ilk tadımdı.
GuitarPicker

Neden etrafındaki beyaz sınır?
Solomon Ucko,

1
Çizgileri, haç uçlarına yuvarlatılmış kenarlar bırakan büyük bir kalem kullanarak çizdim, bu yüzden onları yukarı kaydırmak için büyük bir silgiyle etrafını taramak zorunda kaldım. Logo'da tamamen farklı bir yöntem kullanan ve daha küçük olduğu ortaya çıkan başka bir versiyonunu yazıyordum. Ayrıca, büyük bir Unicode Latin haçı basan ve boyayan üçüncü bir sürüm üzerinde çalışıyordum, ancak oranlar doğru değildi ve büyüklüğü bunu geçecek gibi görünüyordu.
GuitarPicker

10

Java 8, 449 447 bayt:

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

Çok geç bir cevap ve aynı zamanda burada en uzun cevap. java.awt.GraphicsMavi bloklar için 1, beyaz çizgiler için 2 ve kırmızı çizgiler için 2 olmak üzere toplam 5 dikdörtgen tarafından oluşturulan, içinde bayrak bulunan bir pencere oluşturmak ve açmak için sınıfı kullanır . 7 piksel kullanır: 1 birim oran. Başka bir deyişle, her birim için 7 piksel kullanılır. İşte çıktının bir Macintosh'ta OS X 10.11 ile bir görüntüsü:

Example Output

Şimdi bunu biraz daha aşağıya atmanın bir yolunu bulmak için ...


paintBunun yerine geçersiz kılmayı deneyin paintComponent. JPanel için anonim bir sınıf kullanmayı düşünün. Sadece bir BufferedImage kullanmayı ve bir dosya çıktısını almayı düşünün.
Justin,

@Justin Aslında, zaten Bluearka plan için 1 büyük dikdörtgen kullanıyordum . Bu ve Python'da yaptığım başka bir sürüm arasında biraz daha karışık oldum. Ne olursa olsun, diğer ipuçları için teşekkürler! :)
R. Kap

Bazı öneriler: Kullanmayın JPanel, sadece geçersiz kılın JFrame. Bunu sadece geçersiz kılarsanız paint, sen salıncak, sadece AWT gerek, bu yüzden değişmez JFrameetmek Frameve içe çıkarın. Arama super.paint. Ana yöntemi yeniden düzenleyin; hareket setSizeiçine paintkızımız biraz yöntemiyle Frame, değişken kaldırmak Jve ekleme .setVisible(true)anonim sınıfın sonuna kadar. Son olarak, değişiklik .setVisible(true)yapın show(), evet bu kullanımdan kaldırılmış bir yöntemdir, ancak daha kısadır. Ana yöntemden interfacekaldırmak için bir kullanın public.
Justin,

338 karakterdeki son sonuç (bir kareden beri yüksekliği de değiştirmek zorunda kaldı):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
Daha da iyisi: ilk dikdörtgeni boyamayın, sadece arayın setBackground(color)(boyut hala yanlıştı). Şimdi 317'de: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 bayt

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

Yeni satırlar ve açıklamalarla girintili:

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

Island flag

Düzenleme : varsayılan olarak frame(), aksine plot()veya plot.new()arsa değil arsa bir kenarlık eklemek, anlamı bty="n"burada gereksiz.


9

Atari 8 bit çalıştırılabilir, 123 bayt

Başka bir "sadece eğlence amaçlı" giriş, bu program Atari 8 bit bilgisayar veya emülatörde çalıştırılmak içindir. Örneğin, programı Atari800'e yüklemek için çalıştırmanız yeterlidir:

atari800 iceland.xex

Makine kodu (onaltılık bayt cinsinden)

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

Assembler kaynak kodu ( MADS ile derlenebilir ):

        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

Nasıl çalışır:

Program, ANTIC Mode 8'e (satır başına 40 piksel, 2 bpp) dayanan özel bir ekran listesi kullanır. Tekrarlanan çizgiler aynı hafıza konumundan yüklenir. Ekranı kurduktan sonra, program sonsuz bir döngüye girer.

Ekran görüntüsü:

iceland.xex running on Atari800


9

FFmpeg, 339 184 bayt

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

Bu golf oynamaya çalışacağım .. daha fazla.

100x72 image of Iceland flag


9

Python, 119 118 114 112 bayt

Özel bir şey yok, anlaşılır:

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

İkili PPM olarak çıktı, kullanım

python golf_iceland.py > iceland.ppm
  • Edit1: printtırnak işareti arasında bir bayt attı
  • Edit2: ikili PPM olarak biraz daha kısa
  • Düzen3: \0Bunun yerine kullanılabilecek figür\x00

Birisi yazdırılamayan ASCII karakterini doğrudan nasıl kullanacağını biliyorsa, lütfen bildirin.

Converted to PNG


2
Tebrikler! Beni çok fazla yendin: D
Gábor Fekete

2
@ GáborFekete sizi bayt cinsinden yendi, evet. Ama cevabınız bu dengelemeyle çok daha akıllıca
Karl Napf

Neden kaçanların kendileri yerine kaçanların sonuçları olmasın?
Solomon Ucko,

@SolomonUcko b,w,r="\0Hà"*28,"ÿ"*12,"×(("*8Python 3'ü denedim ve kullandım, ancak çalışmıyor.
Karl Napf

@KarlNapf, nasıl başarısız oldu? Yanlış mı çizdi veya bir hata mesajı verdi mi? Ayrıca bir kodlama sorunu olabilir.
Solomon Ucko

8

JavaScript, 267 bayt

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


1
Sol ve sağ mavi genişliklerin 7 - 14 oranının doğru olduğundan emin misiniz?
Manatwork

1
@manatwork Hata! Bir nedenden dolayı 100/25 = 5 olduğunu düşündüm, bu yüzden her şey% 25 fazla genişliğe ulaştı.
Neil,

8

Java, 335 bayt

İşlev

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

Ve istenen görüntüyü şöyle yazar: f.png 100x72 boyutunda yazar.

(Bu notun doğrudan bir rakip olmadığını unutmayın. Cevap R. Kap tarafından , çünkü bir dosyayı yazdığını ve görüntüyü ekranda göstermediğini unutmayın)

İşte derlenip çalıştırılabilen ungolfed versiyonu:

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

İlgili sorularla ilgili bir not: Belki birisinin bayraklarını boyamak için bir meydan okuma yaratması gerekir.

  • Endonezya
  • Polonya
  • Finlandiya
  • Fransa
  • Hollanda
  • Tayland
  • Norveç

aynı zamanda:

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


7

SVG + Javascript, 190 165 164 bayt

Orada hiçbir uzman, sadece renk ve çizgi genişliğini değiştirmek için bir yolu tekrarlamak aptalca javascript ftw görünüyor !

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

Daha okunabilir:

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

path d="m0,0h100v72H0"İki bayt kaydetmek için dikdörtgen yerine kullanabilirsiniz . Aynı şekilde, M0 36H100M36 0V72başka bir beş bayttan tasarruf sağlayan diğer yolun verileri için kullanın . Ve bırakın stylehem ilan lehine niteliğini stroke-widthve strokenitelikler olarak başka bir beş bayt kaydedin.
Joey

7

İşleme , 136 bayt

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

Ungolfed

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

Çıktı:

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


1
Sen kullanarak iki bayt tıraş edebilir fillve rectyerine sizeve background. 134 bytes:noStroke();fill(#0048e0);rect(0,0,100,72);fill(255);rect(0,28,100,16);rect(28,0,16,72);fill(#d72828);rect(0,32,100,8);rect(32,0,8,72);
GuitarPicker

GuitarPicker’ın söylediğine eklenmesi fill(-1), bir bayttan daha kısa bir süredirfill(255)
İnekler,

7

Mathematica 174 157 bayt

Yerleşik olmayanlar:

157 bayt

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

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

Veya alternatif olarak

232 bayt

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

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


1
rica ederim. aynı ikinci uzun sürüme uygulanabilir. u=Unitize;c=ConstantArrayetc ^ _ ^
Dan Oak

1
Bekle, Mathematica'nın yerleşik bir özelliği yok mu? Şaşırdım.
Morgan Thrapp

@MorganThrapp Bir yerleşik kullanarak başka bir Mathematica cevabı olduğundan eminim.
gcampbell

3
VarCountryData["Iceland", "Flag"]
dwa 18:16

7

JavaScript (ES6), 231 240

Aşağıdaki kod parçasının içindeki kodu. Test etmek için çalıştırın.

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


7

ZX Spektrumu Z80 Düzeneği, 51 bayt

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

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


7

J, 86 84 83 bayt

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

Yaklaşım @ Gábor Fekete Python ile aynıdır.

Sol argüman colorsiçinviewmat bizim durumumuzda RGB değerlerinin bir dizidir:

255 255 255
  0  72 224
215  40  40

Ve doğru argüman bir indeks matrisidir colors. Her boyutta 9 öğe
(_9 _9 |. matrix)değiştirmeyi matrixsöyler.
Korkunç inşaat numarası ile (border ([,~[,.~[,[,.]) matrix)tamamladımatrixborder .
Ve (14 21 $ 1)14 × 21 olanların matrisini yapar.

Çıktı, yeniden boyutlandırılabilir ayrı bir pencerede görüntülenir, varsayılan olarak oldukça büyüktür. görüntü tanımını buraya girin

Teşekkürler

mil - renkleri yeniden sıralayarak 2 bayt kurtardı, bu özelliği ,, şekil anlaşması için sayıları (255) çoğaltan özelliğini kullandı .


1
Bayrağın yüksekliği 25 yerine 26 birim gibi gözüküyor
Gábor Fekete

@ GáborFekete hm, 18 yerine yükseklik 19 demek istedin? Bundan bahsetmedim, yorumunuzu yaptıktan sonra farkettim
Dan Oak

Oh doğru yükseklik yazdım ama genişlik değerleri kullandım ...
Gábor Fekete

evet, gerçekten. değerlerde bir hata yaptım. başlangıç ​​matrisinin şekli 14 21(18 25 - 4 4 ) . düzeltiliyor ... teşekkür ederim!
Dan Oak

1
Rgb değerlerini yeniden düzenleyerek 2 bayttan tasarruf edebilirsiniz(255,0 72 224,:215 40 40)viewmat _9 _9|.2(b=.[,~[,.~[,[,.])0 b 14 21$1
miller

6

TI-BASIC (rekabet etmeyen), 323 bayt

TI-84, 83 ve çeşitleri için kod yazılmıştır. Umarım boyutların cihaza göre değişmesi ve kodun renkli olmaması sorun değildir.

Kurmak:

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

Çizim:

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

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

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

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

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

golfed:

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

Evet, eksikliği )kasıtlı.

Boyut:

Line(ve bunun gibi tüm komutlar 1 bayt alır, her sayı bir bayt alır. Bu 323 bayt.

Bu kesinlikle sıkıcıydı. Umarım bir emülatöre bunu alacağım (her şeyi el ile girmek zorundayım) ancak kelimenin tam anlamıyla bayrak şeklindeki satırlar.


1
@ Random832 Tuhaf, evet! Burada belirteç boyutunu kontrol edin: tibasicdev.wikidot.com/line Baytın tam olarak ne olduğundan emin değilim. Ancak, hesap makinesinde esasen char olarak kabul edildiğini biliyorum.
charredgrass

1
@ Random832 Bayt, 0x9C'dir Line(. Burada bir bayt jetonlu
f ''

1
Eğer (kullanarak bölgeleri kullanarak grafiğini olamazdı <ve >gri tonlama gölgeleme almak yerine hatların)?
mbomb007

7
Bu neden rekabet etmiyor?
Mego

1
Şimdi renkli bir TI-84 olduğuna dikkat edin, bu nedenle muhtemelen üzerinde yalnızca küçük değişikliklerle çalıştırabilirsiniz.
Moshe Katz

6

C #, 384 346 317 292 291 289 Bayt

Windows Formları ve GDI ile basit çözüm

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

kullanım

Yeni bir konsol projesi başlatın ve yukarıdaki kodu ana yönteme koyun, System.Drawing-Namespace öğesini ekleyin.

Nasıl çalışır

Kod yeni bir görüntü oluşturur ve üzerine bazı çizgiler çizer. Görüntüyü diske kaydeder. Çizgilerin bitiş noktalarından bazıları görünür alanın dışında.

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


PPCG'ye Hoşgeldiniz! Büyük ilk codegolf, ama görünüşe göre geliştirebilirsin. Öncelikle burada ve orada bazı boşlukları kaldırabileceğinizi düşünüyorum ( b = new=> b=new, using ()=> using(), ;s sonra boşluk kullanmayın . İsterseniz, bazı önerileri bulmak için C # 'da golf için İpuçları bölümümüzü okuyabilirsiniz .
Katenkyo

Teşekkürler, boşluklar kaldırıldı ve use ifadesini de siliyorum. Şimdi anonim değişkenleri de kullanıyorum.
soema,

İhtiyacınız olduğundan emin Process.Start(f);misiniz? Anladığım kadarıyla, bu benzer cmd start. Görüntüyü kaydetmeyi veya görüntülemeyi seçebildiğiniz ve zaten kaydetmiş olduğunuz gibi, bu adım anlamsız görünüyor. Bu durumda belki de f değişkeni bildirmekten kaçınabilirsiniz.
Manatwork

Evet! Sadece şimdi
kazanın

Ad alanının usingyanı sıra bir yöntem bildirimi veya programın bir parçası için baytları saymalısınız. Tüm bunlar ihtiyaç duyulanın bir parçasıdır (görev size bir işlev veya program seçimi sunar, ancak sadece bir grup ifadenin seçimi değildir).
Joey

6

Python IDLE, 191 172 156 bayt

IDLE, Python'un standart IDE'sidir. Özel bir teması yoksa STDOUT, mavi, STDERRkırmızı ve arka plan beyazdır. Yani, aşağıdaki kod:

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

Bu çıktıyı üretir:

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

Basılı olmayan karakterler kare gibi, bu biraz kapalıdır, ancak 1 birimi 2 karakter ve 1 karakter yüksekliğinde alırsak, oranlar kesindir.

Bu, genişlik boyutunun yarısı alınarak ve bloklar için bir ASCII karakteri kullanarak golf oynayabilir '#', ancak tam olarak aynı etkiye sahip değildir.


açıklama

Kod şu anda oldukça özensiz görünüyor ve kesinlikle golf olabilir, ancak temel fikir şudur:

  • 0Beyaz boşluğu 1temsil eden, mavi bloğu 2temsil eden ve kırmızı bloğu temsil eden bir matris oluşturun .
    • İlk yarı (esas olarak liste dilimleme / çarpma yoluyla) oluşturulur ve tam bayrağı oluşturmak için kendisinin tersine eklenir.
  • Matris boyunca döngü, boşluk ya da bir blok ya da her değer baskı STDERR/ STDOUTbuna göre. Her satırdan sonra yeni bir satır yazdırın.

6

Python Kaplumbağa, 176 bayt

Başka bir Python Kaplumbağa uygulaması, ancak bu kez çizim yapmak yerine damgalamaya dayanıyor :

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

Damgalamayı kullanmak ve kolayca ölçeklenebilir hale getirmek, yaklaşık 60 baytlık kod tasarrufu sağlar.

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

Eğlenceli kısmı yerini alabilir olduğu "square"ile poligon seçeneği "turtle"çokgen seçeneği shape()çağrısı ve bir ecogroovy logo olsun:

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


5

Perl, 134 bayt

Not: \x1bAslında ASCII çıkış karakteridir ve 1 bayt olarak sayılır.

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

kullanım

Farklı kaydet iceland-flag.plve çalıştır:

perl iceland-flag.pl

Squished bayrağı

ANSI kaçış dizilerini kullanır ve bayrağı görüntülemek için bir Linux terminali varsayar. Verilen ölçümleri kullanarak biraz garip görünüyor.

Perl, 141 bayt

Bu sürüm orijinal boyutlara biraz daha yakın görünüyor ...

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

Daha az bayrak


1
Tuhaflık, karakterlerin genişliklerinden daha uzun olmaları gerçeğinden geliyor.
Outgolfer Erik,

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Gerçekten, sabit genişlikte yazı tipleri olup olmadığını merak ettim, ama özellikle iyi görüneceklerini sanmıyorum! Daha yakın görünmek için ikinci versiyonunu güncelleyebilirim (şu an olduğundan daha fazla bayt almamalı, fakat zaman ...)
Dom Hastings

Bir TTY, böyle bir şey merak edemezsiniz , yazı tipi yazı tipi! Bunu sevemezsin çünkü değiştiremezsin.
Outgolfer Erik,

5

SpecaBAS - 150 bayt

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

Mürekkep rengini, x, y, genişlik ve yüksekliği okur ve bu koordinatlara / boyutlara sahip bir dikdörtgen çizer.

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


Herinden sonra boşluklara mı ihtiyacınız var :? Oh, ve bu 151 byte.
Outgolfer Erik,
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.