アイスランドの国旗を描く


107

今年のUEFA Euro 2016は終了し、いくつかの否定的な見出しに加えて、アイスランドのサッカー代表チームという非常に前向きな驚きもありました。国旗を描きましょう。

入力

まあ、明らかに、この課題には入力がありません。

出力

  • アイスランドの旗を、少なくとも100 x 72ピクセルまたは25 x 18文字の適切な視覚形式で描きます。
  • 出力をファイルに保存するか、すぐに表示します。例の形式は、png、jpgなどの画像、ベクターグラフィックス、HTMLキャンバスに描画、または視覚化に空白以外の文字を使用します。
  • これらの色を使用してください#0048e0#ffffffおよび#d72828
  • 言語が特定の色の値をサポートしていない場合は、ANSIカラーコードの白の標準値を使用してください。
  • 次の図に示すように、正しい比率でフラグを描画します。

ボイラープレート

  • プログラムまたは関数を作成できます。無名関数の場合は、呼び出す方法の例を含めてください。
  • これはので、バイト単位の最短回答が勝ちです。
  • 標準の抜け穴は許可されていません。

リーダーボード

回答が見つからない場合は、リーダーボードの「情報セクション」の説明に従って、言語とバイトカウントをフォーマットします。


この課題は、フランスの国旗を描くことに触発されています。


20
はるかに難しいのは、今年のユーロで予想よりもはるかに良い成績を収めた私の国、ウェールズです。:
ガレス

24
@Garethドラゴンの防水仕様が楽しみです。;)
マーティンエンダー

4
上の画像の青は実際よりも暗いように見えます#0048e0
ルイスメンドー

10
@MartinEnder石のタブレットに彫ることは重要ですか?それは防水です。
-immibis

5
@MartinEnder Mathematicaには1つあります。
-gcampbell

回答:


259

Python 3、190 172 171 169 167 160 159 147 143バイト

廃止されたが削除されていないオフセットメソッドを持つPILバージョン1.1.7を使用します。

from PIL.ImageDraw import*
i=Image.new('RGB',(25,18),'#d72828')
Draw(i).rectangle((1,1,23,16),'#0048e0',~0)
i.offset(9).resize((100,72)).show()

赤で塗りつぶされた25 * 18ピクセルの画像を作成し、1ピクセルの白い輪郭で青で塗りつぶされた23 * 16ピクセルの長方形を描画します。次に、画像を(9,9)オフセットします。これにより、エッジが折り返され、100 * 72にサイズ変更され、ウィンドウに表示されます。

オフセット前のフラグ:

ここに画像の説明を入力してください (100 * 72にサイズ変更)

出力:

ここに画像の説明を入力してください

アニメーション:

ここに画像の説明を入力してください

Edit1:最初に25 * 18イメージを作成してトリミングを削除することにより、18バイトをゴルフしました。

Edit2:の#fff代わりにを使用して1バイトをゴルフしましたwhite

Edit3:インポートのエイリアスを作成して2バイトをゴルフしました。

Edit4:offsetメソッドの2番目の引数を削除して2バイトをゴルフしました。

Edit5:保存する代わりに画像を表示して7バイトをゴルフしました。(Unixにimagemagickがインストールされている必要があります)

Edit6:インポートを書き換えて1バイトをゴルフしました。

Edit7:インポートを再度書き換えて12バイトをゴルフしました。(@Dennisに感謝)

Edit8:アニメーションを追加しました。

Edit9:最後のフレームが欠落していたため、アニメーションを更新しました。

Edit10:アルバートレンショーのおかげで4バイトのゴルフをしました!


42
本当にいい答えです。
ここにユーザー名を挿入します

17
これは天才です!(バイキング)あなたにハット。
ヨアンズ

25
うわー、SOでコードゴルフタイプの質問に投票することはめったにありませんが、そうするためだけにまったく新しいコミュニティに参加することはさらにまれです。このオフセットハックは、若いwhippersnappersが1バイトのメモリを処理する前に行う必要があったものを思い起こさせます。よくできました。

5
天才、本当に!💡
InuYaksa

3
するとfrom PIL.ImageDraw import*、にIなりImage、にD.DrawなりDraw、11バイトを節約します。
デニス

117

DOS COM用のx86リアルモードマシンコード、69 65 63 62バイト

アイスランド国旗

コードは、DOS COM実行可能ファイルとして実行されることを意図しています。

特別な感謝

  • medenは、4バイトを節約しました。
  • medenは2バイトを節約し、ちらつきを取り除きました。

マシンコード(16進バイト単位)

68 00 A0 07 B8 13 00 CD      10 BE 23 01 AD 91 AD 91 
AC E3 FE 60 30 ED F3 AA      61 81 C7 40 01 FE CD 75 
F2 EB E9 FA B4 00 00 09      28 B4 46 00 0F FA 28 80 
57 0F 14 B4 0C 50 00 FA      14 0C 00 64 00 00

組立元

ソースはNASM用です。

ORG 100h

push 0a000h
pop es

mov ax, 13h
int 10h

mov si, data


_draw:
 lodsw
 xchg ax, cx

 lodsw
 xchg ax, di

 lodsb

_cycle:
 jcxz _cycle

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

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

jmp SHORT _draw


data: 

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


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


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

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


        db 250
        db 20
        dw 25600d 
        db 0ch


        dw 0000h

