Учитывая количество вершин n ≥ 3
и «размер шага» 1 ≤ m < n/2
(указывающий расстояние между двумя соединенными вершинами), выведите графическое представление соответствующей регулярной полиграммы . Если полиграмма состоит из нескольких замкнутых циклов, каждый цикл должен быть представлен другим цветом линии. (Если это звучит странно, примеры, приведенные ниже, должны прояснить ситуацию.)
правила
Любое разумное решение проблемы, скорее всего, будет удовлетворять этим правилам автоматически - они просто налагают некоторые ограничения на параметры вывода, чтобы избежать ответов типа «Этот черный блок является полностью полиграммой, но вы не можете видеть это, потому что Я установил ширину линии более 9000 ".
- Вы можете визуализировать полиграму либо в файл (который может быть записан на диск, либо в стандартный поток вывода), либо отобразить его на экране.
- Вы можете использовать векторную или растровую графику. Если ваш вывод растеризован, ваше изображение должно иметь размеры 400x400 пикселей или более, а радиус полиграма (расстояние от центра до каждой вершины) должен составлять от 35% до 50% длины стороны.
- Соотношение сторон полиграммы должно быть 1 (чтобы вершины лежали на правильном круге) - холст изображения может быть прямоугольным.
- Линии полиграммы должны быть не толще 5% от радиуса (и, конечно, они должны иметь ненулевую толщину, чтобы быть видимыми).
- Вы можете визуализировать оси или рамку в дополнение к полиграмме, но не более того.
- Вы можете выбрать любой (сплошной) цвет фона.
- Для полиграмм, состоящих из нескольких замкнутых циклов, вы должны поддерживать как минимум 6 визуально отличных цветов, каждый из которых должен отличаться от фона. (Серая шкала в порядке, при условии, что оттенки достаточно распределены по спектру.) Ваш код должен по-прежнему работать для более чем 6 циклов, но цвета не должны быть различимы для каких-либо дополнительных циклов (то есть вы также можете использовать повторно цвета из предыдущих циклов в этой точке).
Это код гольф, поэтому самый короткий ответ (в байтах) выигрывает.
Примеры
Вот все выходные данные до n = 16
(где столбец соответствует n
и строка m
):
Нажмите для увеличения версии.
В качестве примеров для большего n
, вот (n, m) = (29, 11)
и (30, 12)
:
источник
Ответы:
MATLAB,
8581Функция отображает график на экране.
Результат для n = 30, m = 12:
источник
hold all
приводит к тому, что следующий график рисуется поверх первого ... Я не знаю, есть ли у нас консенсус относительно возможности повторного использования функций честны.hold on
любом случае следует сохранить байт; если вы добавите четыре байта, он станет многоразовым (clf\n
)hold
.hold all
наclf\nhold on
это, это решит проблему?CJam, 114
Он выводит изображение в формате ASCII PGM.
Вы можете попробовать это онлайн , но вывод довольно длинный. Вы можете изменить
400
и199
на меньшие числа, чтобы уменьшить размер изображения.CJam не имеет понятия изображений, рисунков, линий или форм, поэтому я сгенерировал изображение в квадратной матрице, пиксель за пикселем (одно число, представляющее серый оттенок для каждого пикселя).
Вот как выглядит результат
30 12
:источник
Mathematica, 70 байт
Ну ... это моя эталонная реализация, которая пока превосходит обе заявки. Я не собираюсь выигрывать свои собственные соревнования, поэтому я надеюсь, что кто-то победит.
Вывод похож на графики в самой задаче, за исключением того, что я не убираю оси здесь:
источник