Новый бонус! (См. ниже)
У команды картографов кандидата в президенты США от республиканцев Бена Карсона есть проблемы с их картами (изображение через Washington Post ):
Проблема в том, что у них нет подходящего инструмента для работы ™. Им нужна самая компактная и надежная из возможных программ, поэтому им больше не придется беспокоиться о создании карт. Вот почему они наняли тебя. Вам нужно взять эту карту и снова вывести ее с желаемой раскраской:
Theshibboleth [GFDL ( http://www.gnu.org/copyleft/fdl.html ) или CC-BY-SA-3.0 ( http://creativecommons.org/licenses/by-sa/3.0/)] , через Wikimedia Commons
Если вы не знаете, где находятся все штаты (потому что вы не американец ... или вы американец), вот карта со всеми названиями (Вашингтон не требуется для этого вызова):
"Карта США с названиями штатов 2". Лицензировано в CC BY-SA 3.0 через Wikimedia Commons - https://commons.wikimedia.org/wiki/File:Map_of_USA_with_state_names_2.svg#/media/File:Map_of_USA_with_state_names_2.svg
Например, если ввод Ohio, Indiana, Illinois;New York, New Jersey, Florida
, вы выводите:
Пустое изображение карты доступно в форматах SVG и PNG . Для вашего удобства вот список всех 50 штатов в алфавитном порядке
Это код-гольф и проблема с графическим выводом . Вывод должен быть в виде SVG или файла изображения. Простого отображения результатов на экране недостаточно. Ввод должен быть взят из STDIN или путем чтения текстового файла. Я гибко отношусь к тому, как вы форматируете ввод, хотя он должен содержать полные имена каждого штата, с красными (республиканскими) штатами, перечисленными первым, и синими (демократическими) штатами после. Любые два различных оттенка красного и синего цвета приемлемы для окраски. Конечно, вы можете иметь пустое изображение карты в той же папке, что и ваша программа, с любым именем файла.
Критерии точности
Если ваш выходной файл представляет собой растровый файл, он должен иметь размер не менее 800 на 495 пикселей, а строки не должны отклоняться от результата увеличения SVG до того же размера более чем на 1,5 пикселя. Если ваши выходные данные являются векторным файлом, строки не должны отклоняться от SVG более чем на 1,5 пикселя, когда оба масштабируются до 800px на 495px.
Бонус!
Бен пытается уменьшить зависимость от иностранных библиотек, и теперь предлагает -50% бонус всем, кто использует только версию карты с растровой графикой в качестве входных данных и создает свой собственный алгоритм для обнаружения региона. В конечном счете, именно мое суждение определяет, считается ли ваш подход «написанием собственного» алгоритма.
Удачи!
Ответы:
Python 626
В подходе ниже я добавил .rstate и .bstate на основе .state в описании CSS. По моему я переименовал предоставленный файл .svg в
v.svg
. Он принимает входные данные, как описано ниже, и записывает в файлw.png
. Чтобы перейти от полного названия штата к сокращенной версии, я просматриваю их на основе первых и последних двух букв состояний.Пример ввода:
Пример вывода:
Или вдохновленный флагом Франции:
источник
Обработка, 425 байт (259 байт + 1 + 165 байт файла)
Код:
Пустая карта должна называться « M.svg » и храниться в папке с именем / data (все остальные файлы находятся в той же папке, что и программа.)
Входной файл (« а »):
Ключевой файл (" b "): http://pastebin.com/0pNufAH9
Выход (" m.tif "):
Хорошо, вот моя попытка в моем собственном испытании. Некоторые заметки:
Если у кого-то есть какие-либо расхождения с моим самооценкой моего кода, не стесняйтесь оставлять комментарии.
Также, если кому-то интересно попробовать эту задачу в Processing , он поддерживает как чтение файлов SVG в файлы
PShape
, так и анализ файлов SVG в формате XML.источник
for(int i=0;i++<51;)
вместоfor(int i=0;i<51;i++)
. Это экономит 1 байт, и у него есть смайлик;)++i
чтобы это работало. Это звучит правильно?String[] a
PHP, 714 байт
Выходными данными является пустой файл SVG, который должен храниться в файле с именем
a
, с дополнительным CSS для раскраски состояний, который должен храниться в файле с именемb
в следующем формате:Я добавил несколько новых строк для удобства чтения.
Вот негольфированная версия:
Принцип прост: в пустом SVG каждый путь имеет идентификатор, соответствующий сокращению штата, который он представляет (например,
<path d="…" id="HI" />
для Гавайев).Все, что нам нужно сделать, это добавить немного CSS, чтобы раскрасить этот путь в соответствующий оттенок. Но в пустом файле уже есть некоторый CSS (в частности,
<style type="text/css">…</style>
тег уже существует), так что это действительно легко и быстро сделать. Мы можем заметить, что строка.b
находится только в CSS для.border
. Хорошие новости! Мы просто заменим.b
наOUR_WONDERFUL_CSS.b
.Создание «нашего замечательного CSS» на самом деле не сложнее:
Ohio0Indiana0Illinois1New York0New Jersey0Florida
.OH0IN0IL1NY0NJ0FL
.0
символы с,#
:OH,#IN,#IL1NY,#NJ,#FL
.1
символ с{fill:red}#
:OH,#IN,#IL{fill:red}#NY,#NJ,#FL
.#
в начале и{fill:blue}
в конце:#OH,#IN,#IL{fill:red}#NY,#NJ,#FL{fill:blue}
.источник
implode
и ваше имя пользователя!Mathematica 1025
Не элегантно, но это работает.
Я не знал, что у файлов SVG есть пути для каждого состояния, поэтому я нашел состояния, использующие,
MorphologicalComponents
а затем связал каждый компонент с соответствующим состоянием. Такие штаты, как Мичиган (с верхним и нижним полуостровами) и Гавайи (несколько островов), имеют более одного компонента.Код предполагает, что файл карты содержится в переменной m .
Ниже приведено изображение, которое будет экспортировано с помощью следующего ввода:
источник