13
これは本当にクールな最初の答えです!ようこそ!
AdmBorkBork

5
あなたは「jcxz」16時間でで「テストCX、CX / JZ」に置き換えることにより、10H&13Hと別の2バイトで「XCHG」で「MOV」を置き換えることによって、2つのバイトを保存することができます
meden

3
さらにいくつかの考え。プログラムは無限ループで実行されるため、ループを短くするだけでちらつきを回避できます_loop: jcxz _loopcxand の読み込み順序を変更すると、データチャンクの末尾から2バイトをカットすることもできますdi
meden

再び@medenに感謝します。ちらつきは事実上完全に不要でした:)またmov bx, 320320add di, 320(以前のadd di, bx)に移動しました。
マーガレットブルーム

すばらしいです。これで、この課題におけるすべてのマシンコードの答えに対して確固たる優位性を得ることができました。正確さのために:データの終わりを超えてバイトをロードしないように、jcxz _cycleすぐに移動することをお勧めxchg ax,cxします。また、ソースには誤解を招くようなコメントがあります;dx = rowdxコードのどこにも使用されていません。
meden

55

C、194 191 183のバイト

#define C "\x1b["
#define A "@@@@@@"
y;f(){for(;y++<14;)printf(y>5&&y<10?y>6&&y<9?C"31m"A A A A"@\n":C"0m"A"@@"C"31m@@"C"0m"A A"@@@\n":C"34m"A"@"C"0m@"C"31m@@"C"0m@"C"34m"A A"@@\n");}

-3いずれかを添加すること@#define A
-8添加[#define C

使用法

main(){f();}

出力

画像

OPからのこのコメントに基づいて有効

ダブルサイズ出力、204バイト

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

image2


22
5回目の賛成票により、ネットワーク全体で+810 repがトリガーされました...ありがとう!(はい、200担当者に達する最初のサイト:D)
ジャコモガラベロ

1
結果は「少なくとも100 x 72単位、単位はピクセルまたは文字」である必要はありませんか?これはこの要件を満たしていませんが、その定義を作成するときにOPが間違いを犯したと思われます。
クリツェフィッツ

4
@Kritzefitzさて、文字は多くのピクセルを占有するため、文字ではなくピクセルにすることができます。穴を見つけました。
エリックアウトゴルファー16

@GiacomoGarabelloあなたが+150を得た写真の最初のサイトは何ですか?アイコンがわかりません。


31

エクセルVBA、254の 228 153バイト

列/行のサイズをピクセルに設定する方法を実際に見つけることができませんでした(それにより正方形になります)。

編集1:RGBを色の戻り値、-26バイトに置き換えました

編集2:できる限り多くの提案、-75バイトを追加しようとしました。私は&48e0色として使用することができなかったので、なぜかわかりません。みんな、ありがとう

Sub e()
c "A1:CV72", rgbBlue
c "AC1:AR72", -1
c "A29:CV44", -1
c "AG1:AN72", 255
c "A33:CV40", 255
End Sub

Sub c(d, f)
Range(d).Interior.Color = f
End Sub

画像: アイスランドの旗


どのようにしてセルを正方形にしましたか?手動で実行しましたか、それとも他のスクリプトが含まれていませんか?あなたの得点プログラムの一部ではなくても、私はそれを見たいです。
mbomb007

私は手動でそれを追加しましたが、セル幅を変更するコードは簡単に追加できましたが、行/列またはモニター解像度間でサイズが一貫していないため、ピクセルに基づいてサイズを設定できません私が見つけることができるもの。私が読んだものから、あなたは解像度を見つけて、関数を受け入れるサイズにピクセルを変換するためにいくつかの数学をしなければなりません。
tjb1

1
また、ピクセルに変換するコードは、解像度またはPPIの一部をハードコードする必要があるように見えます(式は本当にわかりません)ので、すべてのデバイスで動作しないようです。
tjb1

2
また、完全性のために(ソリューション自体ではなく正方形のセルを設定するために)、ページレイアウトビューに切り替えた場合、セルの高さと幅をなどの特定の値に設定できます0.2cm。これは、元に戻すと維持されますが、Excelの奇妙なアスペクト比を試す必要はありません:-)ちなみに、さらにクールなExcelのトリックが必要な場合は、Joel Spolskyの「You suck at Excel」ビデオを参照してください。

3
余分な空白は後で自動的に追加されますが、削除できると思います。
エリックアウトゴルファー

29

MATL57 56 52 49 48バイト

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

これにより、次の図が生成されます(MatlabおよびOctaveで実行されているコンパイラでテスト済み)。

ここに画像の説明を入力してください

編集:MATL Onlineで実験的に試すことができます(最初に動作しない場合は、ページを再読み込みする必要があります)。

使い方

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

26

CSS、285の 284 264バイト

