Нарисуйте линии между каждой парой отдельных точек для n
точек, расположенных по кругу, получая что-то вроде приведенного ниже результата. Самый короткий код (в байтах) побеждает! Ваши линии не должны быть прозрачными, но так выглядит лучше. Выходные данные должны быть векторной графикой или изображением размером не менее 600 на 600 пикселей (либо сохраненным в файле, либо отображенным на экране). Чтобы выполнить вызов, вы должны нарисовать не менее 20.
code-golf
kolmogorov-complexity
graphical-output
Х. Антонио Перес
источник
источник
n
и нарисовать линии дляn
очков.n
добавит много проблем, так как я ожидаю, что большинство решений в любом случае будет работать с любым числом, особенно потому, что 37 нечетно и, следовательно, зеркальных симметрий нет.n
качестве входных данных или просто выбираем произвольноn
более 20?Ответы:
Mathematica, 13 байт
Похоже, что это не дает только круговое вложение
n=4
, но вопрос гласитn>=20
источник
n
(у меня был готов ответ из фиксированного 37) :(MATL ,
1614 байтовПоскольку я не очень хорошо владею MATL, я ожидаю, что это несколько более пригодно для игры в гольф. (Было бы неплохо, по крайней мере, победить Mathematica :-) Т.е. бросок
w
не оптимален, его, вероятно, можно было бы избежать ...Проверьте это онлайн! (Спасибо @Suever за этот сервис, спасибо @DrMcMoylex за -2 байта.)
Объяснение (для
N=3
):Стоит отметить, что для генерации N-го корня единства можно использовать формулу
exp(2*pi*i*k/N)
дляk=1,2,3,...,N
. Но так какexp(pi*i/2) = i
вы могли бы также написать,i^(4*k/N)
дляk=1,2,3,...,N
чего я здесь и делаю.источник
XH:H
на:G
G
большое спасибо!PICO-8 , 131 байт
Я не был уверен, нарушу ли я какие-либо правила, но все равно сделал это!
Golfed
Ungolfed
PICO-8 - это фэнтезийная консоль на основе Lua с собственным разрешением 128x128. Я сделал круг настолько большим, насколько мог ...
источник
Mathematica, 42 байта
Создает набор из 37 точек, расположенных по кругу, а затем рисует линии между всеми возможными подмножествами двух точек. Кто-то опубликовал более короткий ответ, который использует CompleteGraph, но я считаю, что это самый короткий ответ, кроме тех, которые полагаются на CompleteGraph.
источник
Tuple
. Вы также должны обновить это, чтобы принять произвольныеn
, но удобно, что это не будет стоить вам никаких байтов.Tuples
HTML + JS (ES6), 34 +
177164162 = 196 байтИспользование HTML5 Canvas API .
Смотрите это на CodePen .
-13 байт : удалено
closePath()
, перемещеноstroke()
внутрьbeginPath()
-2 байта : определенная переменная
a
внутриrotate()
источник
Ява,
346338322301 байтЭто решение работает для всех
n>1
, хотя оригинальная публикация этого не требует, оно делает.Мой любимый
n=5
, не спрашивайте, почему, также, если вы хотите кулер GUI, используйте:int a=Math.min(this.getHeight(),this.getWidth())/2;
Вместо жестко закодированных 300 он будет использовать ширину или высоту рамки в качестве диаметра.
Сохранено 8 байтов благодаря Shooqie. Сохранено 21 байт благодаря Geobits.
Выход для
n=37
:источник
Frame x=
иfinal
(я думаю?)Frame x
было из другого решения, которое включало поток. Вам нужен финал, хотя это внутренняя ссылка на класс на внешнюю переменную в классе-владельце.int
объявления внеfor
цикловPython 2,
258235229 байтВыход для
n=37
источник
from PIL import*
короче?import *
, в зависимости от того, как вы устанавливаете, вы можете пропустить PIL и импортировать Image / ImageDraw напрямуюОктава,
8869 байтВыход для
N=37
:Выход для
N=19
:источник
gplot
слишком, но мне не удалось сделать ее достаточно короткой ...Perl, 229 байт
Он использует ту же формулу, что и большинство языков, которые не имеют удобной встроенной функции для этой задачи (даже если я не смотрел на них, чтобы найти ее, но это довольно легко найти формулу). Так что не очень интересно, но Perl обычно не так много ответов на такие вызовы, поэтому я просто хотел предложить один.
И вам понадобится
-MImager
(9 байт),-MMath::Trig
(при условииpi
, 13 байт) и-n
(1 байт) ==> + 23 байт.Чтобы запустить это:
Это создаст файл с именем,
t.png
который содержит изображение.Вам нужно будет установить
Imager
, но не беспокойтесь, это довольно просто:(
echo
S настроит ваш cpan, если вы никогда не использовали его раньше (на самом деле это будет работать только в том случае, если ваш perl достаточно свежий, я думаю, что для большинства из вас это будет, и я извиняюсь за других!)) ,И более читаемая версия (да, она вполне читаема для сценария Perl!):
-1 байт благодаря Титу.
источник
for
циклов, то да, они обязательны.y2
. Бьюсь об заклад, вам это не нужно. А ты можешь написать в STDOUT?GeoGebra , 92 байта
Каждая строка отдельно вводится в строку ввода. Вот рисунок, показывающий исполнение:
Как это работает
Команда
polygon
создает 20-сторонний многоугольник с вершинами базовой линии в(0,0)
и(1,0)
. Следующая команда затем перебирает каждую вершину многоугольника с индексомi
, используяsequence
иvertex
команды, и для каждой вершины с индексомi
, рисует отрезок каждую другой вершины с индексом ,j
используяsegment
команду.источник
PHP,
186184196 байтзаписывает изображение в STDOUT
сломать
-12 байт для фиксированной
n=20
Заменить
$p=2*M_PI
на6
(-8),/=$argv[1]
на=M_PI/10
(-2) и$b>0
на$b
(-2)Использование точного PI / 10 не повредит. При
.3142
этом ошибки округления из параметризованной версии остались, ноM_PI/10
они исчезли, и я могу проверить$b
(<> 0) вместо$b>0
. Я мог бы сохранить два байта с помощью.314
, но это сместило бы точки.Предел
$a<6
достаточно точен для 20 баллов.174 байта для фиксированной
n=314
Использование 314 точек приводит к заполнению круга в этом разрешении (как и 136 140, каждое четное число выше этого и все выше 317).
источник
NetLogo - 44 байта
источник
R,
127123 байтаПроизводит:
Хорошие метки оси, а?
-4 байта благодаря @Titus!
источник
for(i in 2:n){for(j in 1:i)...}
. Требуются лиR
брекеты?BBC BASIC, 98 символов ascii
Токенизированный размер файла 86 байт
Скачать переводчик на http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
Там нет ничего плохого в рисовании каждой линии дважды, внешний вид идентичен :-P
Ungolfed
Выход n = 21
Это выглядит намного лучше в оригинальном рендеринге, чем в браузере.
источник
LINE
функции. BeatsDRAW
...Октава,
50 48 4645 байтЭто произвольная функция, которая строит график, который мы ищем.
Объяснение:
(k=0:2*pi/N:N)+k'
Создает полнуюN+1 x N+1
матрицу приличия и одновременно определяет векторk
углов, для которого мы затем[cos(k);sin(k)]'
используем матрицу координат, в которой расположен каждый узел графа.gplot
просто строит график, который мы хотим.Ибо
N = 29
мы получаем:источник
JavaScript (ES5) / SVG (HTML5), 181 байт
Работает только для простых чисел, таких как исходное предложение 37. Вы можете вдвое (округлить) начальное значение,
i
чтобы получить более тусклое изображение. Вы также можете последовательно настроить1e3,2e3
другие значения по вкусу (я начал с того,300,600
что решил, что он слишком грубый).источник
MATLAB, 36 байт
Это аномальная функция, которая создает сюжет.
Пример:
источник
graph
что не являюсь частью биоинформационного инструментария ... даже не знал, что он существует ... Здорово :)QBasic 4.5,
398271 байтЭкран в QBasic может быть только 640x480, поэтому радиус круга, к сожалению, составляет всего 230 пикселей. Кроме того, есть некоторые артефакты из-за потери точности с плавающей точкой на int. Похоже это для
N=36
:РЕДАКТИРОВАТЬ: мне не нужно хранилище, объявление типа и все циклы. Подсчет всех карф из поляр на месте на 50% дешевле в подсчете байтов ...
источник
QBIC ,
9894 байтаЯ преобразовал
свой исходный ответ QBasic@LevelRiverSt в QBIC. Я думал, что это будет слишком сильно зависеть от функций, которые не встроены в QBIC, чтобы быть осуществимыми, но, как оказалось, он экономит еще 90 байтов. ПодстановкаDRAW
для forLINE
сохраняет еще 80 байтов. Я знал, что забыл что-то простое ...При запуске с параметром командной строки 36, это выглядит так:
источник
Обработка, 274 байта (239 +
size
вызов и вызов функции)Я, честно говоря, не знаю почему, но
setup
должен был быть на второй линии. Я использовал https://en.wikipedia.org/wiki/Rotation_matrix чтобы помочь мне вычислить математику для вращения. Эта программа вычисляет точки и помещает их в массив, с помощью которого мы рисуем линии.Вот изображение многоугольника с 50 ребрами (один из 100 ребер был почти полностью черным)
Вы можете добавить,
stroke(0,alpha);
чтобы иметь прозрачные края, гдеalpha
непрозрачность линии. Вот тот же многоугольник сalpha
оф20
.источник
Bash + Jelly + GraphViz, 52 символа, 52 или 63 байта
Учитывая, что рассматриваемые программы не согласны с тем, какую кодировку символов использовать, программа полна контрольных символов. Вот как это выглядит
xxd
в кодировке Latin-1 (которая представляет каждый символ одним байтом):Однако я не мог заставить программу работать, не преобразовав входные данные в UTF-8 по какой-то причине (что сделало бы ее длиной 63 байта). По логике это должно работать как Latin-1 - ни один из символов не выходит за пределы диапазона от 0 до 255 - но я продолжаю получать ошибки «строковый индекс вне диапазона» независимо от того, как я настраиваю переменные среды кодирования символов. Так что это будет считаться 63 байтами, если кто-то не сможет найти способ запустить его без перекодирования.
Программа может быть немного более читабельной, если мы интерпретируем ее в кодировке Jelly:
Программа берет количество точек на стандартном вводе и выводит изображение PostScript на стандартном выводе. (Его можно легко адаптировать для вывода в любом формате, поддерживаемом GraphViz, изменив его
-Tps
в конце; просто у PostScript самое короткое имя. Возможно, вы можете сохранить пять символов, удалив-Tps
, но затем вы получите вывод во внутреннем формате изображения GraphViz. что больше ничего не поддерживает, что, вероятно, не имеет значения для целей вопроса.)По сути, это просто программа Jelly, которая вызывает GraphViz для рисования; однако, у Jelly, похоже, нет никаких возможностей для запуска внешних программ, поэтому мне пришлось использовать bash, чтобы связать их вместе. (Это также означает, что дешевле делать Jelly-запрос ввода от stdin вручную; обычно это требует ввода из командной строки, но это будет означать дополнительные байты в оболочке bash.)
circo
Автоматически упорядочит все точки, которые его просят нарисовать, в круг поэтому код Jelly просто должен попросить его нарисовать список точек, все из которых связаны друг с другом. Вот как это работает:Использование Jelly позволяет нам немного сжать строку, которая настраивает вывод GraphViz через встроенный словарь. Словарь имеет
graph
,node
иpoint
. Досадно, что он не имеетshape
(он естьSHAPE
, но GraphViz чувствителен к регистру), поэтому мы должны кодировать этот символ за символом.Вот вывод для ввода 21 (с небольшими изменениями в программе, чтобы сделать вывод в формате, который может быть загружен в Stack Exchange):
источник
PHP + HTML SVG,
316263 байтаГольф-версия с жестко закодированными
n
точками и без входныхn
параметров:Предыдущая версия для гольфа с входным параметром для
n
точек, 316 байт:Использование: сохранить в файл и вызвать из браузера:
Развернутая версия с входным параметром для
n
точек и CSS:Не удалось прикрепить полностью функциональный фрагмент из 32 пунктов из-за ограничения в 30 тыс. Символов для одного сообщения. Вот скриншот:
Прикрепленный фрагмент ограничен 18 баллами из-за ограничения в 30 000 для одного поста.
Показать фрагмент кода
источник
R, 108 байт
Можно было бы сбить 5 байтов, если бы я избавился от аргумента,
,as=1
который заставляет соотношение сторон 1. Используетсяexpand.grid
для создания матрицы со всеми возможными парами точек и использует ееapply
для циклического прохождения.R + igraph, 87 байт
Другое решение с использованием пакета
igraph
.источник