Напишите программу или функцию, которая принимает положительное целое число N и выводит N × N пиксельное изображение логотипа Google «G» в соответствии с этой * конструкцией:
Например, если N равно 400, должен быть выведен логотип 400 × 400 пикселей с правильными размерами и цветами:
Он должен выглядеть точно независимо от того, насколько велико или мало N. например, здесь N = 13:
Ваш код не должен подключаться к Интернету. Например, масштабирование размещенного извне svg не допускается. (Масштабирование SVG, закодированного в вашем коде, было бы хорошо, хотя.)
Сглаживание может использоваться или нет. Тебе решать.
Обратите внимание, что горизонтальная полоса буквы «G» не распространяется до правого края изображения. Круг обычно изгибается внутрь по правому краю, прежде чем его отрезать.
Самый короткий код в байтах побеждает.
* Конструкция логотипа была упрощена для этой задачи. Правильную конструкцию можно увидеть здесь и здесь .
источник
.svg
и кодировать его в наше решение, или мы должны сделать это изначально?Ответы:
Mathematica,
229226225224221206169 байтСпасибо @MartinEnder за 1 байт, @ChipHurst за 37 байт!
Какой интересный вызов!
объяснение
Итерация от 1 до 4 ...
Преобразуйте цветные шестнадцатеричные коды в
RGBColor
объекты, чтобы их можно было применить к графическому логотипу Google. Измените цветовую палитру на<input>
цвет.Создайте заполненный прямоугольник (2D-кубоид), диагональные углы которого (0, -1) и (sqrt (24), 1).
Создайте четыре заполненных четверти
Annulus
с центром в начале координат, с внутренним радиусом 3 и внешним радиусом 5. НеArcCsc@5
проходите мимо (там, где заканчивается синий сегмент).Создайте графику размером N x N от x = -5 до x = 5 (удаляет отступы).
Выходы
N = 10
N = 100
N = 200
N = 10000 (нажмите на изображение для полного разрешения)
источник
C (Windows), 311 байт
Принимает «N» в качестве аргумента командной строки и рисует прямо на экране.
Un-golfed:
источник
0xF48542
и0xFFFFFF
в целых числах.gcc g.c -lgdi32
на mingw.-1>>8
может также сработатьPython 2,
244220 байтиспользуя преобразование Мартина Розенау на плоскости [-1,1] ^ 2 и незначительные игры в гольф, такие как удаление
0.
или скобкиОбъяснение:
Вывод в двоичном формате PPM, использование:
Примеры
предыдущее 244-байтовое решение
Бета-версия Ungolfed перед устранением if / else:
источник
1for
работает.1for
добавленный пример вывода0.x
могут быть уменьшены до.x
:)JavaScript (ES6),
408 ... 321317 байт384 383 371 367 359 327 316 308304 байта JavaScript +2413 байтов для элемента canvas1 байт сохраняется путем рисования против часовой стрелки.
Благодаря конору О'Брайену в HTML сохранено 11 байтов.
12 байт, сохраненных с помощью
with
блока, благодаря Prinzhorn.4 байта сохранены с лучшим использованием
z=q-y/2
.8 байтов сохранено с помощью
parentNode
иbackground
благодаря Alexis Tyler.32 байта сохранены с использованием более точного рисунка синей дуги / полосы, поэтому мне больше не нужно стирать ее часть.
Благодаря Tejas Kale, 11 байтов были сохранены путем установки холста css вместо его parentNode.
8 байтов сохранены с использованием
with
иmap
с одним оператором, `2d` вместо('2d')
,n/5
вместо.2*n
инициализации фона вprompt(...)
.4 байта сохранены с заменой
Math.PI/4
на.7854
что кажется достаточно точным благодаря RobAu.Объяснение:
Размеры холста инициируются с помощью пользовательского ввода, а фон задается белым.
q
инициализируется.Для каждого цвета рисуется круговая часть, с некоторыми корректировками для последней (синей). Полоса отображается для каждого цвета в одном и том же месте с одинаковыми размерами, поэтому видна только последняя (синяя).
источник
<canvas id=d></canvas>
должно работать, и<canvas id=d>
может работать.d.style
работает тоже. Что позволяет(f = d.style).width = f.height = n = prompt() + 'px';
.785398
вместо того, чтобыMath.PI/4
сбрить 2 байта (или больше, если меньшая точность в порядке.BBC BASIC, 177 байт
Скачать переводчик можно по адресу http://www.bbcbasic.co.uk/bbcwin/download.html.
BBC BASIC использует 2 единицы = 1 пиксель, поэтому мы строим G
n
единиц радиуса (= n / 2 пикселя) в центреn,n
.Идея состоит в том, чтобы построить серию радиальных линий, меняя цвет соответствующим образом. Было обнаружено, что между линиями были небольшие промежутки из-за усечения чисел при преобразовании в пиксели, поэтому вместо этого фактически строятся тонкие треугольники.
После завершения сканирования линий курсор находится в верхнем правом углу синей области. Единственная координата для диагонально противоположного угла дана, чтобы нарисовать прямоугольник, чтобы завершить форму.
Ungolfed
источник
HTML / JS,
680624 байтаЧтобы получить 624 байта, удалите последний
;
, это необходимо для фрагмента ниже, так как он импортирует HTML. Кроме того, Firefox, кажется, не поддерживаетimage-rendering: pixelated
и нуждается-moz-crisp-edges
вместо этого (спасибо @alldayremix !), Что делает решение Firefox +7, но это работает в Chrome, как и ожидалось.Использует JavaScript для запроса
N
и<style>
блок для позиционирования / цвета элементов. Использует базовые элементы HTML, а не применяет стили к холсту (который, как представляется, был гораздо более коротким подходом!). Это обновленный подход, использующийdata:
фоновое изображение URI вместо просто цветных элементов. Я сохранил предыдущий подход ниже на случай, если этот новый работает на меньшем количестве браузеров.Я думал, что это будет намного меньше, чем в итоге, но, тем не менее, это было интересное упражнение!
Предыдущая версия:
источник
image-rendering: -moz-crisp-edges
вместоpixelated
. Добавлю заметку на этот счет. Мне очень нравится стиль градиента! :)Bash с Imagemagick (но на самом деле Postscript),
268255249 байтУдвоил масштабирование, чтобы удалить
setlinewidth
, заменил один масштабный коэффициент наdup
, и объединил пробел вA
переменную (нельзя с,C
потому что$C45
анализируется как «переменнаяC45
»).Спасибо joojaa за предложение об этих изменениях!
Старая шкала, 255 байт
Принимает N как единственный аргумент и выводит в o.png.
Ungolfed Постскриптум для Old Scale
источник
61.2 dup scale
вы также можете добавить пробел в C-стилеC=' setrgbcolor 5 5 4 '
и сбрить 4 пробела. Если бы вы разработали это в половинном масштабе, то вы могли бы опустить2 setlinewidth
MATLAB,
189184 байтаungolfed
источник
Perl 5,
486477476450 (+7 для-MImager
флага) = 457 байтБлагодаря Dada я сэкономил несколько байтов, используя функциональные
new
вызовы и избавляясь от паренов, а такжеpop
вместо$ARGV[0]
конечной точки с запятой. Я сохранил еще немного, поместив$n=pop
его туда , где он впервые используется, и используя нотацию пространства имен Perl 4 с'
вместо::
.Для этого требуется модуль Imager , который необходимо установить из CPAN. Принимает одно целое число в качестве аргумента командной строки. Изображение не сглажено, поэтому оно немного уродливо.
Скопируйте приведенный ниже код в файл g.pl. Нам нужно дополнительно +7 байтов для
-MImager
флага, но это экономит несколько байтов, потому что нам это не нужноuse Imager;
.Вот различные размеры:
N = 10
N = 100
N = 200
Абсолютно незатронутый код прост.
Этот пост ранее имел код в форме выходного изображения. Поскольку это противоречит правилам игры в гольф, мне пришлось удалить его. Смотрите историю изменений, если вы хотите посмотреть. Я использовал Acme :: EyeDrops, чтобы создать это, с формой, которую я создал из изображения, созданного самой программой, которую я преобразовал в искусство ASCII. Код, который я запутал, уже был в гольфе, что можно увидеть, заменив первый
eval
на aprint
.источник
pop
вместо$ARGV[0]
.$h=($n=pop)/2
вместо$n=pop;...;$h=$n/2
.new Imager::Color"#$_"
вместоImager::Color->new("#$_")
. (и вы забыли сбросить последнюю точку с запятой). Но опять же, это всего лишь мелкие детали, ваш код действительно великолепен! (Я не мог этого сделать! Я даже не зналImager
, что очень удобно!)Imager'Color
с разделителем пространства имен Perl 4 сохраняет еще один байт. :)-MImager
корочеuse Imager;
:)$n=pop
вnew
args, спасает parens и точку с запятойPHP + SVG, 300 байт
Масштабирующая часть
width=<?=$_GET[w]?>
Выход для значения 333
источник
"
) и следующим атрибутом? Например<svg width="333" viewBox="0 0 10 10">
-><svg width="333"viewBox="0 0 10 10">
M 0,5 A 5 5 0 0 1 5,0 V 2 A 3,3 0 0 0 2,5
=>M0,5A5 5 0 0 1 5,0V2A3,3 0 0 0 2,5
echo
утверждения используйте строку в двойных кавычках, чтобы разрешить встроенные переменные и удалите точку с запятой:echo'<use xlink:href="#c"fill="#'.$k.'"transform="rotate($v,5,5)"/>';
=>echo"<use xlink:href='#c'fill='#$k'transform='rotate($v,5,5)'/>"
<rect x=5 y=4 fill=#4285f4 width=4.9 height=2 />
(Здесь вам понадобится пробел перед тем/
, как.)Логотип, 258 байт
... потому что я считаю, логотипы должны быть сделаны с использованием логотипа . Это реализовано как функция. Я разработал его с помощью онлайн-переводчика Calormen.com.
Первоначально я пытался нарисовать каждый сегмент и закрасить его, но это оказалось больше, чем ожидалось. Было много потраченного впустую движения назад и тому подобное. Вместо этого я решил сделать полярную диаграмму, регулируя цвет в зависимости от заголовка. Более сложная часть математики делала геометрию для кривой в верхней части прямоугольника G. Вы можете обрезать некоторые десятичные дроби и иметь меньшую точность, но я хотел, чтобы это было с точностью до 3 цифр для соответствия типичным размерам экрана.
Golfed
Образец
g 200
Ungolfed
источник
JavaScript (ES7),
285258254252251 байтЗапрашивает ширину логотипа (до 999) и рисует его на холсте, пиксель за пиксель.
Изменить : Первоначальная версия была преобразование декартовых координат
(x,y)
в полярные координаты(r,a)
, но нам не нужен угол. Проще (и значительно короче) просто сравниватьx
иy
выяснять, в каком квартале мы находимся.Редактировать : 1 байт благодаря ETHproductions.
JS,
251224220218217 байтHTML, 34 байта
Версия ES6:
258231227225224 + 34 = 258 байтРекомендуемая максимальная ширина для фрагмента: 190.
источник
<-
и-->
операторы ??» Я думаю, это то, что происходит, когда вы думали о гипотетических операторах для гипотетического языка в течение 24 часов ...: P-->
как начало (?) Html-комментария, если он помещен в<script>
теги в html-файле.123 --> comment
выдает ошибку в консоли моего браузера (Firefox 49), пока--> comment
нет.C #, 276 + 21 = 297 байт
276 байт для метода + 21 байт для импорта System.Drawing.
На основе алгоритма Мартина Розенау. Спасибо за трудную часть придумать способ создать изображение!
26:
400:
источник
0xFF...
JS /CSS / HTML (+ JS),400 +701644617593 +1739097 121 =714 байт914774754730Использует линейные градиенты, а не преобразования. Изменить: Сохранено 140 байтов благодаря @darrylyeo. Сохранено 20 байт с использованием дополнительного элемента вместо градиента. Сохранено 24 байта благодаря @DBS. Сохранено 16 байт благодаря @Hedi. Сзади вперед, различные слои:
a
Синий кругb
Белый прямоугольник, чтобы скрыть часть над планкойc
Красная / желтая верхняя левая четвертьd
Красный октант справа вверхуe
Желтая / зеленая нижняя левая четвертьf
Зеленый / синий нижний правый кварталg
Внутренний белый кругh
Горизонтальная синяя полосаисточник
a
,b
,i
,s
и т.д. Используйте*
вместоdiv
для селектора CSS.background
как сокращение дляbackground-image
.border-radius
. Например,c{border-radius:100% 0 0;
вместоc{border-top-left-radius:100%;
Рубин 2.3.1,
376359 байтИспользование камня RMagick.
Примеры
50х50
250x250
500x500
1000x1000
Файл принимает два параметра: первый - размер, а второй - имя файла, в котором сохраняются выходные данные.
Ungolfed
Сначала я решил эту проблему с помощью oily_png / chunky_png, но это, вероятно, оказалось бы слишком сложным по сравнению с RMagick. Функция RMeick .ellipse сделала это легким делом, и основная работа была вокруг настройки форм / размеров всего.
Это моя первая заявка на Code Golf (также первый ответ на SE), и я считаю себя немного промежуточным с Ruby. Если у вас есть какие-либо предложения по улучшению / советы, пожалуйста, не стесняйтесь поделиться!
источник
Python 2,
378373 байтаЯ действительно хотел сделать это с помощью
turtle
. Для этого мне пришлось стереть свои знания геометрии, вычисляя углы и длины, не указанные в описании задачи.Редактировать: удалено
up()
, так как при этом удаляется небольшая полоска белого между зеленым и синим и улучшается внешний вид внутреннего круга. Это замедляет программу еще больше.Изменить: заменено
9*n
на,2*n
чтобы сделать быстрее. Я решил, что это все равно создаст гладкий круг.Примечания:
n
если вы удалитеspeed(0)
, который я добавил только для скорости.circle
ростаO(n)
, поскольку он определяет, сколько сторон имеет вписанный многоугольник для рисования круга.Попробуйте онлайн
Ungolfed: попробуйте онлайн
Интересный факт:
Trinket
это анаграммаTkinter
, пакет графического интерфейса Python и основа дляturtle
.источник
n
для меня? Если это не выглядит хорошо, мне, возможно, придется добавить некоторыеsqrt
s, чтобы быть более точным. Я округлил до тысячных.PHP + GD,
529449 байтОн принимает параметр строки запроса
n
и выводит PNG-версию логотипа указанного размера.Ungolfed:
N = 13:
N = 200:
источник
imagecolorallocate
; просто дайте 0xRRGGBB в качестве цвета для функций рисования. Еще немного игры в гольф, и она имеет размер до 329 байт:imagefill($i=imagecreatetruecolor($n=$argv[1],$n),0,0,($m=[4359668,3450963,0xfbbc05,0xea4335,0xffffff])[4]);for($j=-11.6;$e=[45,135,225,315][$k];$j=$e)($a=imagefilledarc)($i,$h=$n/2,$h,$n,$n,$j,$e,$m[$k++],0);$a($i,$h,$h,$n*.6,$n*.6,0,0,$m[4],0);imagefilledrectangle($i,$h,$h-$n*.1,$h+$h*.98,$h+$h*.2,$m[0]);imagepng($i,"g.png");
работает с-r
вводом из командной строки и выводит вg.png
.[$k
должно быть[+$k
. Но этот тоже должен работать:imagefill($i=imagecreatetruecolor($n=$argv[1],$n),0,0,$w=2**24-1);$j=-11.6;foreach([$b=4359668,3450963,0xfbbc05,0xea4335]as$c)($a=imagefilledarc)($i,$h=$n/2,$h,$n,$n,$j,$j=45+90*$k++,$c,0);$a($i,$h,$h,$p=$n*.6,$p,0,0,$w,0);imagefilledrectangle($i,$h,$n*.4,$n*.99,$p,$b);imagepng($i,"g.png");
(291 байт)imagecolorallocate
. Я обновлю свой ответ вашим кодом. Но нужно ли выводить на имя файла? Разве вы не можете просто пропустить имя файлаimagepng
и просто вывести его на стандартный вывод?Java, 568 байт
Не самый сильный язык для игры в гольф, но вот моя серьезная попытка:
Использование:
Версия без игры в гольф - основная идея состоит в том, чтобы работать в системе координат u, v ∈ [−0,5, 0,5] и вычислять расстояние и угол каждого пикселя от центра изображения:
Моя реализация вычисляет и рисует необработанные пиксели. Можно создать альтернативную реализацию, которая использует графические процедуры высокого уровня, такие как Graphics2D и Arc2D, для рисования, особенно с помощью сглаживания.
источник
Go, 379 байт
Функция
f
принимает одинint
аргумент (масштабный коэффициент) и выводит изображение SVG, масштабированное соответствующим образом.Попробуйте онлайн в Ideone.
Пример вывода:
Кажется неправильным умиротворять наших повелителей Google на любом языке программирования, кроме их собственного.
источник
CJam, 141
Попробуйте онлайн
Выводит изображение в формате ASCII ppm.
Для версии ASCII-art, которую лучше смотреть в браузере, попробуйте этот код . Это также помогает визуализировать алгоритм.
Объяснение:
источник
JavaScript (ES6) (+ SVG), 293 байта, неконкурентный
К сожалению, соединение по круглой линии - не совсем требуемый эффект, но оно довольно близко.
источник
FreeMarker + HTML / CSS, 46 + 468 = 514 байт
HTML:
CSS:
Предполагая, что процессор FreeMarker выполняется с
n
набором переменных , представляющих ввод.Объяснение магических чисел:
Все основано на обертке 10x10px, затем масштабируется
n/10
.Ungolfed JSFiddle
источник
transform:scale(n)
наtransform:scale(<?=$_GET[n])?>
(PHP). В javascript вы можете добавить часть CSS к элементу стиля343 октета Хаскелла
объяснение
источник
0x7C
/124
/|
), в этом случае это будет 338 септетов Haskell . Но, учитывая, как за последние пару десятилетий стали стандартными 8 битов в байтах в хранилище данных , я думаю, что термин «байты» достаточно специфичен, не побеждая мертвую лошадь.SAS -
590536521 байтЭто использует средство аннотации GTL . Входные данные указываются в макропеременной в первой строке. За несколько дополнительных байтов вы можете определить все это как макрос. Он все еще крадется ниже Java и несколько ответов HTML, даже если вы должны определить нулевой шаблон графа, чтобы иметь возможность построить что-либо вообще!
Я оставил разрывы строк для некоторой читабельности, но я не считаю их до общего, поскольку это работает без них.
Редактировать: сбрил еще несколько байтов с помощью макроса, настроек по умолчанию и выбора операторов.
Редактировать 2: избавился от
do-end
блоков дляif-then-else
логики, и это как-то все еще работает - я не совсем понимаю, как. Также я обнаружилeuclid
функцию!источник
SCSS - 415 байт
Принимает входные данные как
$N: 100px;
и<div id="logo"></div>
, не уверен, если они должны учитываться в общем объеме, хотя ...Демо на JSFiddle
источник
Haskell с пакетом JuicyPixels , 306 байтов
Пример использования:
Возможно, это можно улучшить. Идея состоит в том, чтобы передать функцию,
generateImage
которая выбирает пиксель (действительно цвет), который должен идти в позиции x, y. Для этого мы используем лямбду, которая добавляетn
в качестве параметра и преобразует их все в плавающие одновременно.#
Функция в основном проверяет , если мы в кольце, бар, или ни. Если это кольцо, которому мы передаем эстафету%
, если столбик, который мы просто возвращаем, синий, иначе белый.%
проверяет, в каком квадранте мы находимся, и возвращает соответствующий цвет, если он не синий. Синий - особый случай, так как мы должны убедиться, что он не переходит в красный, поэтому мы возвращаем синий только в том случае, если онy
находится ниже «линии бара», в противном случае мы возвращаем белый. Это общий обзор.источник
Processing.py - 244 байта + 1 байт для количества цифр в N
Давайте начнем с кода. Это можно вставить в среду обработки и запустить (меняется
N
для разных размеров).Небольшой обман: круг, который вырезает часть из логотипа, нарисован в оттенках серого Обработки 205, который является фоновым цветом по умолчанию. Экспорт этого в изображение не будет выглядеть так же. Это сохраняет вызов
background(255)
.объяснение
Примеры
N
= 400N
= 13 (минимальный размер обработки - 100x100)Запись
Если мы позволим нам вручную редактировать несколько значений для
N
явных вызовов,setup
иdraw
они не нужны, мы получим 213 байтов + 3 байта на цифруN
.источник