*,:before,:after{background:#fff;width:100;height:72}body{background:#0048e0;margin:0}:before,:after{content:"";position:fixed}:after{background:#d72828}html:before{top:28;height:16}body:before{left:28;width:16}html:after{top:32;height:8}body:after{left:32;width:8

@insertusernamehereのおかげで1バイト保存されました。

すべてのpxsを削除することにより、@ user2428118のおかげで20バイト節約されました。これには、ページをQuirksモードでレンダリングする必要があるため、スタックスニペットでは機能しないことに注意してください。

画像をオフセットでラップするPythonのアプローチをコピーできますが、それは面白くないでしょう。

ゴルフをしていない:

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

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

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

*::after { background: #d72828 }

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

これは、擬似要素(HTMLで書かれていない要素)を使用::beforeし、::afterフラグに行を作成します。HTMLなしで動作する理由は、HTML5では要素<html><body>要素がオプションであるため、存在しない場合はブラウザが自動的に作成するためです。

もっと楽しく:


2
に置き換えることで、1バイトを節約できます。white#fff
insertusernamehere

@insertusernamehereはい、ありがとう。
-gcampbell

1
CSSをquirksモード(doctypeのないページ)で適用する場合、pxどこでも省略して264バイトまで下げることができます。
user2428118

@ user2428118 HTMLがないため、さらに便利です<!doctype html>。したがって、!
wizzwizz4

@ user2428118何らかの理由で、モバイルSafariでは動作しません。私が次にコンピュータに来るとき、私は見ていきます。
-gcampbell

26

バッシュ+ ImageMagickの7、94 90 86 85のバイト

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

@manatworkのおかげで8バイト、@ GlennRanders-Pehrsonのおかげで1バイト節約


5
x:出力ファイル名の代わりに指定するconvertと、結果がウィンドウに表示されますが、これも受け入れられます。そして、シャープをエスケープするだけで十分です\#d72828。引用する必要はありません:。
マナトワーク

2
通常、このような回答にはBash + Imagemagickというラベルを付けます。上 bash側面あなたは他の4つの文字を保存することができますconvert -size 84x56 xc:#0048e0 ${s=-splice 8x8}+28+28 -background \#d72828 $s+32+32 x:
マナトワーク

ただの愚かな質問:あなたはできますか${s=-splice 8x8}+56
エリックアウトゴルファー16

@EʀɪᴋᴛʜᴇGᴏʟғᴇʀ +56はとして+56+0ではなくとして扱われ+28+28ます。
bodqhrohro

2
ImageMagickの最新バージョンを使用して、別のバイトを保存できます。その場合、コマンドは「convert」ではなく「magick」になります。
グレンランダース-パーソン

20

ZX Spectrum BASIC、210 141 92バイト

1 LET n=-VAL "8.5": FOR y=n TO -n: FOR x=n TO VAL "16": LET p=VAL "271"(PI-(ABS x<SQR PI OR ABS y>SQR PI)-NOT INT ABS x*INT ABS y): PRINT PAPER p; BRIGHT p>PI;" ";: NEXT x: PRINT : NEXT y

ここに画像の説明を入力してください

を介してテープ上のBASICプログラムのサイズとして決定されたサイズSAVEFacebookのZX Spectrumグループのメンバー、特に@impomaticとJohan Koelman の多くのゴルフの功績。


それらPAPERを見て、BRIGHTたくさんの良い思い出をもたらします:-)
ルイスメンドー

ZX Spectrum BASICプログラムが使用するメモリ量に関する情報はありますか?私はつまり、私が期待し、それが「トークン化」言語だと思ったFORNOTそれぞれ1つだけまたは多分2バイトを取ることなど
ルイスMendo

1
@LuisMendoはい、トークン化されます- FOR正確に1バイトです。ただし、数値はテキスト形式とバイナリ形式の両方として格納され、予想よりも5バイト多く使用されるためNOT PI、ゼロなどではなく「トークン化」されます。
フィリップケンドール

ATを削除して境界テストを調整することで132バイトtwitter.com/john_metcalf/status/752760203007791105
impomatic

1
いくつかのさらなる最適化を伴う122バイトtwitter.com/john_metcalf/status/752783690179211264
impomatic

15

ZX Spectrum Z80アセンブリ、65バイト

    ld hl,22528
    ld b,7
    ld de,120*256+8 ; white, blue
    ld a,16         ; red

; create the first row

blueleft:
    ld (hl),e
    inc hl
    djnz blueleft

    ld (hl),d
    inc hl
    ld (hl),a
    inc hl
    ld (hl),a
    inc hl
    ld (hl),d
    inc hl

    ld b,14
blueright:
    ld (hl),e
    inc hl
    djnz blueright

; copy the first row to the next 17 rows

    ld l,b
    ld de,22528+32
    ld bc,17*32
    ldir

; add the horizontal stripe

    ld hl,22528+7*32
    dec d
    ld e,b
    ld c,2
midrep:
    ld b,25
midstripe:
    cp (hl)
    jr z,red
    ld (hl),120
red:
    ld (de),a
    inc hl
    inc de
    djnz midstripe

    ld hl,22528+10*32
    ld e,9*32
    dec c
    jr nz,midrep
    ret

アイスランドの旗


14

Minecraft 1.10.2、734文字

734文字かもしれませんが、実際の羊毛で作られた唯一の投稿です!

summon FallingSand ~ ~1 ~ {Block:log,Time:1,Passengers:[{id:FallingSand,Block:redstone_block,Time:1,Passengers:[{id:FallingSand,Block:activator_rail,Time:1,Passengers:[{id:MinecartCommandBlock,Command:"fill 0 ~ 0 100 ~ 72 wool 11"},{id:MinecartCommandBlock,Command:"fill 28 ~ 0 44 ~ 72 wool"},{id:MinecartCommandBlock,Command:"fill 0 ~ 28 100 ~ 44 wool"},{id:MinecartCommandBlock,Command:"fill 32 ~ 0 40 ~ 72 wool 14"},{id:MinecartCommandBlock,Command:"fill 0 ~ 32 100 ~ 40 wool 14"},{id:MinecartCommandBlock,Command:setblock ~ ~ ~1 command_block 0 replace {Command:fill ~ ~-3 ~-1 ~ ~ ~ air}},{id:MinecartCommandBlock,Command:setblock ~ ~-1 ~1 redstone_block},{id:MinecartCommandBlock,Command:kill @e[type=MinecartCommandBlock]}]}]}]}

約-5x -5zに移動し、Impulseコマンドブロックに貼り付けて、「常にアクティブ」に設定し、完了を押します。

フラグの範囲は0、0〜100、72です。配置されたコマンドブロックの3ブロック上にあります。これはかなり大きな影を落とし、そしてモンスターはその下に産卵します。しかし、これがアイスランドの国にとって正確であるかどうかは、誰でも推測できます。

公正な警告MinecartCommandBlock-4人のキャラクターを救うために、世界中のすべての人を殺します。過度に愛着のある世界でこれを実行しないでください。

国旗

MrGarrettoのコマンドコンバイナーを使用し、出力を少し調整しました(808-> 734)


1
「これがアイスランドの国にとって正確かどうか...」😂–
ヨルダン

2
ターゲットセレクター引数なしでkill @eを使用することはできませんか?これは、プレイヤーを殺すちょっとフラグがまだあるだろう
Kuilinリー

11

ロゴ、216 188バイト

Calormen.comの実装を使用します。純粋主義者のために、実装ではエッジを少しぼかしたアンチエイリアスを使用します。しかし、私は3バイトをカメを隠して無駄にしました。

ロゴの実装でウィンドウのサイズを設定できる場合、これを大幅に減らすことができます。次にwrap、カメをpでて4回のストロークで十字架を作成し、枠でトリミングする必要がないようにします。

生成されたフラグのスクリーンショット

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の英語版が存在することは知りませんでした!
ビンセント

1
絶対に。30年以上前にApple IIeで初めて見たと思います。また、TRS-80カラーコンピューターでも使用しました。私が学校で公式に学ぶ前に、幾何学で角度を使うことの最初の味でした。
GuitarPicker

なぜその周りに白い境界線があるのですか?
ソロモンウッコ16

1
大きなペンを使用して線を描きましたが、それは十字の先端に丸い縁を残すので、それらを四角くするために大きな消しゴムで掃引しなければなりませんでした。私はこれとは別のバージョンのロゴを書いていましたが、これはロゴでまったく異なる方法を使用し、サイズが小さいことが判明しました。また、Unicodeの大きなラテンクロスを印刷してペイントする3番目のバージョンを作成していましたが、比率が正しくなく、サイズがこのサイズを超えるように見えました。
GuitarPicker

10

Java 8、449 447バイト:

import java.awt.*;import javax.swing.*;class A extends JPanel{public void paintComponent(Graphics G){super.paintComponent(G);G.setColor(new Color(0,72,224));G.fillRect(0,0,175,126);G.setColor(Color.WHITE);G.fillRect(49,0,28,126);G.fillRect(0,49,175,28);G.setColor(new Color(215,40,40));G.fillRect(56,0,14,126);G.fillRect(0,56,175,14);}public static void main(String[]a){JFrame J=new JFrame();J.add(new A());J.setSize(175,147);J.setVisible(true);}}

非常に遅い回答であり、ここで最も長い回答でもあるようです。このjava.awt.Graphicsクラスを使用して、フラグが設定されたウィンドウを作成して開きます。このウィンドウは、青いブロックに1つ、白いストライプに2つ、赤いストライプに2つで構成される合計5つの長方形で作成されます。7ピクセル:1ユニット比を使用します。つまり、ユニットごとに7ピクセルが使用されます。OS X 10.11を搭載したMacintoshでの出力の画像を次に示します。

出力例

これをもう少しゴルフする方法を見つけるために...


paint代わりにオーバーライドしてみてくださいpaintComponent。JPanelに匿名クラスを使用することを検討してください。BufferedImageを使用してファイルに出力することを検討してください。
ジャスティン

@Justin実際、私はすでにBlue背景に1つの大きな長方形として使用していました。私はこれとPythonで作成した別のバージョンとの間で混乱しました。とにかく、他のヒントをありがとう!:)
R. Kap

