Нарисуй радугу


25

Задача проста: нарисовать радугу как можно меньше байтов

Спецификации для радуги следующие:

  • Рисунок должен быть ровно 400 пикселей в ширину и 200 пикселей в высоту (необязательно 401x201, если вы хотите один центральный пиксель)
  • Красное кольцо должно касаться всех границ фигуры (внешний радиус = 200 пикселей)
  • Все кольца должны иметь одинаковую ширину (10 пикселей)
    • Фиолетовое кольцо должно иметь внутренний радиус 130 пикселей.
  • Лук должен быть верхней половиной идеального круга
  • Фон должен быть белым (прозрачный тоже допускается)
  • Рисунок не должен иметь границ (исключение делается, если граница не может быть подавлена)
  • Встроенные функции создания радуги не допускаются!

Следующие цвета должны быть использованы в радуге:

радуга

Это код гольф, поэтому выигрывает самый короткий код в байтах!

Пример:

радуга

Связанные, но разные!


26
Встроенные функции создания радуги недопустимы. Я уверен, что у Mathematica есть такая функция
Луис Мендо

Насколько несовершенной может быть радуга? От не сглаживания до слез? Рассмотрим образы в этом ответе
aross

@aross: это должно выглядеть как образец радуги (некоторые пиксели могут отличаться из-за неточных расчетов). Две последние радуги слишком «грязные», а первая выглядит хорошо. У меня нет идеального правила, так что будьте осторожны :-)
Стьюи Гриффин,

@StewieGriffin Причина, по которой я спрашиваю, заключается в том, что графика PHP довольно глючная, а теоретически решение верное . Ну, во-вторых, третий будет с сглаживанием (что тоже не работает)
примерно

Разрешена ли векторная графика? изменить: не берите в голову - я вижу, что уже есть ответ TikZ, поэтому я понимаю, что они есть.
Джулиан Вольф

Ответы:


15

MATL , 107 95 92 87 84 83 байта

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

Это работает в текущей версии (14.0.0) языка / компилятора.

РЕДАКТИРОВАТЬ (6 июля 2017 г.) : Вы можете попробовать это на MATL Online! ,

Чтобы проверить правильность цвета, удалите последние пять символов (вам нужно подождать несколько секунд и прокрутить вниз до конца вывода).

введите описание изображения здесь

объяснение

Код состоит из трех основных шагов:

Шаг 1 : Сгенерируйте матрицу 201x401 с числами от 1до 8. Пикселями со значением 1являются фон (белый), пиксели со значениями 2, ..., 8представляют каждую полосу радуги.

Горизонтальные координаты в диапазоне от , -200чтобы 200слева направо, а вертикальные координаты в пределах от 0до 200дна к вершине. Таким образом, начало координат (0,0) - центр снизу, верхний левый угол (-200,200) и т. Д.

Различные полосы радуги генерируются путем вычисления расстояния от каждого пикселя до начала координат и квантования с шагом 10 пикселей.

Шаг 2 : Создайте матрицу 8x3, определяющую цветовую карту. Каждый ряд является одним из необходимых цветов (белый и семь цветов радуги). Каждое значение предыдущей матрицы 201x401 будет интерпретироваться как указатель на строку этой цветовой карты.

Мы генерируем матрицу цветовой карты, используя значения от 0 до 1 для каждого цветового компонента, а затем умножаем на 255 и округляем вниз. Таким образом, большинство значений изначально равны 0 и 1, которые впоследствии станут 0 и 255. Промежуточные значения кодируются как значения между 0 и 1 с 2 или 3 десятичными знаками, выбранными так, чтобы при умножении и округлении давать точное желаемое значение.

Шаг 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

Пит , 838 кодов, несколько тысяч пикселей

Кто-то должен был сделать это:

Потрясающая радуга

Если вы сохраните это изображение, вы можете попробовать его онлайн !

Реальная программа Piet - только верхние ~ 125 пикселей, которые я создал, используя написанную мной программу на Python.

Редактирование этого потом действительно повредило мое зрение, я буду споткаться на несколько дней!

Это выводит изображение в формате SVG, потому что SVG действительно (на мой взгляд) самый простой способ сделать это. Я бесстыдно украл SVG-код Doorknob. Выходы:

