Нарисуйте символ биологической опасности в произвольном цвете на ярко окрашенном фоне. Конкретные пропорции были опубликованы в выпуске Федерального реестра правительства США от 27 июня 1974 года .
подробности
В качестве вывода разрешены запись в файл (растровые и векторные форматы) или отображение на экране.
Вы можете нарисовать только границу или заполненную форму.
Если вы используете растровые изображения, вы должны принять параметр (или два) в качестве входных данных, которые позволяют вам регулировать разрешение выходных данных (например, ширина / высота).
Фон должен по крайней мере иметь размер ограничительной рамки символа, но может быть больше.
Вывод символа юникода ☣ недостаточно .
- Точные соотношения используемых расстояний приведены на следующей диаграмме (которая изначально была отсюда ):
Я также попытался сделать дополнительную диаграмму с теми же измерениями, которая, надеюсь, будет немного легче читать:
(Навеяно постом на 99% невидимым )
Ответы:
T-SQL,
442 441 426 355 349344 байтаСохранено более 70 байт с использованием
REPLACE()
длинных ключевых слов и выполнением в виде динамического SQL. Посмотрите код после замены на скриншоте ниже.Я удвоил значения координат из иллюстрации на примере и переместился на 9 единиц вверх, чтобы уменьшить количество отображаемых десятичных знаков.
Это было сделано в SQL 2017 с использованием геопространственных функций, представленных в SQL 2008. Множество полезных встроенных функций геометрии, в том числе
STBuffer
, что дает мне простой способ определения кругов разных размеров вокруг точки.Визуальный вывод с аннотированным кодом:
Для большего количества рисунка T-SQL, см. Мой Пасхальный заяц .
Для более практического применения этой технологии в SQL, прочитайте эту статью или посмотрите это видео . У SE даже есть связанный сайт, gis.stackexchange.com .
Редактирование:
STDifference
одинSTUnion
из объектов, а не каждый в отдельности.REPLACE()
повторяющиеся ключевые слова, а затем выполняется как динамический SQL. Отменено Редактирование 2, чтобы оставить больше заменSTDifference
.5
для использования вместо символа замены'#'
, сохранив еще 2 байта в кавычках.)
вSTDifference
строку замены; спасибо, Николас!источник
Tex + Tikz, 232 байта
43 байта сохранены при переключении на текс. Спасибо Фелипе Олейнику
Некоторые байты сохранены благодаря Skillmon
С разрывами строки и без
\def
:объяснение
Это немного устарело, я исправлю это, когда смогу выяснить, как сделать изображения не слишком привлекательными
Здесь я собираюсь объяснить, как несжатый ответ решает проблему. Я могу в какой-то момент объяснить, как работает сжатие. Сначала мы рисуем большие черные круги:
Затем мы рисуем несколько белых линий:
Затем мы рисуем белые кружки:
Затем мы добавляем центральный белый круг:
Затем мы добавляем черное кольцо:
Затем мы удаляем части черного кольца
источник
\1
вместо\x
, как вы можете затем использовать\def\f{\foreach\1in{90,210,330}}
.C 8010 байт
Еще до SVG или EMF вам приходилось иметь дело с растром, и если вы хотели, чтобы что-то загружалось сразу, скажем, до того, как O / S был готов, например, экран запуска Windows, вы должны были использовать RLE или длину выполнения -encoding. Этот монстр выводит файл PBM, используя RLE в качестве данных. Стройте как обычно и бегите вот так
./biohazard > biohazard.pbm
.Если бы вы включили все фреймворки, необходимые для генерации, например, движок SVG в HTML, библиотеки Java и т. Д., Это, вероятно, было бы наименьшим автономным решением , поскольку
puts
это единственная внешняя функция и, как правило, одна из наименьшихstdio.h
функции.Относительно этой детали:
Я интерпретировал «должен» как отличающийся от «должен», например, как в RFC 2119 , поэтому я не включил масштабирование, потому что для этого кода было бы возможно только сделать кратные оригиналу, например,
./biohazard 2
и это представило быatoi
,printf
и другие осложнения, которые отвлекают от основной цели представления.источник
putchar()
или подобное.TeX + Ti k Z,
234230226 байтПервоначально на 5 байтов длиннее, чем ответ Шриотчилизма О'Зайча , но этот должен быть правильным. Это похоже на его ответ, но здесь и там сохраняется еще несколько байтов, ему нужен еще один
\draw[line width=8]
(в приведенном ниже коде это сделано\28](~30)to(~55);
, то есть только 17 байтов, добавленных только для этого), чтобы получить правильные кончики символа, следовательно, 5 байтов больше общая длина кода.И благодаря Sriotchilism O'Zaic я перечитал некоторые вопросы и понял, что могу изменить цвет на красный, чтобы снова сэкономить несколько байт:
TeX-g + Ti k Z, 195 байт
Просто, если кому-то все равно, следующий использует основанный на TeX диалект гольф-кода, над которым я работаю (не считайте код стабильным). Число байтов включает символы EOL и символ EOF, так как они используются семантически (EOL разделяет аргументы циклов). До сих пор диалект довольно мал и содержит только короткие сокращения для определений и синтаксис цикла for, однако он специально не написан для этого ответа, поэтому он не должен нарушать правила игры в код. Репозиторий для
-g.tex
-package / file: https://github.com/Skillmon/TeX-gВывод обоих фрагментов кода выглядит одинаково:
( лень обновлять изображение, просто представьте, что оно красное )
источник
GLSL,
700629564545499 байтЯ играл с Shadertoy, поэтому я попробовал язык затенения GLSL. Код просто растеризует круги и линии, проверяя каждый фрагмент, и присваивает им значение один или ноль. Размер был сокращен с> 1000 байт при интенсивном использовании макросов.
Шадерой программа
источник
&&
и||
быть golfed к&
и|
в некоторых или во всех частях?|
/&
вместо||
/&&
для bools, не так ли? Давно ничего не делал в Си, так что не уверен. Я знаю, что это работает в Java / C # .NET в большинстве случаев. Но я только сейчас заметил добавленную вами ссылку на Shadertoy, и она, похоже, не работает там, как вы уже заявили. Ах хорошо. Хороший первый ответ, кстати! Добро пожаловать в CGCC.SVG (HTML5),
434410321 байтТеперь на основе SVG @ LevelRiverSt.
источник
<defs>
безопасно. Это работает для меня на Firefox, Chrome и Edge.<use>
!Обработка,
371368 байтЯ не был уверен, должен ли Processing считаться растеризованным или нет для целей этой задачи. Если он считается растеризованным, то
translate
иscale
необходимо сделать символ разборчивым и отображаемым на экране для данного размера окна. Но, поскольку все команды рисования векторизованы, это работает в любом заданном масштабе; так что если мы предположим, что рисование в относительном начале шириной около 200 единиц - это нормально, первые 43 байта могут быть отброшены.Предполагается, что цвет фона -
204, 204, 204
это цвет фона по умолчанию при обработке. Оно также предполагаетrectMode
изCORNER
иellipseMode
изCENTER
(по умолчанию)С начальным
size(640, 640)
результатом результирующий эскиз выглядит так:Удвоив масштаб, я сохранил 3 байта, потому что
.5
исключены s (хотя несколько чисел действительно переходят от 1 до 2 цифр).Конструкция аналогична решению TeX: черный, а затем серый сверху «стирают» промежутки между формой.
Объяснение:
источник
.5
!scale
чтобы изменить его только для части кода, но не знал, где его лучше всего использоватьGLSL,
319310 байтовЭто можно сделать на Шадертой .
Вы можете использовать симметрию на изображении, чтобы нарисовать его с меньшим количеством отдельных фигур.
Вот несколько завышенная версия:
(спасибо @Kevin Cruijssen за удаление ненужных пробелов)
источник
H(y) sqrt
→H(y)sqrt
; все пробелы в ваших операторах if:if (
→if(
; и те в вашем последнем if-утверждении, окружающем AND:if (R>.10 && R<.135 && S<.095)c=1.;
→if(R>.10&&R<.135&&S<.095)c=1.;
.HTML / JS,
448 435 433387 байтСохранено много байтов с помощью предварительно свернутой версии SVG @ Neil.
Сохранено 2 байта благодаря @Shaggy
Сжатая версия этого SVG-файла из Wikimedia Commons.
Попробуйте онлайн! (просто выводит распакованную строку)
Демонстрационный фрагмент
Показать фрагмент кода
источник
Haskell ,
530491436435430420 байтовВыводит файл PBM.
Это было очень весело!
(Я должен был преобразовать это в PNG, чтобы загрузить в imgur)
По сути, мы создаем наши собственные функции векторной графики, которые визуализируют изображение пиксель за пикселем, определяя, является ли пиксель частью фигуры. Форма построена в виде группы кругов и линий (исходящих из источника), соединенных с основными операциями над множествами: объединение, пересечение и нет. Круги состоят из их центра и радиуса, а линии имеют минимальный радиус, ширину и угол в этом порядке. Обнаружить членство в круге легко: я просто вычитаю координаты центра и сравниваю величину с радиусом. Линия немного сложнее: я поворачиваю точку на противоположный угол, чтобы привести ее (чтобы свести на нет поворот), а затем просто проверяю, попадают ли координаты x и y в ожидаемый диапазон. Минимальный радиус должен обеспечивать, чтобы больший зазор на дальних концах больших кругов не перекрывал маленькие зазоры вблизи центра. После этого просто установить булеву логику для установки математики.
РЕДАКТИРОВАТЬ: Большое спасибо @flawr за удаление 39 байтов!
EDIT2: Большое спасибо @Christian Sievers за удаление 55 байтов! Хорошая идея превратить их в функции
EDIT3: Еще раз спасибо @Christian Sievers за то, что сбрил еще один байт!
РЕДАКТИРОВАТЬ 4: Удалил 7 байтов благодаря @ H.PWiz и @Angs!
EDIT5: только что заметил ошибку! Я рендерил линии в два раза толще, чем они должны были быть! Чтобы исправить это, мне понадобилось 2 байта (пришлось разделить ширину на 2; мог бы скорректировать постоянные значения, но изменение 1 на 0,5 также стоило бы 2).
EDIT6: Спасибо @Angs за удаление еще 10 байтов!
источник
[-90,-210,-330]
? И это было бы возможно изменить<=
до<
?Рубин , 278 байт
Попробуйте онлайн!
Создает приведенный ниже код SVG с символом 200% шкалы в OP.
Он состоит из круга сзади и зубцов на переднем плане. Зубец масштабируется
-1,0,1
поX
оси и поворачивается на кратные 120 градусов. Случаи, когдаX
масштабирование равно нулю, не выводят, а-1
и+1
. предоставьте две стороны каждой пары зубцов.Использование сделано из широкой белой каймы 2 блока вокруг зубца отрезать заднюю окружность, используя
stroke
иstroke-width
атрибуты. Чтобы внутренняя форма соответствовала ОП, координаты перемещаются на 1 единицу (на половину ширины границы.) Обратите внимание, что путь намеренно не закрыт, чтобы подавить рисование последней линии границы. Это обеспечивает объединение двух половинок каждой пары зубцов.90 градусов внутреннего круга нарисованы, а не ожидаемые 60, по соображениям игры в гольф. Это означает, что между основаниями каждой пары зубцов есть некоторое перекрытие, но это не влияет на внешний вид выходной формы.
источник
PostScript ,
367359328271 байтКод (сжатая версия):
Код (несжатый вариант):
Результат (как анимация, чтобы увидеть, как он нарисован):
источник
Python 3 с pygame,
327 314 287278 байт(Применены различные мерзкие хаки для сохранения 13 байт; в первую очередь больше не хранится цвет, а вычисляется его на лету
-(r>25)
)(Рефакторинг для функции, потеря
sys
; взломанmath
в пользу констант координат; небольшие изменения; сохранены 27 байтов)(Переписана координата) константы для сложных математических трюков, чтобы получить (со) синус , экономя 9 байтов)
Функция, которая принимает один целочисленный аргумент, представляющий половину ширины / высоты результирующего изображения. Например
f(500)
, создаст окно размером 1000x1000 пикселей и нарисует там символ биологической опасности.Несокращенная версия:
Ключом к этой программе является в основном использование симметрии символа с 3 точками и как можно более редкое выражение операций рисования. Сердцем всего
circles
этого является список определений кругов, состоящий только из:position
: как далеко от начала отсчета в половине основных единицradius
: радиус круга в половине основных единицwidth
: ширина границы круга (внутрь от внешнего круга, 0 = заполнить)color
: используя тот факт, что Pygame интерпретирует0
как черный и-1
как белыйКаждая операция рисования повторяется три раза, повернутая на 120 °. Затупление "когтей" делается с помощью другого круга. Внутренние «линии разрезов» имеют специальный корпус, потому что я не мог придумать более эффективный способ их доставки. «Основная единица» определена в спецификации удваивается здесь , так что я не должен использовать
.5
вcircles
иint()
повсюду , чтобы удовлетворить Pygame.Результат для
python3 -c 'from biohazard import *; f(500)'
:источник
sys
модуля, что сокращает код (см. Правила ). Кроме того, этот трюк может быть применен, чтобы избежать необходимости импортаmath
.math
, я реорганизовал это в список координат; в любом случае их было всего 3. Нет (со) синус необходим.Tcl / Tk - 557 байт
Однако эта версия скучна, поскольку вы получаете одно и то же изображение небольшого размера, несмотря ни на что. Однако он удовлетворяет условиям OP для отображения на экране. Вот несжатая версия с комментариями и возможностью указать размер, добавленный в:
Извините, фотографий нет (работаю сегодня на телефоне). Создает черный символ на биологически опасном оранжевом фоне.
источник