Задача проста: нарисовать радугу как можно меньше байтов
Спецификации для радуги следующие:
- Рисунок должен быть ровно 400 пикселей в ширину и 200 пикселей в высоту (необязательно 401x201, если вы хотите один центральный пиксель)
- Красное кольцо должно касаться всех границ фигуры (внешний радиус = 200 пикселей)
- Все кольца должны иметь одинаковую ширину (10 пикселей)
- Фиолетовое кольцо должно иметь внутренний радиус 130 пикселей.
- Лук должен быть верхней половиной идеального круга
- Фон должен быть белым (прозрачный тоже допускается)
- Рисунок не должен иметь границ (исключение делается, если граница не может быть подавлена)
- Встроенные функции создания радуги не допускаются!
Следующие цвета должны быть использованы в радуге:
Это код гольф, поэтому выигрывает самый короткий код в байтах!
Пример:
code-golf
graphical-output
Стьюи Гриффин
источник
источник
Ответы:
MATL ,
1079592878483 байтаЭто работает в текущей версии (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 : Показать изображение с этой цветовой картой.
источник
Пит , 838 кодов, несколько тысяч пикселей
Кто-то должен был сделать это:
Если вы сохраните это изображение, вы можете попробовать его онлайн !
Реальная программа Piet - только верхние ~ 125 пикселей, которые я создал, используя написанную мной программу на Python.
Редактирование этого потом действительно повредило мое зрение, я буду споткаться на несколько дней!
Это выводит изображение в формате SVG, потому что SVG действительно (на мой взгляд) самый простой способ сделать это. Я бесстыдно украл SVG-код Doorknob. Выходы:
ну, это действительно:
Удачи, победив этот ответ, не-Esolang пользователей!
источник
Pyth,
150149128 байтовВыходы в SVG:
Спасибо @MamaFunRoll за 16 байтов и @PatrickRoberts еще за 6!
источник
</svg>
тег.red #ff7f00 #ff0 #0f0 #00f #8f00ff #fff
для списка цветов и принимать одиночные кавычки выключения всех значений параметров , которые не имеют места в них (cx
,cy
,r
иfill
) , но не забудьте оставить пространство между значением и заливки ,/
так что цвет не делает получить неправильно истолкован , Также удалите</svg>
как предложено выше.red #ff7f00 #ff0 #0f0 #00f indigo #8f00ff #fff
. Также, если вы замените пробелы запятыми в,viewBox
вы также можете удалить одинарные кавычки для этого параметра.Minecraft 1.10 (почти), 2677 символов одной команды, 868 байт
Ну, я конечно выбрал многословный язык.
Создайте новый мир Superflat, вставьте этот беспорядок в командный блок Impulse, установите достаточно большое расстояние рендеринга и запустите его. Разбейте стойку брони, когда ваш компьютер перестанет отставать.
Результат - 400 блоков в поперечнике и 200 блоков в высоту, как и требовалось.
Я использовал один командный генератор MrGarretto, чтобы собрать все вместе, а затем немного изменил результат, чтобы сэкономить еще пару байтов. Вот вход к нему:
Всего 15 командных блоков по 1.9+ и 838 байт, так что 15 * 2 + 838 = 868 байт .
Вот (почти) часть, ей не хватает угла и края. По логике не должно - ошибка Майнкрафта? Было бы ровно 400x200 блоков, если бы не это. Не так много я могу сделать.
источник
Mathematica
152144126 байтСпасибо @CatsAreFluffy за сокращение 8 байт и @njpipeorgan еще за 18 :)
источник
#
против#[[1]]
,#2
против#[[2]]
и@@@
против/@
.Thread
работает вместоTranspose
.Graphics@MapIndexed[{#,Disk[{0,0},4-#/5&@@#2,{Pi,0}]}&,RGBColor/@TextWords@"#f00 #ff7f00 #ff0 #0f0 #00f #4b0082 #8f00ff #fff"]
сохраняет еще 18 байтов, но идея та же.VIM,
165142139Да, это неуклюже Должны быть улучшения, которые можно сделать.
Выводится как SVG, как мой ответ Pyth .
Спасибо @MyHamDJ за сокращение 3 байта!
источник
kv3G:norm A'/><cr>
<circle cx...
строку в строке 2 с первого раза, вместо того, чтобы вводить все цвета, а затем вводить их позже.HTML + SVG + ES6, 169
источник
height=200
иcx=200 cy=200 r=${--r}0
вместоviewBox='0 0 40 20'
. Это должно сэкономить 7 байтов..replace
метода ...r-=1
в коде гольф ...Рубин с обувью, 155 байт
Образец вывода:
источник
JavaScript (ES6),
171158 байтБлагодарим @ edc65 за идею конвертировать
в
Это может выглядеть длиннее, но количество байтов, сохраненных при сжатии массива в строку, стоит преобразования. (Это экономит 13 байтов в этом случае)
демонстрация
источник
HTML (162) + CSS (146)
HTML (224) + CSS (128)
источник
SpecBAS -
318254 байтаЕсли мы рисуем радугу, то похоже, что это хорошее место для использования преемника ZX Spectrum BASIC.
Строка 2 устанавливает палитру для определенных необходимых значений RGB (и, вероятно, не помогает подсчету байтов), поскольку стандартные цвета спектра не совпадают.
Команда
DRAW
может принимать дополнительный параметр, который заставляет ее поворачиваться на несколькоградусов врадианах между x1, y1 и x2, y2. Наконец, он находит разрыв в только что нарисованных полукругах и заливает текущий цвет.источник
Tcl / Tk , 263 байта
Увы, этот вопрос всегда предпочитает некоторые эзотерические языки ... Тем не менее, Tcl / Tk действительно делает графические операции всеми: простыми, короткими и удобочитаемыми .
Тем не менее, я пожертвовал удобочитаемостью, чтобы сократить параметры до как можно меньшего числа символов. Я не думаю, что сжатие списка цветов очень поможет по сравнению с кодом для его распаковки ...
Для сравнения приведем код, который не был обработан (380 байт):
К
after
сожалению, команда была необходима, поскольку прокрутка (координат источника холста) не может быть выполнена до того, как окно будет отображено на экране.Кроме того, сжатый код на самом деле рисует полную радугу (используя круг вместо дуги) и просто полагается на отсечение окна ...
Во всяком случае, я надеюсь, вам понравится. : О)
источник
lmap
вместо того,foreach
чтобы сократить.pack [canvas .c -bg #FFF -bo 0 -highlightt 0] -e 1 -f both
create oval
; ungolfed делаетcreate arc
. Не могли бы вы объяснить?LaTeX, 290 байт
Попробуй это здесь .
Пояснения
источник
Java, 354 байта
Просто использует
Graphics2D
класс для рисования 7 дуг, с массивом для хранения цветов. Я уверен, что это может быть улучшено в дальнейшем.Ungolfed код:
источник
0x0000ff
можете быть справедливыми0xff
или даже просто такими255
же с0x00ff00
существами0xff00
.0xff0000
может быть,255<<16
чтобы сохранить еще один байт. Ваш цикл может быть для сохранения еще нескольких байтов. Вы можете сохранить еще один байт, добавив,q
к вашемуint
объявлению. Вы должны были бы сделать этоint c[]=
вместо того , чтобыint[] c
такq
этоint
и неint[]
. Делая это, вы можете добавитьq=390-v*20;
в свой цикл. и заменить на390-v*20
q. Это один труд для одного байта, но байт - это байт, верно ?!drawOval
и просто визуализировать верхнюю половину изображения ... может быть немного дороже, хотя ...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"));}}
Жевательная резинка ,
139119 байтHexDump:
К сожалению, это короче, чем мой ответ Pyth . :(
Создает тот же файл SVG.
источник
CSS,
244242240 байтИзменить: Сохранение 2 байтов, работая над ошибкой в Chrome. Сохранено еще 2 байта благодаря @TrangOul.
Примечание. Фрагмент использует
<div>
ограничения стековых фрагментов.Показать фрагмент кода
источник
JavaScript
271251источник
{ ... }
внутри последнего раздела for, разделенного символом,
. напримерfor(i=0;i<8;x.beginPath(),x.arg(...etc...))
. Вы также можете использоватьslice
/splice
of substr, если я не ошибаюсь. Также может быть короче использовать <canvas>.innerHTML
. Или даже ответ HTML + JS сc
substr
в том, что его второй параметр - это длина, а не смещение. Что касается игры в гольф,document.body
казалось бы, обеспечить значительную экономию.C
220217213 байтовВыход - PPM (двоичный вид).
Изменить: Сохраненные пару байтов благодаря @tucuxi.
Редактировать 2: переставить код, чтобы сохранить еще больше.
источник
i;s;t;main()
->s;t;main(i)
, а другой - поместить часть своего тела цикла for в форму for:;)code1,code2;
->;code2)code1;
(запятую!).Google Blockly , 48 блоков, 75 байтов
Нажмите GIF ниже, чтобы перейти к решению, где вы можете ближе познакомиться с тем, как оно работает.
Что касается объяснения, я думаю, что изображение стоит тысячи слов, и, следовательно, GIF стоит тысячи изображений.
ссылка на большой читаемый GIF
Примечание: я не уверен, как считать в Blockly, поэтому я посчитал каждый блок как 1 байт, а каждую переменную обычным образом, так что
0
== 1 байт,530
== 3 байта,Arial
== 5 байтов иbold
== 4 байта.Я посчитал специальный символ, который использовал, чтобы отрезать радугу, как 2 байта. Пожалуйста, сообщайте о любых ошибках или предложениях количества байтов в комментариях
источник
Постскриптум (87 байт)
Шестнадцатеричный дамп:
Выход:
источник
HTML + CSS,
310307 байтПревосходная неверная разметка (может выглядеть или не выглядеть правильно в вашем браузере). Просто хотел посмотреть, возможно ли это вообще.
источник
white
можно укоротить), конечно - не знаю, почему я этого не видел. Я пробовалbgcolor
перед публикацией, но, к сожалению, он больше не поддерживается (во всяком случае, здесь, в Chrome)PHP, 285 байт
Выходы:
источник
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.)Bash + ImageMagick,
159125 символовОбразец вывода:
источник
Обработка,
196186181179169163 байтаСэкономлено 10 байтов благодаря Kritixi Lithos
... и еще 6 байтов благодаря dzaima
источник
for(int i=0;i<8;i++)
вfor(int i=0;i++<8;)
или аналогичныйsize()
background(-1)
это один байты корочеbackground(255)
, и вы можете изменить255
в массиве ,c
чтобы-1
спасти другие байтыR
184170 байтСоздание изображения с фиксированными размерами в пикселях оказывается на удивление хитрым с R, чьи функции построения графиков в основном предназначены для статистиков. В частности, R оставляет дополнительное пространство для меток и координатных осей, если вы явно не задаете поля как нулевую ширину при вызове
par
.С другой стороны, некоторые требуемые цвета (в частности, красный, желтый и синий) находятся в палитре по умолчанию, и на них можно ссылаться просто с помощью целочисленных индексов.
источник
Четвертый Салон Хайку (184 байта)
Я не могу удовлетворить ограничения размера с этим форматом, но я думал, что это стоит поделиться в любом случае.
источник
Excel VBA,
213202196192172 байтаКод
Функция анонимного непосредственного окна VBE, которая не принимает входные данные и выводит радугу в виде векторного изображения на объект Sheets (1)
Версия подпрограммы
-11 байт для удаления
.Adjustments(3)=3/80
вызова и добавления 8-й, белой дуги-6 байт для использования
-1
более&HFFFFFF
-3 байта для использования
Sheet1
болееSheets(1)
-6 байт для преобразования
with
оператора вset
оператор-14 байтов для преобразования
Sub
в анонимную функцию VBEВыход
источник
DIV Games Studio (184 байта)
Не самый короткий, но довольно простой. Использует палитру DIV по умолчанию
объяснение
Определите запуск программы (с именем «r» для экономии места)
настройка поиска палитры
НАЧАТЬ код программы
Установите режим видео на 400 200
петля x (предопределенная переменная) от -80 (что за хг) до 80 (7 цветов + белый центр)
определить ограничения эллипса
draw elipse - на первой итерации рисует круг, который больше белого, чем экран (индекс -8)
рисовать (тип (5 = заполненное эллипс), цвет, непрозрачность, x0, y0, x1, y1)
как только первый будет сделан, поднимите x до нуля, чтобы начать рисовать красную полосу
конец цикла
бесконечный цикл, рисование экрана.
конец (соответствует НАЧАЛО вверху программы)
источник
Perl, 175 + 1 = 176 байт
источник
PHP, 190 байт
Запустите это так:
Также теоретически работает на 179 байтах (но изображение выглядит немного испорченным, плохой GD):
Также не идеальное изображение, но намного лучше, чем выше (и @ 166 байт):
источник