いくつかの提案:aを使用せずJPanel、単にオーバーライドしますJFrame。これを行い、単にオーバーライドpaintする場合は、Swingは必要なく、AWTだけが必要なので、JFrameto Frameを変更してインポートを削除します。電話しないでくださいsuper.paint。メインメソッドを再配置します。をメソッドに移動しsetSizeて、変数を削除し、匿名クラスの最後に追加します。最後に、に変更します。はい、これは非推奨のメソッドですが、短くなります。を使用して、メインメソッドからを削除します。paintFrameJ.setVisible(true).setVisible(true)show()interfacepublic
ジャスティン

338文字での最終結果(フレームであるため、高さも変更する必要がありました):import java.awt.*;interface A{static void main(String[]a){new Frame(){public void paint(Graphics G){setSize(175,119);G.setColor(new Color(0,72,224));G.fillRect(0,0,175,126);G.setColor(Color.WHITE);G.fillRect(49,0,28,126);G.fillRect(0,49,175,28);G.setColor(new Color(215,40,40));G.fillRect(56,0,14,126);G.fillRect(0,56,175,14);}}.show();}}
ジャスティン

1
さらに良いことは、最初の長方形をペイントせずに、呼び出すだけですsetBackground(color)(サイズもまだ間違っていました)。現在317:import java.awt.*;interface A{static void main(String[]a){new Frame(){public void paint(Graphics G){setSize(175,126);setBackground(new Color(0,72,224));G.setColor(Color.WHITE);G.fillRect(49,0,28,126);G.fillRect(0,49,175,28);G.setColor(new Color(215,40,40));G.fillRect(56,0,14,126);G.fillRect(0,56,175,14);}}.show();}}
ジャスティン