правильный вывод

ну, это действительно:

<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 общедоступным? Я прошу друга, который очень ленивый ....
NaCl

Хм, для реализации 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 />

радуга

Спасибо @MamaFunRoll за 16 байтов и @PatrickRoberts еще за 6!


2
Вы могли бы, вероятно, сэкономить много байтов, упаковав строки.
спагетто

@AquaTart Все, что делает, это добавляет байты. O_o
Дверная ручка

3
Я не думаю, что вам нужны какие-либо кавычки, косые черты или последний конечный </svg>тег.
Mama Fun Roll

4
Два предложения: red #ff7f00 #ff0 #0f0 #00f #8f00ff #fffдля списка цветов и принимать одиночные кавычки выключения всех значений параметров , которые не имеют места в них ( cx, cy, rи fill) , но не забудьте оставить пространство между значением и заливки , /так что цвет не делает получить неправильно истолкован , Также удалите </svg>как предложено выше.
Патрик Робертс

1
Извини, я имел ввиду red #ff7f00 #ff0 #0f0 #00f indigo #8f00ff #fff. Также, если вы замените пробелы запятыми в, viewBoxвы также можете удалить одинарные кавычки для этого параметра.
Патрик Робертс

14

Minecraft 1.10 (почти), 2677 символов одной команды, 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]}]}]}]}

Создайте новый мир Superflat, вставьте этот беспорядок в командный блок Impulse, установите достаточно большое расстояние рендеринга и запустите его. Разбейте стойку брони, когда ваш компьютер перестанет отставать.

Результат - 400 блоков в поперечнике и 200 блоков в высоту, как и требовалось.

Я использовал один командный генератор MrGarretto, чтобы собрать все вместе, а затем немного изменил результат, чтобы сэкономить еще пару байтов. Вот вход к нему:

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 ~

Всего 15 командных блоков по 1.9+ и 838 байт, так что 15 * 2 + 838 = 868 байт .

Вот (почти) часть, ей не хватает угла и края. По логике не должно - ошибка Майнкрафта? Было бы ровно 400x200 блоков, если бы не это. Не так много я могу сделать.

Rainboom


4
Yay, генератор радуги на основе свиньи! +1
TuxCrafting

Если это 2677 символов, как это может быть только 868 "байт"? Из того, как я понимаю эту страницу, фактическое количество блайтов должно быть 2677 + 4
theonlygusti

Это 868, если вы построите его в мире, 2677, если вы используете Fallingsand, чтобы создать его (который имеет много накладных расходов)
quat

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>

Да, это неуклюже Должны быть улучшения, которые можно сделать.

Выводится как SVG, как мой ответ Pyth .

Спасибо @MyHamDJ за сокращение 3 байта!


Вы можете сбрить 2 байта (или нажатия клавиш), если замените свою последнюю команду ex наkv3G:norm A'/><cr>
DJMcMayhem

Вы также можете снять еще 3, если вы введете <circle cx...строку в строке 2 с первого раза, вместо того, чтобы вводить все цвета, а затем вводить их позже.
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=200и cx=200 cy=200 r=${--r}0вместо viewBox='0 0 40 20'. Это должно сэкономить 7 байтов.
Патрик Робертс

Я надеюсь, что все в порядке, что я заимствовал вашу идею с помощью .replaceметода ...
Патрик Робертс

@PatrickRoberts, конечно, все в порядке, я одолжил некоторые из ваших
edc65

5
Я, конечно, не ожидал увидеть r-=1в коде гольф ...
Нил

@ Нил ба! это было - = 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 устанавливает палитру для определенных необходимых значений 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сожалению, команда была необходима, поскольку прокрутка (координат источника холста) не может быть выполнена до того, как окно будет отображено на экране.

Кроме того, сжатый код на самом деле рисует полную радугу (используя круг вместо дуги) и просто полагается на отсечение окна ...

Во всяком случае, я надеюсь, вам понравится. : О)


Вы можете использовать lmapвместо того, foreachчтобы сократить.
sergiol

