虹を描く


25

チャレンジは簡単です。可能な限り少ないバイトで虹を描く

虹の仕様は次のとおりです。

  • 図は、幅400ピクセル、高さ200ピクセルでなければなりません(単一の中央ピクセルが必要な場合は、オプションで401x201)
  • 赤いリングは、図形のすべての境界線に接する必要があります(外半径= 200ピクセル)
  • すべてのリングは同じ幅(10ピクセル)でなければなりません
    • 紫色のリングの内半径は130ピクセルです。
  • 弓は真円の上半分でなければなりません
  • 背景は白でなければなりません(透明も受け入れられます)
  • 図には境界線がありません(境界線を抑制できない場合は例外となります)
  • 組み込みのレインボー作成機能は許可されていません!

次の色は、虹で使用されます。

虹

これはコードゴルフなので、バイト単位の最短コードが勝ちです!

例:

虹

関連するが、異なる!


26
組み込みの虹作る機能が許可されていない私は、Mathematicaは1を持っていると確信しているとして
ルイスMendo

虹はどれほど不完全かもしれませんか?アンチエイリアスされていない状態から引き裂かれた状態まで?この回答
16年

@aross:虹のサンプルのように見えるはずです(一部のピクセルは、不正確な計算のために異なる場合があります)。最後の2つの虹は「乱雑」ですが、最初の虹は大丈夫に見えます。私には完璧なルールがありませんので、最善の判断をしてください:
Stewie Griffin

@StewieGriffin Reason私が尋ねている理由は、明らかにPHPグラフィックスはかなりバグがあるが、解決策は理論的に正しいからです。さて、二つ目は、3つ目は(もうまく動作しない)アンチエイリアシングとなります
aross

ベクターグラフィックは許可されていませんか?編集:気にしません—すでにTikZの回答があることがわかります。
ジュリアンウルフ

回答:


15

MATL107 95 92 87 84 83バイト

-200:200 0:200!PYyq10/k12-t8<*t0>*Q7B.561FTh.295Oh.51h4BPFTF6Bl.5hOh4B8$v255*k5M/YG

これは、言語/コンパイラの現在のリリース(14.0.0)で機能します。

編集(2017年7月6日)MATL Online試用できます

色が正しいことを確認するには、最後の5文字を​​削除します(数秒待ってから、出力の最後までスクロールダウンする必要があります)。

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

説明

コードには3つの主要なステップがあります。

ステップ1:から1までの数字で201x401行列を生成し8ます。値1を持つピクセルは背景(白)、値を持つピクセル2、... 8は虹の各バンドを表します。

横座標は、範囲-200200左から右へ、および垂直座標の範囲0200上下に。したがって、原点(0,0)は下中央、左上隅は(-200,200)などです。

虹の異なるバンドは、各ピクセルから原点までの距離を計算し、10ピクセルのステップで量子化することにより生成されます。

ステップ2:カラーマップを定義する8x3マトリックスを生成します。各行は、必要な色の1つです(白と虹の7色)。前の201x401マトリックスの各値は、このカラーマップの行へのインデックスとして解釈されます。

カラーコンポーネントごとに0〜1の値を使用してカラーマップマトリックスを生成し、255で乗算して切り捨てます。このように、ほとんどの値は最初は0と1であり、後で0と255になります。中間値は、2〜3桁の0〜1の値としてコード化されます。

ステップ3:そのカラーマップで画像を表示します。

               % STEP 1: CREATE MATRIX DEFINING THE RAINBOW BANDS
-200:200       % row vector [-200, -199, ..., 200]
0:200          % row vector [0, 1, ..., 200]
!P             % transpose and flip: convert into column vector [200; 199; ...; 0]
Yy             % hypotenuse function with broadcast: distance from each point to (0,0)
q10/k          % subtract 1, divide by 10, floor (round down). Gives 20 circular bands
               % 10 pixels wide, with values from 0 to 19
12-            % subtract 12
t8<*           % values larger than 7 are set to 0
t0>*           % values less than 0 are set to 0. We now have 7 bands with values
               % 1, ..., 7, and the white background with value 0
Q              % add 1: white becomes 1, bands become 2, ..., 8

               % STEP 2: CREATE MATRIX DEFINING THE COLORMAP
7B             % first row: [1 1 1] (7 converted to binary: color white)
.561FTh        % second row (light purple)
.295Oh.51h     % third row (dark purple)
4BP            % fourth row: [0 0 1] (4 converted to binary and flipped: blue)
FTF            % fifth row (green)
6B             % sixth row: [1 1 0] (6 converted to binary: yellow)
l.5hOh         % seventh row: orange
4B             % eigth row: [1 0 0] (4 converted to binary: red)
8$v            % vertically concatenate the 8 eight rows
255*k          % multiply by 255 and round down. Gives exact color values 
5M/            % push 255 again and divide. This is needed because colors in MATL are
               % defined between 0 and 1, not between 0 and 255

               % STEP 3: DISPLAY
YG             % display image with that colormap

28

Piet、838コーデル、数千ピクセル

誰かがそれをしなければなりませんでした:

素晴らしい虹

この画像を保存すると、オンラインで試すことができます

実際のPietプログラムは、私が書いたPythonプログラムを使用して作成したトップ125ピクセルのみです。

後でこれを編集すると、本当に私のビジョンを傷つけます。