10

R、197の 195 187バイト

w="white";r="#d72828";png(w=100,h=72);par(mar=rep(0,4),bg="#0048e0",xaxs="i",yaxs="i");frame();rect(c(0,7,0,8)/25,c(7,0,8,0)/18,c(1,.44,1,.4),c(11/18,1,5/9,1),c=c(w,w,r,r),b=NA);dev.off()

インデントされ、新しい行と説明があります:

w="white"
r="#d72828"
png(w=100,h=72) #Creates in working directory a png called Rplot001.png 
                #with a width and a height of 120 and 72 pixels respectively.
par(mar=rep(0,4), #No margin around the plot
    bg="#0048e0", #Blue background
    xaxs="i",yaxs="i") #Axes fits range exactly
frame() #Creates an empty plot which range is xlim=c(0,1) & ylim=c(0,1)
rect(c(0,7,0,8)/25, #Because rect is vectorized
     c(7,0,8,0)/18,
     c(1,.44,1,.4), #i. e. c(25,11,25,10)/25
     c(11/18,1,5/9,1), #i. e. c(11,18,10,18)/18
     c=c(w,w,r,r), # c= is the same as col=, thanks to argument name completion
     b=NA)#No borders
dev.off()

島の旗

編集:結局のところframe()に反し、plot()またはplot.new()デフォルトでプロットに境界線を追加していない、という意味bty="n"ここでは不要でした。


9

Atari 8ビット実行可能ファイル、123バイト

もう1つの「楽しみのため」のエントリであるこのプログラムは、Atari 8ビットコンピューターまたはエミュレーターで実行することを目的としています。たとえば、Atari800にプログラムを読み込むには、次を実行します。

atari800 iceland.xex

マシンコード(16進バイト単位)

ff ff 00 06 74 06 a9 1b 8d 30 02 a9 06 8d 31 02
a9 44 8d c4 02 a9 0f 8d c5 02 a9 84 8d c6 02 d0
fe 70 70 70 48 57 06 48 57 06 48 57 06 48 57 06
48 57 06 48 57 06 48 57 06 48 61 06 48 6b 06 48
6b 06 48 61 06 48 57 06 48 57 06 48 57 06 48 57
06 48 57 06 48 57 06 48 57 06 41 1b 06 ff fe 5b
ff ff ff c0 00 00 00 aa aa 5a aa aa aa 80 00 00
00 55 55 55 55 55 55 40 00 00 00

アセンブラーソースコード(MADSでコンパイル可能):

        org $0600
        lda <dlist
        sta $0230
        lda >dlist
        sta $0231
        lda #$44
        sta $02c4
        lda #$0f
        sta $02c5
        lda #$84
        sta $02c6
loop    bne loop
dlist   dta $70, $70, $70
        dta $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1)
        dta $48, a(line2)
        dta $48, a(line3), $48, a(line3)
        dta $48, a(line2)
        dta $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1), $48, a(line1)
        dta $41, a(dlist)
line1   dta $ff, $fe, $5b, $ff, $ff, $ff, $c0, $00, $00, $00
line2   dta $aa, $aa, $5a, $aa, $aa, $aa, $80, $00, $00, $00
line3   dta $55, $55, $55, $55, $55, $55, $40, $00, $00, $00

使い方:

このプログラムは、ANTICモード8(行あたり40ピクセル、2 bpp)に基づくカスタム表示リストを使用します。繰り返される行は、同じメモリ位置からロードされます。ディスプレイの設定後、プログラムは無限ループに入ります。

スクリーンショット:

Atari800で実行されているiceland.xex


9

FFmpeg、339 184バイト

ffplay -f lavfi color=d72828:100x36[r];color=white:64x32[w];color=0048e0:56x28[b];[w][b]overlay=4,split[x][y];[r][x]overlay=-32[d];[d][y]overlay=40,split[t][m];[m]vflip[n];[t][n]vstack

これをさらにゴルフダウンしようとします。

アイスランドの旗の100x72画像


9

パイソン、119の 118 114 112バイト

特別なことは何もありません、簡単です:

b,w,r="\0H\xe0"*28,"\xff"*12,"\xd7(("*8
A,B=28*(b+w+r+w+2*b),4*(8*w+r+15*w)
print"P6 100 72 255 "+A+B+100*r+B+A

バイナリPPM、使用法として出力

python golf_iceland.py > iceland.ppm
  • Edit1:printと引用符の間のバイトを押し込んだ
  • Edit2:バイナリPPMとしてわずかに短い
  • Edit3:の\0代わりに使用できる数字\x00