И вы можете поместить первую строку внутрь второй, как:pack [canvas .c -bg #FFF -bo 0 -highlightt 0] -e 1 -f both
sergiol

Существует несогласованность между двумя версиями вашего кода. Гольф делает 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 Спасибо за ссылку, добавил.
Fatalize

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 дуг, с массивом для хранения цветов. Я уверен, что это может быть улучшено в дальнейшем.

Ungolfed код:

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чтобы сохранить еще один байт. Ваш цикл может быть для сохранения еще нескольких байтов. Вы можете сохранить еще один байт, добавив ,qк вашему intобъявлению. Вы должны были бы сделать это int c[]=вместо того , чтобы int[] cтак qэто intи не int[]. Делая это, вы можете добавить q=390-v*20;в свой цикл. и заменить на 390-v*20q. Это один труд для одного байта, но байт - это байт, верно ?!
CorsiKa

2
Вы можете сохранить еще два байта, просто выдав исключение вместо IOException.
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"));}}
Кевин Круйссен

4

Жевательная резинка , 139 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%)}

Изменить: Сохранение 2 байтов, работая над ошибкой в ​​Chrome. Сохранено еще 2 байта благодаря @TrangOul.

Примечание. Фрагмент использует <div>ограничения стековых фрагментов.


Похоже, что фон на внешней стороне радуги красный (по крайней мере, на моем телефоне).
Стьюи Гриффин

@StewieGriffin отлично работает для меня в Firefox для Android. (Я не мог понять, как включить фрагменты стека в браузере моего телефона по умолчанию.)
Нил

Хорошо, немного странно :-) Я использую Chrome 49.0.2623.91 на galaxy s6 edge, кстати.
Стьюи Гриффин

@ StewieGriffin Похоже, что он сломан в Chrome для Windows тоже.
Нил

@ StewieGriffin Хорошо, я думаю, что у меня есть обходной путь, и он также экономит два байта!
Нил

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...)). Вы также можете использовать slice/ spliceof substr, если я не ошибаюсь. Также может быть короче использовать <canvas> .innerHTML. Или даже ответ HTML + JS с c
указанием

Преимущество @Downgoat substrв том, что его второй параметр - это длина, а не смещение. Что касается игры в гольф, 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 в форму for: ;)code1,code2;-> ;code2)code1;(запятую!).
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 вместо желтого. Вы могли бы также использовать атрибут bgcolor вместо атрибутов style.
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

Bash + 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:

Образец вывода:

радуга от 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++]);

радуга

Сэкономлено 10 байтов благодаря Kritixi Lithos
... и еще 6 байтов благодаря dzaima


2
Может сбрить еще один байт за счет изменения for(int i=0;i<8;i++)в for(int i=0;i++<8;)или аналогичный
четв

Я не думаю, что вы можете использовать переменные при вызовеsize()
Kritixi Lithos

@KritixiLithos Что вы имеете в виду?
Фламбино

Когда я вызываю размер с переменными в качестве параметров, у меня возникает ошибка (перед запуском), что я не могу использовать переменные для установки размеров на экране
Kritixi Lithos

background(-1)это один байты короче background(255), и вы можете изменить 255в массиве , cчтобы -1спасти другие байты
Kritixi LITHOS

2

R 184 170 байт

Создание изображения с фиксированными размерами в пикселях оказывается на удивление хитрым с 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

Excel 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

-11 байт для удаления .Adjustments(3)=3/80вызова и добавления 8-й, белой дуги

-6 байт для использования -1более&HFFFFFF

-3 байта для использования Sheet1болееSheets(1)

-6 байт для преобразования withоператора в setоператор

-14 байтов для преобразования Subв анонимную функцию VBE

Выход

Фото или этого не произошло


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

Радуга в студии игр

объяснение

Определите запуск программы (с именем «r» для экономии места)

PROGRAM r;

настройка поиска палитры

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

НАЧАТЬ код программы

BEGIN

Установите режим видео на 400 200

set_mode(400200);

петля x (предопределенная переменная) от -80 (что за хг) до 80 (7 цветов + белый центр)

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

определить ограничения эллипса

y=399-x;

draw elipse - на первой итерации рисует круг, который больше белого, чем экран (индекс -8)

рисовать (тип (5 = заполненное эллипс), цвет, непрозрачность, 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

конец (соответствует НАЧАЛО вверху программы)

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.