これは、SVG形式で画像を出力します。これは、SVGが実際に(私の意見では)最も簡単な方法だからです。DoorknobのSVGコードを恥知らずに盗みました。出力:

正しい出力

まあ、これは本当に:

<svg viewBox='0 0 400 200'><circle cx='200' cy='200' r='200' fill='red'/><circle cx='200' cy='200' r='190' fill='#ff7f00'/><circle cx='200' cy='200' r='180' fill='yellow'/><circle cx='200' cy='200' r='170' fill='lime'/><circle cx='200' cy='200' r='160' fill='blue'/><circle cx='200' cy='200' r='150' fill='indigo'/><circle cx='200' cy='200' r='140' fill='#8f00ff'/><circle cx='200' cy='200' r='130' fill='white'/></svg>

Esolang以外のユーザー、この答えを破って頑張ってください!


2
このPythonスクリプトは公開されていますか?私は非常に怠laな友人を求めています
。...-NaCl

ERM、それはあなたがここに古いバージョンを見つけ、必要に応じて調整することができxDさんを実装するために文字通り〜2分かかります:mediafire.com/download/0isocsb81n7r2cv/piet.py(注:私は10だったとき、私はこれを作った、コードが恥ずかしいです控えめに言っても)-PyPNGをインストールする必要があります。
-theonlygusti

15

Pyth、150 149 128バイト

"<svg viewBox=0,0,400,200>"V8s["<circle cx=200 cy=200 r="-200*TN" fill="@c"red #ff7f00 #ff0 #0f0 #00f indigo #8f00ff #fff"dN" />

SVGでの出力:

<svg viewBox=0,0,400,200>
<circle cx=200 cy=200 r=200 fill=red />
<circle cx=200 cy=200 r=190 fill=#ff7f00 />
<circle cx=200 cy=200 r=180 fill=#ff0 />
<circle cx=200 cy=200 r=170 fill=#0f0 />
<circle cx=200 cy=200 r=160 fill=#00f />
<circle cx=200 cy=200 r=150 fill=indigo />
<circle cx=200 cy=200 r=140 fill=#8f00ff />
<circle cx=200 cy=200 r=130 fill=#fff />

虹

16バイトの@MamaFunRollと、さらに6 バイトの@PatrickRobertsに感謝します!


2
文字列をパックすることで、おそらく多くのバイトを節約できます。
spaghetto

@AquaTart行うことは、バイトを追加することだけです。O_o
ドアノブ

3
引用符、終了スラッシュ、または最後の終了</svg>タグは必要ないと思います。
ママファンロール

4
二つの提案:red #ff7f00 #ff0 #0f0 #00f #8f00ff #fffそれら(のスペースを持っていないすべてのパラメータ値オフ単一引用符取るカラーリストのためとcxcyrおよびfill塗りつぶしの値との間のスペースのままにする)が、確認してくださいを/色が誤解されないように。また、</svg>上記のように削除します。
パトリックロバーツ

1
申し訳ありませんが、私はred #ff7f00 #ff0 #0f0 #00f indigo #8f00ff #fff。また、スペースをコンマで置き換える場合viewBox、そのパラメーターの単一引用符も削除できます。
パトリックロバーツ

14

Minecraft 1.10(ほぼ)、2677文字の1コマンド、868 ブライト

まあ、私は確かに冗長な言語を選んだ。

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:"summon ArmorStand ~ ~ ~ {Tags:[\"b\"]}"},{id:MinecartCommandBlock,Command:"summon Pig ~ ~ ~ {NoAI:1b}"},{id:MinecartCommandBlock,Command:setblock ~-1 ~-2 ~6 chain_command_block 3 replace {auto:1,Command:"execute @e[tag=b] ~ ~ ~ execute @e[rm=200] ~ ~ ~ tp @e[c=1] ~ -99 ~"}},{id:MinecartCommandBlock,Command:setblock ~-1 ~-2 ~5 chain_command_block 3 replace {auto:1,Command:"execute @e[tag=b] ~ ~ ~ execute @e[rm=190,r=200] ~ ~ ~ setblock ~ ~ ~ wool 14"}},{id:MinecartCommandBlock,Command:setblock ~-1 ~-2 ~4 chain_command_block 3 replace {auto:1,Command:"execute @e[tag=b] ~ ~ ~ execute @e[rm=180,r=190] ~ ~ ~ setblock ~ ~ ~ wool 1"}},{id:MinecartCommandBlock,Command:setblock ~ ~-2 ~4 chain_command_block 4 replace {auto:1,Command:"execute @e[tag=b] ~ ~ ~ execute @e[rm=170,r=180] ~ ~ ~ setblock ~ ~ ~ wool 4"}},{id:MinecartCommandBlock,Command:setblock ~ ~-2 ~5 chain_command_block 2 replace {auto:1,Command:"execute @e[tag=b] ~ ~ ~ execute @e[rm=160,r=170] ~ ~ ~ setblock ~ ~ ~ wool 13"}},{id:MinecartCommandBlock,Command:setblock ~ ~-2 ~6 chain_command_block 2 replace {auto:1,Command:"execute @e[tag=b] ~ ~ ~ execute @e[rm=150,r=160] ~ ~ ~ setblock ~ ~ ~ wool 11"}},{id:MinecartCommandBlock,Command:setblock ~ ~-2 ~7 chain_command_block 2 replace {auto:1,Command:"execute @e[tag=b] ~ ~ ~ execute @e[rm=140,r=150] ~ ~ ~ setblock ~ ~ ~ wool 10"}},{id:MinecartCommandBlock,Command:setblock ~ ~-2 ~8 chain_command_block 2 replace {auto:1,Command:"execute @e[tag=b] ~ ~ ~ execute @e[rm=130,r=140] ~ ~ ~ setblock ~ ~ ~ wool 2"}},{id:MinecartCommandBlock,Command:setblock ~1 ~-2 ~8 chain_command_block 4 replace {auto:1,Command:"tp @e[type=Cow] ~1 ~ ~"}},{id:MinecartCommandBlock,Command:setblock ~1 ~-2 ~7 chain_command_block 3 replace {auto:1,Command:"tp @e[type=Bat] ~-1 ~ ~"}},{id:MinecartCommandBlock,Command:setblock ~1 ~-2 ~6 chain_command_block 3 replace {auto:1,Command:"execute @e[type=Pig] ~ ~ ~ summon Bat ~ ~ ~ {NoAI:1b}"}},{id:MinecartCommandBlock,Command:setblock ~1 ~-2 ~5 chain_command_block 3 replace {auto:1,Command:"execute @e[type=Pig] ~ ~ ~ summon Cow ~ ~ ~ {NoAI:1b}"}},{id:MinecartCommandBlock,Command:setblock ~1 ~-2 ~4 repeating_command_block 3 replace {auto:1,Command:"tp @e[type=Pig] ~ ~1 ~"}},{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,r=1]}]}]}]}