印刷不可能なASCII文字を直接使用する方法を誰かが知っている場合は、お知らせください。

PNGに変換


2
おめでとうございます!あなたは私をたくさん打ちました:D
ガボールフェケト

2
@GáborFeketeはバイトであなたを打ち負かしました、はい。しかし、あなたの答えはそのオフセットではるかに賢明です
カールナップ

なぜエスケープ自体ではなく、エスケープの結果が得られないのですか?
ソロモンウッコ16

@SolomonUcko b,w,r="\0Hà"*28,"ÿ"*12,"×(("*8Python 3 を試してみましたが、動作しません。
カールナップ16

@KarlNapf、どのように失敗しましたか?正しく描画されなかったか、エラーメッセージが表示されましたか?エンコードの問題である可能性もあります。
ソロモンウッコ

8

JavaScript、267バイト

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


1
左右の青の幅の7-14の比率は正しいですか?
マナトワーク

1
@manatworkおっと、何らかの理由で100/25 = 5と思ったので、すべてが25%広すぎました。
ニール

8

Java、335バイト

機能は

void w()throws Exception{int w=100,h=72;BufferedImage i=new BufferedImage(w,h,1);Graphics g=i.getGraphics();g.setColor(new Color(18656));g.fillRect(0,0,w,h);g.setColor(WHITE);g.fillRect(0,28,w,16);g.fillRect(28,0,16,h);g.setColor(new Color(14100520));g.fillRect(0,32,w,8);g.fillRect(32,0,8,h);ImageIO.write(i,"png",new File("f.png"));}

そしてf.png、100x72のサイズで、目的のイメージを書き込みます

(これは、R。KapによるAnswerの直接の競合ではないことに注意してくださいファイルを書き込み、画面に画像を表示しないためです)

以下は、コンパイルして実行することができる非ゴルフバージョンです。

import static java.awt.Color.WHITE;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

public class Iceland
{
    public static void main(String[] args) throws Exception
    {
        Iceland i = new Iceland();
        i.w();
    }

    void w() throws Exception
    {
        int B=0x0048e0,R=0xd72828,w=100,h=72;
        BufferedImage i=new BufferedImage(w,h,1);
        Graphics g=i.getGraphics();
        g.setColor(new Color(B));
        g.fillRect(0,0,w,h);
        g.setColor(WHITE);
        g.fillRect(0,28,w,16);
        g.fillRect(28,0,16,h);
        g.setColor(new Color(R));
        g.fillRect(0,32,w,8);
        g.fillRect(32,0,8,h);
        ImageIO.write(i,"png",new File("f.png"));
    }
}

関連する質問に関するサイドノート:おそらく、

  • インドネシア
  • ポーランド
  • フィンランド
  • フランス
  • オランダ
  • タイ
  • ノルウェー

同時に:

ここに画像の説明を入力してください


7

SVG + Javascriptを、190の 165 164バイト

そこには専門家はいません。色と線幅を変更するために1つのパスを繰り返すと、馬鹿げた javascript ftwに見えます

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

より読みやすい:

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

path d="m0,0h100v72H0"長方形の代わりに使用して、2バイトを節約できます。同様に、M0 36H100M36 0V72他のパスのデータに使用すると、さらに5バイト節約されます。そして、あなたがドロップすることができstyle、両方を宣言するのに有利な属性をstroke-widthし、stroke他の5つのバイトを保存するための属性として。
ジョーイ

7

処理中、136バイト

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

非ゴルフ

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

出力:

ここに画像の説明を入力してください


