Цель этого кода golf - нарисовать правильный многоугольник (один с равными длинами сторон), учитывая количество сторон и радиус (расстояние от центра до вершины).
- Количество сторон и радиус можно ввести с помощью файла, STDIN или просто старой переменной. Используйте все, что короче на вашем языке.
- -25% от общего количества символов / байтов, если изображение фактически нарисовано вместо ASCII-рисунка.
Ответы:
ЛОГОТИП 37 - 25% = 27,75 (с переменными)
ЛОГОТИП 49 - 25% = 36,75 (как функция)
Треугольник
Вызывается с переменными
Используется как функция
P 100 3
Площадь
Вызывается с переменными
Используется как функция
P 100 4
пятиугольник
Вызывается с переменными
Используется как функция
P 100 5
декагон
Вызывается с переменными
Используется как функция
P 100 10
Круг
Вызывается с переменными
Используется как функция
P 100 360
источник
Mathematica, 40 - 25% = 30
источник
Graphics
.Graphics@RegularPolygon
не разрешено?Java 8:
533322 - 25% = 241,5Ну, это Java: / Просто рисует линии, указывает на точку. Должен работать для любого многоугольника произвольного размера. Сократите это немного от оригинального размера. Огромная благодарность Вулкану (в комментариях) за урок гольфа.
Разрывы строк:
Ввод аргументов [радиус] [стороны]:
Выход:
источник
java.awt.image.*
вместо нихjava.awt.image.BufferedImage
Short.valueOf
вместо того,Integer.valueOf
чтобы сохранить четыре байта, так как ввод никогда не должен превышать диапазон коротких замыканий. 2)y[]=x.clone()
сохраняет один байтy[]=new int[s]
. 3) Используйте устаревшийf.show();
вместо того,f.setVisible(1>0);
чтобы сохранить дополнительно девять байтов. 4) Используйте6.28
вместоMath.PI*2
, так как оценка достаточно точна для этой цели, сохраняя три байта. 5) ОбъявлятьGraphics g
вместо того, чтобыGraphics2D g
при создании графического экземпляра сохранить два байта.BufferedImage
и всеGraphics
вместе и просто бросая всеpaint()
). Это действительно изменило цвет изображения, хотя все еще выглядит хорошо IMO. Спасибо, что заставили меня еще раз взглянуть на это :)Frame
локальную переменную, удаливd
целое число и использовав / использовав цикл for для сохранения нескольких символов, в основном точек с запятой. Вот версия с пробелами .drawPolygon
вместоdrawLine
. Пробельная версия .TeX / TikZ (60 - 80,25)
Файл
polygon.tex
:(80 байт)
Радиус и количество сторон указываются в виде переменных / макросов
\r
и\n
. Любая единица TeX может быть дана для радиуса. Без единицы используется единица по умолчаниюcm
. Примеры:(16 байтов без значений)
Если номер страницы должен быть подавлен, то это может быть сделано
(11 байт)
Примеры для создания файлов PDF:
Гол:
Не понятно, для чего нужен счет. Диапазон для оценки будет:
Базовый код составляет 80 байтов минус 25% = 60
Или все включено (определения входных переменных, без номера страницы): (80 + 16 + 11) минус 25% = 80,25
Если соединение между первой и последней точкой не должно быть гладким, то
--cycle
можно удалить, сохранив 7 байтов.источник
GeoGebra , 42 - 25% = 31,5 байта
Если вы посчитаете в символах вместо байтов, это будет 41 - 25% = 30,75 символов.
(То есть, если вы считаете геогебру языком ...)
Предполагается, что радиус хранится в переменной,
r
а количество сторон хранится в переменнойs
.Здесь используется теорема косинуса c 2 = a 2 + b 2 - 2 ab cos C для расчета длины стороны по заданному радиусу.
Пример вывода для
s
= 7,r
= 5источник
C:
229180(r - радиус окружности)
Пожалуйста, запустите в терминале ANSI
Редактировать:
компиляции:
источник
#include
s. Кроме того, вы можете объявитьv
как глобальный снаружиmain
, и объявитьu
как параметрmain
, то вам не нужноint
(то естьv;main(u){//...
). Наконец, вы можете изменить последнийfor
цикл наfor(j=0;j<s;)/*...*/x=j++-s/2.,//...
C 359 символов
Моя первая попытка игры в гольф. По крайней мере, это лучше, чем решение Java ;-)
ungolfed:
И это единственная программа, которая выводит многоугольник в ASCII вместо его рисования. Из-за этого и некоторых проблем с округлением с плавающей точкой выходные данные выглядят не особенно красиво (символы ASCII не так высоки, как широкие).
источник
int
может быть удален, поскольку предполагается, что онint
составлен компилятором. Кроме того, последнийfor
цикл может быть изменен наfor(j=0;j<r;){x=p+u*j;y=q+z*j++;//...
if(i<0)
Может быть измененif(i)
. Который все еще нужен только в одной итерации, но не смог найти эффективный способ егоMathematica, 54 * 75% = 40,5
Я даже не думаю, что есть смысл для негольфированной версии. Это будет содержать только больше пробелов.
Ожидается радиус в переменной
r
и количество сторон в переменнойn
. Радиус немного бессмысленный без отображения осей, потому что Mathematica масштабирует все изображения, чтобы соответствовать.Пример использования:
источник
Graphics@Polygon@Array[r{Sin@#,Cos@#}&,n+1,{0,2π}]
Array
.HTML / JavaScript:
215 - 25% = 161,25, 212 - 25% = 159Безголовая версия:
источник
i=S=5;
иfor(;i-->0;)
.i-->0
роль? Это так же, какi-- > 0
. Некоторые люди также называют это оператором стрелки или операторомc=document.currentScript.parentNode;
и замену<canvas>
на<canvas id="c">
Постскриптум 156 - 25% = 117
Передайте радиус, число сторон и центральную точку в командной строке
или приписать к источнику
Перевести в центр, масштабировать до радиуса, перейти к (1,0); затем повторите n раз: поверните на 360 / n, проведите линию до (1,0); нарисовать последнюю линию, обвести и испустить страницу.
источник
Шалфей , 44 - 25% = 33
Предполагается, что количество сторон хранится в
s
переменной, а радиус - вr
переменной.Пример вывода:
s
= 5,r
= 3s
= 5,r
= 6s
= 12,r
= 5источник
regular_polygon
функция всегда генерирует полигоны с первой вершиной в точке (0,1). Исправление будет состоять в том, чтобы не отображать оси с дополнительными 7 байтами (,axes=0
послеfigsize=r
)bc + ImageMagick + xview + bash, 104,25 (139 байт - 25%)
Эта задача была бы неполной без ответа ImageMagick ...
Например,
./polygon.sh 8 100
выдает это изображение:источник
JavaScript 584 (867 без золота)
Этот код использует N сложных корней единицы и переводит углы в точки X, Y. Затем происхождение перемещается в центр холста.
Golfed
Пример вывода:
Ungolfed
Для этого кода требуется элемент холста HTML5, c - объект холста, r - радиус, а n - количество сторон.
источник
PHP 140 - 25% = 105
Предполагается две предопределенные переменные:
$p
количество точек и$r
радиус в пикселях. В качестве альтернативы, можно добавитьlist(,$r,$p)=$argv;
и использовать аргументы командной строки вместо этого. Вывод будет png, который должен быть передан в файл.Выход
$r=100; $p=5;
$r=100; $p=6;
$r=100; $p=7;
$r=100; $p=50;
источник
TI-80 BASIC, 25 байтов - 25% = 18,75
Предполагается, что все настройки установлены на значения по умолчанию. Запустите программу как
5:PRGM_POLYGON
(для пятиугольника)Это работает, рисуя круг с очень небольшим количеством шагов. Например, пятиугольник будет иметь шаги 2/5 радиан.
Параметры окна достаточно хороши по умолчанию, и
TMIN
иTMAX
устанавливаются0
и2π
, поэтому все , что нам нужно изменить этоTSTEP
.источник
SmileBASIC 3,
183159 - 25% = 119,25 байтБерет стороны и радиус от
INPUT
, вычисляет и сохраняет точки, а затем рисует их с помощьюGLINE
.Я чувствую, что это может быть короче, но это как 1 час ночи, что угодно.Предполагается чистое и стандартное отображение env, поэтому вам может понадобитьсяACLS
при запуске его из DIRECT.источник
OpenSCAD: 31 минус 25% = 23,25
Первый пост здесь! Я знаю, что опаздываю на вечеринку, но этот вопрос показался мне таким же хорошим, как и любой другой. Звоните используя
p(n,r)
.источник
ActionScript 1, Flash Player 6: 92 - 25% = 69
источник
C # в LINQPAD
Благодарность за математическую часть достается Geobits (надеюсь, вы не против!) С ответом Java. Я безнадежен в математике :)
Я сделал это в LINQPAD, поскольку у него есть встроенное окно вывода. По сути, вы можете перетащить в него следующее, и он нарисует многоугольник. Просто переключите его на «C # Program» и импортируйте библиотеку System.Drawing в свойства запроса.
источник
Matlab 58 байт - 25% = 43,5
Не видел решения Matlab, так что вот одно довольно простое:
Вы можете сбрить некоторые байты, если r и n уже находятся в рабочей области.
Пример вызова:
источник
Python 2, 222 байта
Проверяет, находится ли пиксель на внутренней стороне всех гиперплоскостей (линий) многоугольника. Радиус затронут, потому что на самом деле используется апотема.
источник
Mathematica 27 (= 36 - 25%)
Когда мы отправляем код Mathematica, мы часто забываем о новых функциях, которые продолжают встраиваться в язык, а текущий словарь языка насчитывает около 5000 основных функций . Большой и расширяющийся словарный запас языка, кстати, весьма удобен для игры в гольф. CirclePoints были введены в текущей версии 11.X. Конкретный пример 7-стороннего радиуса 5:
Также вам просто нужно ввести параметр угла, чтобы контролировать ориентацию полигона:
источник
Python 2, 74 байта - 25% = 55,5
Ввод в переменных
r,n
. Если бы он был включен в подсчет, он был быr,n=input()
на 12 байт больше.Попробуйте онлайн - (использует другой код, поскольку
exec
он не реализован в онлайн-переводчике)источник
SmileBASIC,
8575 - 25% = 56,25 байтПеременные S и R используются для ввода.
Разъяснение:
Стороны нарисованы с использованием цвета
-I
, который обычно близок к -1 (& HFFFFFFFF белый) (за исключением случаев, когдаI
0, когда он прозрачный).Вы также можете нарисовать заполненный многоугольник, используя
GTRI N,M,X,Y,R,R,-I
вместоGLINE...
источник
Тикз, 199 байт
Это решение использует библиотеку tikz
shapes.geometric
.Вот как выглядит многоугольник со
5
сторонами и радиусом8in
при просмотре в evince .источник