新しいスーパーフラットワールドを作成し、それをImpulseコマンドブロックに貼り付け、レンダー距離をかなり高く設定して実行します。コンピューターの動きが止まったら、アーマースタンドを壊します。

結果は、要求に応じて、全体で400ブロック、高さ200ブロックです。

MrGarrettoの1つのコマンドジェネレーターを使用してすべてをまとめてから、その結果を少し変更して、さらに数バイト節約しました。入力は次のとおりです。

INIT:summon ArmorStand ~ ~ ~ {Tags:["b"]}
INIT:summon Pig ~ ~ ~ {NoAI:1b}
tp @e[type=Pig] ~ ~1 ~
execute @e[type=Pig] ~ ~ ~ summon Cow ~ ~ ~ {NoAI:1b}
execute @e[type=Pig] ~ ~ ~ summon Bat ~ ~ ~ {NoAI:1b}
tp @e[type=Bat] ~-1 ~ ~
tp @e[type=Cow] ~1 ~ ~
execute @e[tag=b] ~ ~ ~ execute @e[rm=130,r=140] ~ ~ ~ setblock ~ ~ ~ wool 2
execute @e[tag=b] ~ ~ ~ execute @e[rm=140,r=150] ~ ~ ~ setblock ~ ~ ~ wool 10
execute @e[tag=b] ~ ~ ~ execute @e[rm=150,r=160] ~ ~ ~ setblock ~ ~ ~ wool 11
execute @e[tag=b] ~ ~ ~ execute @e[rm=160,r=170] ~ ~ ~ setblock ~ ~ ~ wool 13
execute @e[tag=b] ~ ~ ~ execute @e[rm=170,r=180] ~ ~ ~ setblock ~ ~ ~ wool 4
execute @e[tag=b] ~ ~ ~ execute @e[rm=180,r=190] ~ ~ ~ setblock ~ ~ ~ wool 1
execute @e[tag=b] ~ ~ ~ execute @e[rm=190,r=200] ~ ~ ~ setblock ~ ~ ~ wool 14
execute @e[tag=b] ~ ~ ~ execute @e[rm=200] ~ ~ ~ tp @e[c=1] ~ -99 ~

これは合計1.9+コマンドブロック15個、および838バイトなので、15 * 2 + 838 = 868 ブライトです。

これが(ほぼ)パーツです。コーナーとエッジがありません。論理的にはすべきではない-Minecraftのバグ?そうでない場合は、正確に400x200ブロックになります。あまりできません。

レインブーム


4
イェイ、ブタベースのレインボージェネレーター!+1
TuxCrafting

2677文字の場合、どうして868個の「ブライト」だけになりますか?私がそのページをどのように理解しているかから、実際のブライトは2677 + 4でなければなりません
-theonlygusti

あなたはそれを構築する場合は、(オーバーヘッドをたくさん持っている)、それを作成するためにfallingsand使用する場合には2677年、世界では868です
四級

12

Mathematicaの152 144 126バイト