1
fillandのrect代わりにsizeand を使用すると、さらに2バイトを削ることができますbackground。134バイト:noStroke();fill(#0048e0);rect(0,0,100,72);fill(255);rect(0,28,100,16);rect(28,0,16,72);fill(#d72828);rect(0,32,100,8);rect(32,0,8,72);
GuitarPicker

GuitarPickerが言ったことに上の追加、fill(-1)より1バイト短いですfill(255)
牛いんちき

7

Mathematica 174 157バイト

組み込みなし:

157バイト

r=Rectangle;c=RGBColor;Graphics@{c[{0,72,224}/255],r[{0,0},{25,18}],White,r[{7,0},{11,18}],r[{0,7},{25,11}],c[{43,8,8}/51],r[{8,0},{10,18}],r[{0,8},{25,10}]}

ここに画像の説明を入力してください

または代わりに

232バイト

x=Join[Unitize/@Range@7,{0},{2,2},{0},Unitize/@Range@14]&/@Range@7;y=Join[ConstantArray[0,8],{2,2},ConstantArray[0,15]];z=ConstantArray[2,25];ArrayPlot[Join[x,{y},{z,z},{y},x]/.{2->RGBColor[{43,8,8}/51],1->RGBColor[{0,72,224}/255]}]

ここに画像の説明を入力してください


1
どういたしまして。2番目の長いバージョンにも同じことが適用できます。u=Unitize;c=ConstantArrayなど^ _ ^
ダン・オーク

1
待ってください、Mathematicaには組み込み機能がないものがありますか?びっくりしました。
モーガンスラップ16

@MorganThrappビルトインを使用した別のMathematica回答があったはずです。
-gcampbell

3
あるCountryData["Iceland", "Flag"]
dwa

7

JavaScript(ES6)、231 240

以下のスニペット内のコード。実行してテストします。

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


7

ZX Spectrum Z80アセンブリ、51バイト

https://github.com/ralphbecket/Z80/blob/master/IcelandFlag/IcelandFlag.asm

                zeusemulate "48K", "ULA+"
ZeusEmulate_PC  equ Main
ZeusEmulate_SP  equ $FF40

                org $8000

MinWhite        equ 7
MinRed          equ MinWhite + 1
TopRed          equ MinRed + 2
TopWhite        equ TopRed + 1
Height          equ TopWhite + MinWhite - 2
Width           equ TopWhite + 2 * MinWhite - 1

White           equ %01111000
Red             equ %01010000
Blue            equ %01001000

Main            ld hl, $5800 + ((Height - 1) * 32) + (Width - 1)
                ld c, Height

YLoop           ld b, Width

XLoop           ld (hl), Red
                ld de, MinRed * $100 + TopRed
                call Test
                jr c, Next

                ld (hl), White
                ld de, MinWhite * $100 + TopWhite
                call Test
                jr c, Next

                ld (hl), Blue

Next            dec hl
                djnz XLoop
                ld de, -(32 - Width)
                add hl, de
                dec c
                jr nz, YLoop
                ret

Test            equ *
TestX           ld a, b
                cp d
                jr c, TestY
                cp e
                ret c
TestY           ld a, c
                cp d
                ccf
                ret nc
                cp e
                ret

ここに画像の説明を入力してください


7

J、86 84 83バイト

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

アプローチは、Pythonを使用した@GáborFeketeのアプローチと同じです。

左引数colorsのためには、viewmat我々の場合におけるRGB値の配列、次のとおりです。

255 255 255
  0  72 224
215  40  40

そして、右の引数はのインデックスの行列ですcolors。各ディメンションで9個のアイテム
(_9 _9 |. matrix)をシフトするよう指示しmatrixます。
怖い構築はnumberで(border ([,~[,.~[,[,.]) matrix)ラップmatrixしますborder
そして(14 21 $ 1)、1の14×21マトリックスを作成します。

出力は別のサイズ変更可能なウィンドウに表示され、デフォルトではかなり大きくなります。 ここに画像の説明を入力してください

ありがとう

マイル-色を並べ替えて2バイトを節約,し、形状一致のために数字(255)を複製する機能を使用しました。


1
フラグの高さが26単位の代わりに25であるように見え
ガーボルFekete

@GáborFeketehm、あなたは身長が18ではなく19であることを意味しますか?ちょうどあなたのコメントの後に気づいた、ということは言及しなかった
ダンオーク

右ああ、私は...高さを書いたが、幅の値を使用
ガーボルFekete

ええ、確かに。値を間違えました。初期行列の形状は14 2118 25 - 4 4)でなければなりません。修正しています...ありがとうございます!
ダン・オーク

1
rgbの値を並べ替える2バイトを節約できます(255,0 72 224,:215 40 40)viewmat _9 _9|.2(b=.[,~[,.~[,[,.])0 b 14 21$1
マイル

6

TI-BASIC(非競合)、323バイト

コードはTI-84、83、およびバリアント用に記述されています。寸法がデバイスによって異なることや、コードに色が付いていないことが問題ではないことを確信しています。

セットアップ:

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

図:

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

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

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

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

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

ゴルフ:

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

はい、不足)は意図的なものです。

サイズ:

Line(そのようなすべてのコマンドは1バイトを使用し、各番号は1バイトを使用します。それは323バイトです。

それは絶対に退屈でした。うまくいけばエミュレータでこれを取得します(手動ですべてを入力する必要があります)が、文字通りフラグの形をした単なる行です。


1
@ Random832奇妙なことに、はい!ここでトークンサイズを確認してください:tibasicdev.wikidot.com/lineバイトが正確に何なのかわかりません。しかし、計算機では、本質的にcharとして扱われることを知っています。
チャーレッドグラス

1
@ Random832のバイトLine(は0x9Cです。1バイトトークンの表はこちらで確認できます:tibasicdev.wikidot.com/one-byte-tokens
f ''

1
グレースケールシェーディングを得るために、線ではなく領域(<およびを使用>)を使用してグラフ化できませんでしたか?
mbomb007

7
なぜこれが競合しないのですか?
メゴ

1
現在は色TI-84があるので、わずかな変更を加えるだけでそこで実行できることに注意してください。
モシェカッツ

6

C#、 384 346 317 292 291 289バイト

WindowsフォームとGDIを使用したシンプルなソリューション

Func<int,int,Point>p=(x,y)=>new Point(x*10,y*10);var b=new Bitmap(250,180);var g=Graphics.FromImage(b);g.Clear(Color.Blue);g.DrawLines(new Pen(Color.White,40),new[]{p(0,9),p(50,9),p(9,-20),p(9,18)});g.DrawLines(new Pen(Color.Red,20),new[]{p(0,9),p(50,9),p(9,-20),p(9,18)});b.Save("b.png");

使用法

新しいコンソールプロジェクトを開始し、上記のコードをメインメソッドに追加して、System.Drawing-Namespaceを追加します。

使い方

コードは新しい画像を作成し、その上に線を描画します。イメージをディスクに保存します。線の終点の一部は、表示領域の外側にあります。

ここに画像の説明を入力してください


PPCGへようこそ!素晴らしい最初のcodegolfですが、改善できるようです。まず、私は(あなたがここにあるいくつかのスペースを削除することができると思うb = new=> b=newusing ()=> using()、後にスペースを使用しない;のあなたがしたい場合は、あなたが私たちの読むことができます。C#でのゴルフのためのヒントをいくつかのアドバイスを見つけること。
Katenkyo

おかげで、スペースが削除され、usingステートメントも削除されます。現在、匿名変数も使用しています。
-soema

本当に必要Process.Start(f);ですか?私が理解しているように、それはに似ていcmd startます。画像を保存するか表示するかを選択でき、すでに保存しているので、そのステップは無意味に思えます。この場合、変数fの宣言も避けることができます。
マナトワーク

はい!今すぐ保存し、それ以上開くことはありません
...-soema

名前空間とusingメソッド宣言またはプログラムの定型文のバイト数をカウントする必要があります。これはすべて必要なものの一部です(タスクでは、関数またはプログラムを選択できますが、単なる一連のステートメントの選択はできません)。
ジョーイ

6

PythonのIDLE、191の 172 156バイト

IDLEはPythonの標準IDEです。カスタムテーマがない場合、STDOUT青色、STDERR赤色、および背景は白色です。したがって、次のコード:

from sys import*
x=[1]*7;y=[0]*7;z=[0,2,2,0]
f=[x+z+x*2]*4+[y+z+y*2,[2]*25]
for s in f+f[::-1]:[[stderr,stdout][-x].write(' █'[x>0]*2)for x in s];print()

次の出力を生成します。

ここに画像の説明を入力してください

印刷された文字が正方形ではないため、これはわずかにずれていますが、1ユニットを横2文字、縦1文字とすると、比率は正確です。

これは、幅寸法を半分にして、などのブロックにASCII文字を使用することでゴルフできますが、'#'まったく同じ効果はありません。


説明

コード自体は現時点ではかなりずさんで、間違いなくゴルフをすることができますが、基本的な考え方は次のとおりです。

  • 0空白を1表し、青いブロックを2表し、赤いブロックを表す行列を作成します。
    • 前半は(主にリストのスライス/乗算によって)構築され、完全なフラグを生成するためにそれ自体の逆に追加されます。
  • マトリックスをループし、各値を空白またはブロックとしてSTDERR/ STDOUTに出力します。各行の後に改行を印刷します。

6

Python Turtle、176バイト

別のPython Turtle実装ですが、今回は描画ではなくスタンプに基づいています。

from turtle import*
shape("square")
c=color
c("navy")
z=shapesize
z(18,25)
s=stamp
s()
c("white")
z(4,25)
s()
bk(70)
seth(90)
s()
c("#d72828")
z(2,18)
s()
home()
z(2,25)
done()

簡単にスケーラブルにしないスタンピングを使用すると、約60バイトのコードを節約できます。

ここに画像の説明を入力してください

楽しい部分は、呼び出しで"square"ポリゴンオプションをポリゴンオプションに置き換えて、ecogroovyロゴを取得できることです。"turtle"shape()

ここに画像の説明を入力してください


5

Perl、134バイト

注:\x1b実際にはASCIIエスケープ文字であり、1バイトとしてカウントされます

($b,$w,$r)=map"\x1b[48;5;${_}m",18,15,1;print@l=("$b "x7,"$w $r  $w $b",$"x14,$/)x7,@m=("$w "x8,"$r  ","$w "x15,$/),("$r "x25,$/)x2,@m,@l

使用法

名前を付けて保存しiceland-flag.plて実行:

perl iceland-flag.pl

スカッシュフラッグ

ANSIエスケープシーケンスを使用し、Linuxターミナルがフラグを表示すると想定します。提供された測定値を使用して少し奇妙に見えます。

Perl、141バイト

このバージョンは、実際の寸法に少し似ています...

($b,$w,$r)=map"\x1b[48;5;${_}m",18,15,1;print@l=("$b "x14,"$w  $r    $w  $b",$"x28,$/)x7,@m=("$w "x16,"$r "x4,"$w "x30,$/),("$r "x50,$/)x2,@m,@l

スクイーズの少ないフラグ


1
奇妙さは、キャラクターが幅よりも背が高いという事実に由来します。
エリックアウトゴルファー16

@EʀɪᴋᴛʜᴇGᴏʟғᴇʀ確かに、正方形の固定幅フォントがあるのではないかと思いましたが、特に見栄えが良いとは思いません!私はその2番目のバージョンをより近くに見えるように更新するかもしれません(現在よりも多くのバイトを取るべきではありませんが、時間は...)
Dom Hastings

TTYでは、そのようなことを考えることはできません。フォントはTHE FONTです!気に入らないからといって変更することはできません。
エリックアウトゴルファー16

5

SpecaBAS-150バイト

1 a=15,b=250,c=180: FOR i=1 TO 5: READ k,x,y,w,h: RECTANGLE INK k;x,y,w,h FILL: NEXT i
2 DATA 1,0,0,b,c,a,71,0,40,c,a,0,71,b,40,2,81,0,20,c,2,0,81,b,20

インクの色、x、y、幅、および高さを読み取り、それらの座標/寸法で長方形を描画します。

ここに画像の説明を入力してください


それぞれの後にスペースが必要です:か?ああ、それは151バイトです。
エリックアウトゴルファー16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.