Graphics@MapIndexed[{#,Disk[{0,0},4-#/5&@@#2,{Pi,0}]}&,RGBColor/@TextWords@"#f00 #ff7f00 #ff0 #0f0 #00f #4b0082 #8f00ff #fff"]

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

@CatsAreFluffyに8バイトを削ってくれてありがとう、さらに@njpipeorganにさらに18をくれてありがとう:)


3
使用##[[1]]#2#[[2]]、および@@@/@
CalculatorFeline

1
また、のThread代わりに動作しTransposeます。
LegionMammal978

1
Graphics@MapIndexed[{#,Disk[{0,0},4-#/5&@@#2,{Pi,0}]}&,RGBColor/@TextWords@"#f00 #ff7f00 #ff0 #0f0 #00f #4b0082 #8f00ff #fff"]さらに18バイトを節約しますが、考え方は同じです。
-njpipeorgan

1
興味があるだけ... である「虹の組み込みは、」そこに?
mbomb007

@ mbomb007私が知っていることではない!
マーティン

8

VIM、165 142 139

i<svg viewBox=0,0,400,200><cr><circle cx=2<C-n> cy=2<C-n> r=2<C-n> fill=red<cr>#ff7f00<cr>#ff0<cr>#0f0<cr>#00f<cr>indigo<cr>#8f00ff<cr>#fff<esc>2Gqq0y4f=jPBB10<C-x>@qq@qV2G:norm A /><cr>

ええ、これは不格好です。改善が必要です。

Pyth answerのように SVGとして出力します。

@MyHamDJに感謝します!


最後のexコマンドをkv3G:norm A'/><cr>
DJMcMayhemに

また<circle cx...、最初に2行目に文字列を入力する場合は、すべての色を入力して後で入力するのではなく、さらに3つを削除することもできます。
DJMcMayhem

8

HTML + SVG + ES6、169

<svg width=400 viewBox=0,0,40,20 onload="this.innerHTML=`f00
ff7f00
ff0
0f0
00f
4b0082
8f00ff
fff`.replace(/.+/g,c=>`<circle cx=20 cy=20 r=${--r} fill=#${c} />`,r=21)"/>


の代わりにheight=200and cx=200 cy=200 r=${--r}0を使用しますviewBox='0 0 40 20'。これで7バイト節約できます。
パトリックロバーツ

私はそれが私があなたのアイデアを借りたことも大丈夫です願っています.replace...方法
パトリック・ロバーツ

@PatrickRobertsもちろん大丈夫です。私はあなたのものを借りました
-edc65

5
私は確かr-=1にコードゴルフで見ることを期待していなかっ
ニール

@Neil bah!最終リリース前のイテレーションで-= 10だった
-edc65

7

靴付きルビー、155バイト

Shoes.app(width:400,height:200){background'fff'
8.times{|i|stroke fill %w{f00 ff7f00 ff0 0f0 00f 4b0082 8f00ff fff}[i]
oval left:i*=10,top:i,radius:200-i}}

サンプル出力:

靴とルビーの虹


6

JavaScript(ES6)、171 158バイト

document.write`<svg width=400 height=200>${`f00
ff7f00
ff0
0f0
00f
4b0082
8f00ff
fff`.replace(/.+/g,c=>`<circle cx=200 cy=200 r=${i--}0 fill=#${c} />`,i=20)}`

変換するアイデアは@ edc65に帰属

`[...].map((c,i)=>...)`

`...`.replace(/.+/g,c=>...,i=20)

長く見えるかもしれませんが、配列を文字列に圧縮する際に節約されるバイト量は、変換する価値があります。(この場合、13バイトを節約します)

デモ

document.write`<svg width=400 height=200>${`f00
ff7f00
ff0
0f0
00f
4b0082
8f00ff
fff`.replace(/.+/g,c=>`<circle cx=200 cy=200 r=${i--}0 fill=#${c} />`,i=20)}`


6

HTML(162)+ CSS(146)

body{height:200px;width:400px}div{height:100%;box-sizing:border-box;border-radius:50% 50% 0 0/100% 100% 0 0;border:solid;border-width:10px 10px 0}
<div style=color:red><div style=color:#FF7F00><div style=color:#FF0><div style=color:#0F0><div style=color:#00F><div style=color:#4B0082><div style=color:#8F00FF>


HTML(224)+ CSS(128)

body{height:200px;width:400px}div{height:100%;box-sizing:border-box;border-radius:50% 50% 0 0/100% 100% 0 0;padding:10px 10px 0}
<div style=background:red><div style=background:#FF7F00><div style=background:#FF0><div style=background:#0F0><div style=background:#00F><div style=background:#4B0082><div style=background:#8F00FF><div style=background:#FFF>


5

SpecBAS - 318の 254バイト

虹を描く場合、ZX Spectrum BASICの後継機を使用するのに適した場所のようです。

1 p,k=20,x1=0,x2=400,y=200
2 FOR EACH s IN [16711680,16744192,16776960,65280,255,4915330,9371903]: PALETTE p,s: INC p: NEXT s
3 CLS 15: DRAW 0,200 TO 70,200: DRAW 330,200 TO 400,200
4 FOR i=1 TO 7
5 INK k: DRAW x1,y TO x2,y,-PI: DRAW x1+10,y TO x2-10,y,-PI: FILL x1+5,190
6 x1+=10,x2-=10,k+=1
7 NEXT i

2行目では、標準のSpectrumの色が一致しなかったため、必要な特定のRGB値のパレットを設定します(おそらくバイトカウントの助けにはなりません)。

DRAWコマンドは、それが数によって変わります追加のパラメータ取ることができます x1、y1とx2、y2間のラジアン。最後に、描かれたばかりの半円の隙間を見つけ、現在の色で塗りつぶします。

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


5

Tcl / Tk、263バイト

canvas .c -bg #FFF -bo 0 -highlightt 0;pack .c -e 1 -f both;wm ge . 400x200;foreach {r c} {200 #FF0000 190 #FF7F00 180 #FFFF00 170 #00FF00 160 #0000FF 150 #4B0082 140 #8F00FF 130 #FFF} {.c cr o -$r -$r $r $r -outline $c -f $c};after 100 {.c x s -5 u;.c y s -10 u}

残念ながら、この種の質問は常にいくつかの難解な言語を好む...とはいえ、Tcl / Tkはグラフィック操作を本当に簡単、短く、読みやすいものにします。

とはいえ、読みやすさを犠牲にして、できるだけ少ない文字数にオプションを縮小しました。色のリストをクランチすることは、それを展開するコードに比べてはるかに役立つとは思いません...

比較のために、ここに非圧縮コード(380バイト)があります。

canvas .c -bg #FFF -borderwidth 0 -highlightthickness 0
pack .c -expand yes -fill both
wm geometry . 400x200
foreach {r c} {
  200 #FF0000 
  190 #FF7F00 
  180 #FFFF00 
  170 #00FF00 
  160 #0000FF 
  150 #4B0082 
  140 #8F00FF 
  130 #FFFFFF
} {
  .c create arc -$r -$r $r $r -extent 180 -outline $c -fill $c
}
after 100 {
  .c xview scroll -5 units
  .c yview scroll -10 units
}

afterコマンドは、ウィンドウが画面にマップされる前に、(キャンバスの座標原点)がスクロールを行うことができないので、残念ながら必要でした。

また、クランチコードは実際には完全な虹を描き(円弧の代わりに円を使用)、ウィンドウクリッピングに依存しています...

とにかく、私はすべての楽しみを願っています。:O)


短縮するlmap代わりに使用できますforeach
sergiol

そして、次のように1行目を2行目に入れることができますpack [canvas .c -bg #FFF -bo 0 -highlightt 0] -e 1 -f both
。– sergiol

コードの2つのバージョンの間には一貫性がありません。ゴルフはするcreate oval; ungolfedはそうしcreate arcます。説明してもらえますか?
sergiol

コメントありがとう。改変されていないバージョンは読みやすさのためであり、実装の正確さのためではありません。そして、悲しいかな、私は戻ってすべてのforeach-> lmapを修正するつもりはありません。それは...読者のために残すことができ:O)
Dúthomhas

5

LaTeX、290バイト

\documentclass{proc}\input tikz\begin{document}\def\z#1!#2!#3!#4!{\definecolor{t}{rgb}{#1,#2,#3}\fill[color=t](200pt,0)circle(#4pt);}\tikz{\clip(0,0)rectangle(400pt,200pt);\z1!0!0!200!\z1!.5!0!190!\z1!1!0!180!\z0!1!0!170!\z0!0!1!160!\z.29!0!.51!150!\z.56!0!1!140!\z1!1!1!130!}\end{document}

ここで試してみてください

説明

\documentclass{proc}
\input tikz
\begin{document}

    %Define macro "\z" with 4 arguments.         
    % The first 3 arguments are rgb values for the color
    % Last argument is the radius in pt that we draw a full circle with

    \def\z#1!#2!#3!#4!
        {\definecolor{t}{rgb}{#1,#2,#3}
         \fill[color=t](200pt,0)circle(#4pt);}

    % Start a Tikz figure

    \tikz{

        % We only draw the top half of the circle

        \clip(0,0)rectangle(400pt,200pt);

        % Draw each circle from biggest to smallest

        \z1!0!0!200!
        \z1!.5!0!190!
        \z1!1!0!180!
        \z0!1!0!170!
        \z0!0!1!160!
        \z.29!0!.51!150!
        \z.56!0!1!140!

        % Draw a white circle last

        \z1!1!1!130!
    }
\end{document}

@DonMuesliリンクをありがとう、追加しました。
16年

4

Java、354バイト

public void r() throws IOException{BufferedImage i=new BufferedImage(400,200,2);Graphics2D g=i.createGraphics();g.setStroke(new BasicStroke(10));int[]c={0xFF0000,0xFF7F00,0xFFFF00,0xFF00,255,0x4B0082,0x8F00FF};for(int v=0;v<7;v ++){g.setColor(new Color(c[v]));g.drawArc(v*10+5,v*10+5,390-v*20,390-v*20,0,360);}ImageIO.write(i,"PNG",new File("a.png"));}}

Graphics2Dクラスを使用して7つの円弧を描画し、色を格納する配列を使用します。さらに改善できると確信しています。

未ゴルフコード:

public void ungolfed() throws IOException {
        BufferedImage i = new BufferedImage(400, 200, 2); // 2 is TYPE_INT_ARGB
        Graphics2D g = i.createGraphics();
        g.setStroke(new BasicStroke(10));
        int[] c = {0xFF0000, 0xFF7F00, 0xFFFF00, 0x00FF00, 0x0000FF, 0x4B0082, 0x8F00FF};
        for(int v = 0; v < 7; v ++) {
            g.setColor(new Color(c[v]));
            g.drawArc(v * 10 + 5, v * 10 + 5, 390 - v * 20, 390 - v * 20, 0, 360);
        }
        ImageIO.write(i, "PNG", new File("a.png"));
    }

2
あなた0x0000ffだけの可能性があり0xff、あるいは単に255、同じで0x00ff00あること0xff00。別のバイトを保存0xff0000すること255<<16です。あなたのループは、さらに数バイトを節約することです。宣言にa ,qを追加すると、もう1バイト節約できますint。あなたはそれを作る必要があるだろうint c[]=の代わりに、int[] cそうqintはありませんint[]。そうすることでq=390-v*20;、ループにを追加できます。を390-v*20qに置き換えます。1バイトでは多くの作業が必要ですが、1バイトは1バイトですよね!
corsiKa

2
IOExceptionの代わりにExceptionをスローするだけで、さらに2バイトを節約できます。
corsiKa

またdrawOval、画像の上半分を使用してレンダリングできるかどうかも疑問に思います...しかし、少し高価になるかもしれません
...-corsiKa

私はそれが約1。5年だったと知っていますが、あなたはかなりゴルフをすることができます.. void r()throws Exception{BufferedImage i=new BufferedImage(400,200,2);Graphics2D g=i.createGraphics();g.setStroke(new BasicStroke(10));for(int c[]={255<<16,16744192,16776960,65280,255,4915330,9371903},v=0,t;v<7;g.drawArc(t=v*10+5,t,t=390-v++*20,t,0,360))g.setColor(new Color(c[v]));ImageIO.write(i,"PNG",new File("a.png"));}}325バイト
ケビンクルーッセン

4

Bubblegum139 119バイト

Hexdump:

00000000: b329 2e4b 5728 cb4c 2d77 caaf b035 d031  .).KW(.L-w...5.1
00000010: d031 3130 d031 3230 b0e3 b249 ce2c 4ace  .110.120...I.,J.
00000020: 4955 48ae b005 f215 922b c154 1198 4ccb  IUH......+.T..L.
00000030: ccc9 b12d 4a4d 51d0 c7ad ced0 12aa 4e39  ...-JMQ.......N9
00000040: 2dcd 3c0d 2884 4fad 0542 2d7e 85e6 3085  -.<.(.O..B-~..0.
00000050: 0604 149a c115 1aa4 e155 680a 5598 9997  .........Uh.U...
00000060: 9299 9e8f 57a9 09cc 4c0b a07f d2f0 1b6b  ....W...L......k
00000070: 8cf0 1148 2100 0a                        ...H!..

悲しいことに、これは私のPythの回答よりも短いです。:(

同じSVGファイルを生成します。


4

CSS、244 242 240バイト

body{width:400px;height:200px;background-image:radial-gradient(500px at bottom,#FFF 26%,#8F00FF 26%,#8F00FF 28%,#4B0082 28%,#4B0082 30%,#00F 30%,#00F 32%,#0F0 32%,#0F0 34%,#FF0 34%,#FF0 36%,#FF7F00 36%,#FF7F00 38%,red 38%,red 40%,#FFF 40%)}

編集:Chromeのバグを回避して2バイトを保存しました。@TrangOulのおかげでさらに2バイト節約できました。

注:スニペットは、<div>スタックスニペットの制限によりを使用します。


虹の外側の背景が赤であるように見えます(少なくとも私の携帯電話では)。
スチューイーグリフィン

@StewieGriffinはAndroid版Firefoxでうまく機能します。(自分の携帯電話のデフォルトのブラウザでスタックスニペットを有効にする方法を見つけることができませんでした。)
ニール

OK、少し奇妙です:-)私はgalaxy s6 edge btwでクローム49.0.2623.91を使用しています。
スチューウィーグリフィン

@StewieGriffinは、Chrome for Windowsでも壊れているようです。
ニール

@StewieGriffin OK回避策があると思います。2バイトも節約できます。
ニール

4

JavaScript 271 251

c=document.body.appendChild(document.createElement('canvas'))
x=c.getContext('2d')
c.width=400
r=c.height=200
for(i=0;i<8;x.beginPath(),x.arc(r,r,r-i*10,0,7),x.fillStyle="#"+"FF0000FF7F00FFFF0000FF000000FF4B00828F00FFFFFFFF".substr(i++*6,6),x.fill());


@StewieGriffinに感謝します。10の変更を行いました。カウントダウンを試みていますが、まだドアノブの答えからの道です!
ウルフハンマー

forの間のすべて{ ... }を、最後のforセクションの内側に移動でき,ます。例えばfor(i=0;i<8;x.beginPath(),x.arg(...etc...))。私が間違っていなければ、おそらくsubstrのslice/ spliceを使用することもできます。を使用して<canvas>を作成する方が短い場合もあります.innerHTML。または、HTML + JSでさえ答えて<canvas>とidを与えるcと、JSグローバル変数として自動的に追加されるはずです
-Downgoat

@Downgoatにsubstrは、2番目のパラメーターがオフセットではなく長さであるという利点があります。ゴルフに関してdocument.bodyは、かなりの節約になると思われます。
ニール

4

C、220の 217 213バイト

#define X printf("%c",s<169|s/401?y:s
i=8e4,t,y=255;main(s){for(puts("P6 400 200 255");i--;X/288?y:s<195?143:s<225?75:0),X<256|s/360?0:s/323?127:y),X<225&s/195?130:s<256?y:0))s=i/400,t=i%400-200,s=(s*s+t*t)/100;}

出力はPPM(バイナリの種類)です。

編集: @tucuxiのおかげで数バイトを保存しました。

編集2:コードを再配置してさらに節約します。


1
i;s;t;main()-> s;t;main(i)でバイトを削り、for:;)code1,code2;-> ;code2)code1;(カンマを保存してください!)内にforループ本体の一部を配置することで、もう1つ削ることができます。
tucuxi

4

Google Blockly、48ブロック、75バイト

以下のgifをクリックして、ソリューションに移動します。ソリューションの詳細を確認できます。
説明に関しては、画像は千の言葉の価値があると思うので、gifは千の画像の価値があります。

大きな読みやすいgifへのリンク

注:Blocklyでのカウント方法がわからないため、すべてのブロックを1バイトとしてカウントし、すべての変数を通常の方法でカウントしたため、0== 1バイト、530== 3バイト、Arial== 5バイト、bold== 4バイトです。
虹を切り取るために使用した特殊文字を2バイトとしてカウントしました。コメントでバイトカウントの間違いや提案を報告してください


4

追記(87バイト)

六角ダンプ:

00000000: 3188 0131 2030 2e35 3631 8800 3120 302e  1..1 0.561..1 0.
00000010: 3237 3888 0030 2e35 3188 0030 8801 3088  278..0.51..0..0.
00000020: 0130 8801 3188 0031 2030 2e35 8800 3188  .0..1..1 0.5..1.
00000030: 0030 87c8 0038 7b34 2031 9287 929d 87c8  .0...8{4 1......
00000040: 0030 2032 9258 3087 b400 9205 9216 9242  .0 2.X0........B
00000050: 880a 92a9 7d92 83                        ....}..

出力:

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


3

HTML + CSS、310 307バイト

<b style=background:red><b style=background:#ff7f00><b style=background:#ff0><b style=background:lime><b style=background:blue><b style=background:indigo><b style=background:#8f00ff><b style=background:#fff;width:260px;height:130px><style>b{float:left;padding:10px 10px 0 10px;border-radius:300px 300px 0 0}

スーパーデュパーの無効なマークアップ(ブラウザで正しく表示されない場合があります)。可能かどうかを見たかっただけです。


黄色の代わりに#FF0を使用して、2バイトをカットできます。スタイル属性の代わりにbgcolor属性も使用できる場合があります。
-curiousdannii

@curiousdanniiもちろん色については正しい(white短縮することもできます)-私がそれを見なかった理由がわかりません。bgcolor投稿する前に試してみましたが、残念ながらサポートされていません(とにかくChromeで)
-Flambino

3

PHP、285バイト

<?php $a=imagecreate(400,200);define("b",255);$c=array(b,b,b,b,0,0,b,127,0,b,b,0,0,b,0,0,0,b,75,0,130,143,0,b,b,b,b);for($i=0;$i<9;$i++){imagefilledellipse($a,200,200,420-$i*20,420-$i*20,imagecolorallocate($a,$c[$i*3],$c[$i*3+1],$c[$i*3+2]));}header("Content-type:png");imagepng($a);?>

出力:

虹を味わってください!


1
素晴らしい努力。ただし、ファイルの最後でPHPタグを閉じることは、ゴルフをしていなくても悪い習慣と見なされることに注意してください。それはCLIスクリプトとして短くなり、そのheader()呼び出しやPHPタグを開くことさえできます。Linuxでは、php -r '$a=imagecreate(400,200);const b=255;for($c=[b,b,b,b,0,0,b,127,0,b,b,0,0,b,0,0,0,b,75,0,130,143,0,b,b,b,b];$i<9;)imagefilledellipse($a,200,200,$r=420-$i*20,$r,imagecolorallocate($a,$c[$j=$i++*3],$c[$j+1],$c[$j+2]));imagepng($a);' | displayコマンドプロンプトから実行して、227文字としてカウントするのが最も簡単です。(PHP 5.6.11。を使用)
manatwork

3

バッシュ+ ImageMagickに、159の 125文字

eval convert -size 401x201 xc: '-fill \#'{f00,ff7f00,ff0,0f0,00f,4b0082,8f00ff,fff}' -draw "circle 200,200 200,$[i++*10]"' x:

サンプル出力:

レインボーby Bash + ImageMagick


3

処理、196の 186 181 179 169 163バイト

int d=400,i=0;size(d,d/2);background(-1);int[]c={-65536,-33024,-256,#00ff00,#0000ff,#4b0082,#8f00ff,-1};for(noStroke();i<8;ellipse(200,200,d,d),d-=20)fill(c[i++]);

虹

Kritixi Lithosのおかげで10バイト、dzaimaのおかげ
でさらに6バイト節約


2
変更することにより、1つの以上のバイトを剃り落とすことが可能for(int i=0;i<8;i++)for(int i=0;i++<8;)または類似
四級

私はあなたが呼び出し中に変数を使用することができるとは思わないsize()
KritixiのLithos

@KritixiLithosどういう意味ですか?
フランビーノ16

私はパラメータなどの変数とサイズを呼び出すと、それは私が画面上の寸法を設定するために変数を使用できないことを(実行する前に)私にエラーを与える
KritixiのLithos

background(-1)より短い1バイトでありbackground(255)、あなたが変更することができ255、アレイにc-1、別のバイト救うために
KritixiのLithos

2

R、184 170バイト

固定ピクセル寸法で画像を作成することは、Rのプロット関数が主に統計学者向けであるRでは驚くほどトリッキーです。特に、呼び出しにより明示的にマージンをゼロ幅に設定しない限り、Rはラベルと座標軸のための余分なスペースを残しますpar

一方、必要な色の一部(特に赤、黄、青)はデフォルトパレットにあり、整数インデックスで簡単に参照できます。

png(,400,200)
par(mar=0*1:4)
plot(as.raster(outer(199:0,-199.5:200,function(y,x)c(rep("white",13),"#8F00FF","#4B0082",4,"green",7,"#FF7F00",2)[1+(x^2+y^2)^.5%%200/10])))

2

フォースサロンハイク(184バイト)

この形式ではディメンションの制約を満たすことができませんが、とにかく共有する価値があると思いました。

: ^ 2 ** ;
: b 0.9 * dup x .5 - ^ y 2.01 / ^
+ sqrt dup rot > swap rot .045
+ < * * + ;
0 .56 .2 b .29 .25 b 1 .4 b
1 .45 b 1 .5 b 0 1 .35 b 1 .4 b
0.5 .45 b 0 1 .2 b .51 .25 b
1 .3 b

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


2

エクセルVBA、213 202 196 192 172のバイト

コード

匿名のVBEイミディエイトウィンドウ関数で、入力を受け取らず、レインボーをベクトル画像として、sheets(1)オブジェクトに出力します。

For i=0To 7:j=400-20*i:Set s=Sheet1.Shapes.AddShape(20,10*i,10*i,j,j):s.Fill.ForeColor.RGB=Array(255,32767,65535,65280,-31*4^8,8519755,&HE1008F,-1)(i):s.Line.Visible=0:Next

サブルーチンバージョン

Sub a
For i=0To 7
j=400-20*i
set s=Sheet1.Shapes.AddShape(20,10*i,10*i,j,j)
s.Fill.ForeColor.RGB=Array(255,32767,65535,65280,-31*4^8,8519755,&HE1008F,-1)(i)
s.Line.Visible=0
Next
End Sub

.Adjustments(3)=3/80呼び出しを削除し、8番目の白いアークを追加するための-11バイト

-1over を使用する場合は-6バイト&HFFFFFF

Sheet1over を使用する場合は-3バイトSheets(1)

withステートメントをsetステートメントに変換するための-6バイト

Subから匿名VBE関数への変換用に-14バイト

出力

写真またはそれは起こりませんでした


1

DIV Games Studio(184バイト)

最短ではありませんが、非常にシンプルです。DIVデフォルトパレットを使用

PROGRAM r;
local
c[]=22,26,235,41,54,82,249,15,15;
BEGIN
set_mode(400200);
for(x=-80;x<80;x+=10)
y=399-x;
draw(5,c[abs(x)/10],15,0,x,x,y,y);
x+=70*(x<0);END
LOOP;FRAME;END
END

Divゲームスタジオの虹

説明

プログラムの開始を定義します(スペースを節約するために「r」と命名)

PROGRAM r;

パレット検索のセットアップ

local
c[]=22,26,235,41,54,82,249,15,15;

BEGINプログラムコード

BEGIN

ビデオモードを400,200に設定します

set_mode(400200);

ループx(定義済み変数)-80(bgハック)から80(7色+白中心)

for(x=-80;x<80;x+=10)

楕円制約を定義する

y=399-x;

楕円を描く-最初の反復で、これは画面よりも大きな円を完全な白で描きます(インデックス-8)

draw(type(5 = filled elipse)、色、不透明度、x0、y0、x1、y1)

draw(5,c[abs(x)/10],15,0,x,x,y,y);

最初に完了したら、xをゼロまで上げて赤いバンドの描画を開始します

x+=70*(x<0);

ループの終了

END

無限ループ、描画画面。

LOOP;FRAME;END

終了(プログラムの先頭のBEGINと一致)

END

1

Perl、175 + 1 = 176バイト

perl -MSVG -E '$z=SVG->new(width=>4e2,height=>2e2);@x=qw/#fff #8f00ff indigo #00f #0f0 #ff0 #ff7f00 red/;$z->circle(cx=>200,cy=>200,r=>200-10*$a++,style=>{fill=>pop@x})for 1..8;say$z->xmlify'

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


1

PHP、190バイト

imagefill($a=imagecreatetruecolor($r=400,200),0,0,$w=0xffffff);foreach([255<<16,0xff7f00,$w-255,65280,255,4915330,9371903,$w]as$i)imagefilledellipse($a,200,200,$r,20+$r-=20,$i);imagepng($a);

次のように実行します。

php -r 'imagefill($a=imagecreatetruecolor($r=400,200),0,0,$w=0xffffff);foreach([255<<16,0xff7f00,$w-255,65280,255,4915330,9371903,$w]as$i)imagefilledellipse($a,200,200,$r,20+$r-=20,$i);imagepng($a);' | display

結果の画像1

また、理論上は179バイトで動作します(ただし、画像は少し混乱し、GDが悪いように見えます)。

php -r '$r=410;imagesetthickness($a=imagecreatetruecolor(400,200),10);foreach([255<<16,0xff7f00,0xffff00,65280,255,4915330,9371903]as$i)imagearc($a,200,200,$r-=20,$r,1,0,$i);imagepng($a);' | display

結果の画像2

また、完璧な画像ではありませんが、上記よりもはるかに優れています(@ 166バイト):

php -d error_reporting=30709 -r '$a=imagecreatetruecolor($r=400,200);foreach([255<<16,0xff7f00,0xffff00,65280,255,4915330,9371903]as$i)for(;++$$i<21;)imageellipse($a,200,200,$r,$r--,$i);imagepng($a);' | display

結果の画像3

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.