Вишикуване коло, п очок


39

Намалюйте лінії між кожною парою різних точок для nточок, розташованих по колу, даючи щось на кшталт наведеного нижче результату. Найкоротший код (у байтах) виграє! Ваші лінії не повинні бути прозорими, але це краще виглядає. Вихід повинен бути векторною графікою або бути зображенням не менше 600 пікселів на 600 пікселів (або збереженим у файлі, або відображеним на екрані). Щоб виконати виклик, потрібно намалювати щонайменше 20.

введіть тут опис зображення


7
Було б здорово, якби вам довелося взяти номер nі намалювати лінії для nочок.
Йодл

2
Я вдруге цю ідею. Змініть це, перш ніж хтось отримає першу відповідь.
shooqie

2
@shooqie Тоді заголовок не мав би сенсу, хіба що це можуть редагувати модники?
Йодл

2
Я не думаю, що зміна 37 на довільну nзначною мірою спричинить проблему, оскільки я думаю, що більшість рішень все одно працюватимуть із будь-яким числом, тим більше, що 37 є непарним і, отже, немає дзеркальної симетрії.
Лайконі

3
Ми візьмемо nза вхід чи просто виберемо довільне nпонад 20?
Rɪᴋᴇʀ

Відповіді:


26

Математика, 13 байт

CompleteGraph

вишикуване коло-37 балів

Схоже, це не вдається дати кругової вбудовування n=4, але питання йдетьсяn>=20


1
... і я намагався знайти правильний спосіб зробити функцію прийому n(у мене відповідь була готова з фіксованого 37) :(
Джонатан Аллан

6
@carusocomputing Ця функція не має нічого спільного з "графіком" у сенсі побудови графіків. Mathematica також дуже хороший для проблем із теорією графів, і наявність вбудованого для генерування повного графа здається першим, що я б додав, якби я додав підтримку графіків до своєї мови. Єдина причина, чому ця функція є корисною для цього завдання - це те, що повні графіки за замовчуванням надаються з усіма вершинами, розташованими по колу.
Мартін Ендер

2
Якщо ви будете підтримувати графіки, то краще мати вбудовану функцію графа, IMO.
ngenisis

2
@carusocomputing Ласкаво просимо до Mathematica, мови, яка має вбудовану функцію для всіх існуючих функцій. :-P
HyperNeutrino

1
Я завантажував NetLogo, тому що думав, що "багато черепаха зробить це короткою роботою!" тоді згадали, що ви математики використовують дорослу версію.
wyldstallyns

13

MATL , 16 14 байт

Оскільки я не дуже вільно володію програмою MATL, я вважаю, що це дещо більше гольфу. (Було б добре принаймні обіграти Mathematica :-) Тобто фліп wне є оптимальним, його, можливо, можна було б уникнути ...

:G/4*Jw^2Z^!XG

Перевірте це в Інтернеті! (Дякую @Suever за цю послугу, дякую @DrMcMoylex за -2 байти.)

Пояснення (для N=3):

  :               Generate Range 1:input:       [1,2,3]
   G/             Divide By the first input     [0.333,0.666,1]
     4*           Multiply by 4                 [1.33,2.66,4.0]
       Jw^        i ^ (the result so far)       [-0.49+ 0.86i,-.5-0.86i,1.00]
                  (This results in a list of the n-th roots of unity)
          2Z^     Take the cartesian product with itself (i.e. generate all 2-tuples of those points)
             !XG  Transpose and plot

Варто зазначити, що для генерації 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чого я тут роблю.


1
Ви можете змінитись XH:Hдо:G
DJMcMayhem

1
Ааа, я дуже забув про Gспасибі!
недолік

11

PICO-8 , 131 байт

Я не був дуже впевнений, чи буду порушувати якісь правила, але все одно це зробив!

Гольф

p={}for i=0,19 do add(p,{64+64*cos(i/20),64+64*sin(i/20)})end for x in all(p)do for y in all(p)do line(x[1],x[2],y[1],y[2])end end

Безумовно

points={}

for i=0,19 do 
  x=64+64*cos(i/20)
  y=64+64*sin(i/20)
  add(points,{x,y})
end

for x in all(points) do
  for y in all(points) do
    line(x[1],x[2],y[1],y[2])
  end
end

128х128 божевілля

PICO-8 - це фантазійна консоль на основі Lua з вбудованою роздільною здатністю 128x128. Я зробив коло максимально великим ...


9

Математика, 42 байти

Створює набір з 37 точок, розташованих по колу, а потім малює лінії між усіма можливими підмножинами двох точок. Хтось опублікував більш коротку відповідь, яка використовує перевагу CompleteGraph, але я вважаю, що це найкоротший, окрім тих, хто покладається на CompleteGraph.

Graphics@Line@Subsets[CirclePoints@37,{2}]

введіть тут опис зображення


3
Не потрібно уникати малювання ліній від точки до себе, тому ви можете зберегти 3 байти за допомогою Tuple. Вам також потрібно оновити це, щоб прийняти довільне n, але зручно, що не обійдеться вам ніяких байтів.
ngenisis

1
Tuples
Маю на

9

HTML + JS (ES6), 34 + 177 164 162 = 196 байт

Використання полотна API HTML5 .

Дивіться це на CodePen .

f=n=>{with(Math)with(c.getContext`2d`)for(translate(S=300,S),O=n;O--;)for(rotate(a=PI*2/n),N=n;N--;)beginPath(stroke()),lineTo(0,S),lineTo(sin(a*N)*S,cos(a*N)*S)}


/* Demo */
f(20)
<canvas id=c width=600 height=600>

-13 байт : Видалено closePath(), переміщено stroke()всерединуbeginPath()

-2 байти : визначена змінна aвсерединіrotate()


8

Java, 346 338 322 301 байт

Це рішення працює для всіх n>1, навіть якщо оригінальний пост цього не вимагав, він все-таки є.

Моя улюблена n=5, не запитуйте, чому також, якщо ви хочете більш крутий графічний інтерфейс, використовуйте:

int a=Math.min(this.getHeight(),this.getWidth())/2;

Замість жорстко закодованого 300 він буде використовувати ширину або висоту рами як діаметр.

Збережено 8 байт завдяки Shooqie. Збережено 21 байт завдяки Geobits.

import java.awt.*;void m(final int n){new Frame(){public void paint(Graphics g){Point[]p=new Point[n];int a=300;for(int i=1;i<n+1;i++){p[i-1]=new Point(a+(int)(a*Math.cos(i*2*Math.PI/n)),a+(int)(a*Math.sin(i*2*Math.PI/n)));for(int j=0;j<i;j++){g.drawLine(p[i-1].x,p[i-1].y,p[j].x,p[j].y);}}}}.show();}

Вихід для n=37:

введіть тут опис зображення


Можна кинути Frame x=і final(я думаю?)
shooqie

@shooqie, ой, Frame xбуло з іншого рішення, яке включало нитку. Вам потрібна остаточна, хоча це внутрішня посилання класу на зовнішню змінну класу володіння.
Чарівна урва восьминога

Він працює чудово на моїй машині. BTW Я думаю, що ви можете intfor
обстригнути

@shooqie в Java 6 говорить: "Не можу посилатись на не остаточну локальну змінну n у межах, що додається" під час компіляції.
Magic Octopus Urn

Це працювало для мене на Java 8, але після того, як ви відредагували свій пост, я отримую лише білий екран.
shooqie

7

Пітон 2, 258 235 229 байт

import itertools as T,math as M
from PIL import Image as I,ImageDraw as D
s=300
n=input()
t=2*M.pi/n
o=I.new('RGB',(s*2,)*2)
for x in T.combinations([(s*M.cos(t*i)+s,s*M.sin(t*i)+s)for i in range(n)],2):D.Draw(o).line(x)
o.show()

Вихід для n=37
n = 37


1
Не буде from PIL import*коротше?
Roman Gräf

@ RomanGräf PIL - дивний пакет, ви не можете import *, залежно від способу встановлення, ви можете пропустити PIL та імпортувати Image / ImageDraw безпосередньо
Rod

6

Октава, 88 69 байт

N=input('');t=0:2*pi/N:N;k=nchoosek(1:N,2)';line(cos(t)(k),sin(t)(k))

Вихід для N=37:

введіть тут опис зображення

Вихід для N=19:

введіть тут опис зображення


О, я навіть не помітив, що вже є ще одна відповідь Октави :)
недолік

У всякому разі, бити я :-)
flawr

На милю! Моя перша думка gplotтеж була , але мені не вдалося зробити її досить короткою ...
Стюі Гріффін

6

Perl, 229 байт

Він використовує ту саму формулу, що і більшість мов, які не мають зручного вбудованого рішення для цього завдання (навіть якщо я не дивився на них, щоб знайти його, але це досить легко знайти формулу). Отже, не дуже цікаво, але зазвичай відповіді Perl на подібні виклики не так багато, тому я просто хотів запропонувати його.

$i=new Imager xsize=>700,ysize=>700;for$x(1..$_){for$y(1..$_){$i->line(color=>red,x1=>350+300*cos($a=2*pi*$x/$_),x2=>350+300*cos($b=2*pi*$y/$_),y1=>350+300*sin$a,y2=>350+300*sin$b)}}$i->write(file=>"t.png")

І вам знадобиться -MImager(9 байт), -MMath::Trig(надаючи pi13 байт) і -n(1 байт) ==> + 23 байти.

Щоб запустити його:

perl -MImager -MMath::Trig -ne '$i=new Imager xsize=>700,ysize=>700;for$x(1..$_){for$y(1..$_){$i->line(color=>red,x1=>350+300*cos($a=2*pi*$x/$_),x2=>350+300*cos($b=2*pi*$y/$_),y1=>350+300*sin$a,y2=>350+300*sin$b)}}$i->write(file=>"t.png")' <<< 27

Це створить файл, названий t.pngякий містить зображення.

Вам потрібно буде встановити Imager, але, не хвилюйтесь, це досить просто:

(echo y;echo) | perl -MCPAN -e 'install Imager'

( echoS налаштує вас cpan, якщо ви його ніколи раніше не використовували. (Насправді це буде працювати лише в тому випадку, якщо ваш perl досить недавній, я думаю, для більшості з вас це буде, і мені шкода інших!)) .

І більш читана версія (так, це досить читабельно для сценарію Perl!):

#!/usr/bin/perl -n
use Imager;
use Math::Trig;
$i=Imager->new(xsize=>700,ysize=>700);
for $x (1..$_){
    for $y (1..$_){
    $i->line(color=>red,x1=>350+300*cos($a=2*pi*$x/$_), x2=>350+300*cos($b=2*pi*$y/$_),
         y1=>350+300*sin($a), y2=>350+300*sin($b));
    }
}
$i->write(file=>"t.png");

введіть тут опис зображення

-1 байт завдяки Титу.


Чи потрібні Perl дужки навколо окремих команд?
Тит

@Titus Якщо ви посилаєтесь на дужки після forциклів, то так, вони є обов'язковими.
Дада

Раніше було порожнє y2. Б'юсь об заклад, що вам це не потрібно. А ви можете написати в STDOUT?
Тит

@Titus хм, справді, дякую. Я думаю, що мій термінал поставив сюди новий рядок, щоб я не побачив місця.
Дада

5

GeoGebra , 92 байти

a=polygon((0,0),(1,0),20)
sequence(sequence(segment(vertex(a,i),vertex(a,j)),j,1,20),i,1,20)

Кожен рядок окремо вводиться у рядок введення. Ось подарунок, який показує виконання:

Виконання

Як це працює

polygonКоманда створює 20-кутник з вершинами вихідного рівня в (0,0)і (1,0). Наступна команда потім повторює кожну вершину багатокутника з індексом i, використовуючи команди sequenceі та vertex, і для кожної вершини з індексом iмалює відрізок рядка до кожної іншої вершини з індексом jза допомогою segmentкоманди.


4

PHP, 186 184 196 байт

imagecolorallocate($i=imagecreate(601,601),~0,~0,~0);for(;$a<$p=2*M_PI;)for($b=$a+=$p/=$argv[1];$b>0;)imageline($i,(1+cos($a))*$r=300,$r+$r*sin($a),$r+$r*cos($b-=$p),$r+$r*sin($b),1);imagepng($i);

записує зображення в STDOUT

зламатися

// create image with white background
imagecolorallocate($i=imagecreate(601,601),~0,~0,~0);

// loop angle A from 0 to 2*PI
for(;$a<$p=2*M_PI;)
    // loop angle B from A down to 0
    for($b=$a+=$p/=$argv[1];$b;)    // ($a pre-increment)
        // draw black line from A to B
        imageline($i,                           // draw line
            (1+cos($a))*$r=300,$r+$r*sin($a),   // from A
            $r+$r*cos($b-=$p),$r+$r*sin($b),    // to B ($b pre-decrement)
            1                                   // undefined color=black
        );
// output
imagepng($i);

-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 балів.

точний графік PI

174 байти для фіксованого n=314

imagecolorallocate($i=imagecreate(601,601),~0,~0,~0);for(;$a<314;)for($b=$a++;$b--;)imageline($i,(1+cos($a))*$r=300,$r+$r*sin($a),$r+$r*cos($b),$r+$r*sin($b),1);imagepng($i);

Використання 314 балів призводить до заповнення кола в цій роздільній здатності (як це 136,140, ​​кожне парне число вище цього та все вище 317).


1
Хороша відповідь, але, здається, ви жорстко кодували 20 замість того, щоб брати це як вхід?
Рікінг

1
@Riking: Правда. Але я не бачу жодного попиту в проблемі для його параметризації.
Тит


4

R, 127 123 байт

plot((e=cbind(sin(t<-seq(0,2*pi,l=(n=21)))*2,cos(t)*2)));for(i in 2:n)for(j in 1:i)lines(c(e[i,1],e[j,1]),c(e[i,2],e[j,2]))

Виробляє:

Симпатичні осі "етикетки е?

-4 байти завдяки @Titus!


1
Не коротше, але можна було б і швидше for(i in 2:n){for(j in 1:i)...}. Чи Rпотрібні брекети?
Тит

@Titus Ти маєш рацію! І ні, ніякі брекети там не потрібні. Спасибі !
Фредерік

3

BBC BASIC, 98 символів

Токенізований розмір файлів 86 байт

r=600V.5142;29,r;r;:I.n:t=2*PI/n:F.i=1TOn*n:a=i DIVn*t:b=i MODn*t:L.r*SINa,r*COSa,r*SINb,r*COSb:N.

Інтерпретатор завантаження на веб- сайті http://www.bbcbasic.co.uk/bbcwin/bbcwin.html

Немає нічого поганого в тому, щоб намалювати кожну лінію двічі, зовнішній вигляд однаковий :-P

Безумовно

  r=600                              :REM Radius 600 units. 2 units per pixel, so 300 pixels
  VDU5142;29,r;r;                    :REM Set mode 20 (600 pixels high) and move origin away from screen corner
  INPUTn                             :REM Take input.
  t=2*PI/n                           :REM Step size in radians.
  FORi=1TOn*n                        :REM Iterate through all combinations.
    a=i DIVn*t                       :REM Get two angles a and b
    b=i MODn*t                       :REM by integer division and modlo
    LINEr*SINa,r*COSa,r*SINb,r*COSb  :REM calculate cartesian coordinates and draw line
  NEXT

Вихід n = 21

Це виглядає набагато краще в оригінальній візуалізації, ніж у браузері.

<code> введіть сюди опис зображення </code>


Дякуємо, що нагадали про LINEфункцію. Удари DRAW...
steenbergh

3

Октава, 50 48 46 45 байт

@(N)gplot((k=0:2*pi/N:N)+k',[cos(k);sin(k)]')

Це анонімна функція, яка побудує графік, який ми шукаємо.

Пояснення:

(k=0:2*pi/N:N)+k'N+1 x N+1Складає матрицю повної суміжності та одночасно визначає вектор kкутів, який ми використовуємо тоді [cos(k);sin(k)]', матрицю координат, де розміщується кожен вузол графіка.gplotпросто побудує графік, який ми хочемо.

Бо N = 29ми отримуємо:

введіть тут опис зображення


2

JavaScript (ES5) / SVG (HTML5), 181 байт

document.write('<svg viewBox=-1e3,-1e3,2e3,2e3><path stroke=#000 fill=none d=M1e3,0')
with(Math)for(i=37;--i;)for(j=37;j--;)document.write('L'+1e3*cos(a=i*j*PI*2/37)+','+1e3*sin(a))

Працює лише для простих чисел, таких як оригінальна пропозиція 37. Ви можете вдвічі зменшити (округлити) початкове значення, iщоб отримати слабке зображення. Ви також можете послідовно налаштувати 1e3,2e3інші значення за смаком (я почав з, 300,600але вирішив, що це занадто грубо).


2

MATLAB, 36 байт

@(n)plot(graph(ones(n),'Om'),'La','c')

Це анонімна функція, яка створює сюжет.

@(n)                                     Define an anonymous fuction of 𝘯
               ones(n)                   Create an 𝘯×𝘯 matrix of ones
         graph(       ,'Om')             Create a graph object with that adjacency
                                         matrix, omitting self-loops
    plot(                   ,'La','c')   Plot the graph with a circular layout

Приклад:

введіть тут опис зображення

введіть тут опис зображення


Я здивований, що graphце не частина біоінформатичної панелі інструментів ... навіть не знав, що вона існує ... Приємно :)
Стюі Гріффін

1

QBasic 4.5, 398 271 байт

CLS:SCREEN 11:DEFSTR M-Z:DEFDBL A-L
INPUT"N",A:I=(360/A)*.0175:J=230
Q=",":FOR E=0 TO A
FOR F=E TO A
M=x$(COS(I*E)*J+J):N=x$(SIN(I*E)*J+J):O=x$(COS(I*F)*J+J):P=x$(SIN(I*F)*J+J):DRAW "BM"+M+Q+N+"M"+O+Q+P
NEXT:NEXT
FUNCTION x$(d):x$=LTRIM$(STR$(CINT(d))):END FUNCTION

Екран у QBasic може бути 640x480, тому коло має радіус лише 230 px. Крім того, є деякі артефакти з-за втрати точності поплавця на точку. Виглядає такN=36 : введіть тут опис зображення

EDIT: Мені не потрібно було зберігання, декларації типу та всіх циклів. Підрахунок усіх картезіян із полярів на місці - на 50% дешевший у байті ...


1

QBIC , 98 94 байт

$SCREEN 11|:i=6.3/a j=230[0,a|[b,a|line(cos(b*i)*j+j,sin(b*i)*j+j)-(cos(c*i)*j+j,sin(c*o)*j+j)

Я перетворив свою оригінальну відповідь QBasic @LevelRiverSt у QBIC. Я думав, що це занадто сильно покладається на функції, які не вбудовані в QBIC, щоб бути здійсненними, але, як виявилося, це економить ще 90 байт. Заміна символу " DRAWfor" LINEзаощаджує ще 80 байт. Я знав, що забуваю щось просте ...

При запуску з параметром командного рядка 36 це виглядає приблизно так:

введіть тут опис зображення


1

Обробка, 274 байти (239 + sizeдзвінок та виклик функції)

void d(int s){float a=2*PI/s,x=0,y=-400,m,n;float[][]p=new float[2][s];translate(400,400);for(int i=0;i<s;i++){m=x*cos(a)-y*sin(a);n=x*sin(a)+y*cos(a);x=m;y=n;p[0][i]=x;p[1][i]=y;for(int j=0;j<i;j++)line(p[0][j],p[1][j],p[0][i],p[1][i]);}}
void setup(){size(800,800);d(50);}

Я, чесно кажучи, не знаю чому, але setupповинен був бути на другому рядку. Я використовував https://en.wikipedia.org/wiki/Rotation_matrix щоб допомогти мені обчислити математику для обертання. Ця програма обчислює точки і підштовхує їх до масиву, за допомогою якого ми використовуємо для малювання ліній.

Ось зображення багатокутника з 50 ребрами (100 ребер був майже повністю чорним)

50 балів

Можна додати stroke(0,alpha);прозорі краї, де alphaнепрозорість лінії. Ось той же багатокутник alphaз 20.

введіть тут опис зображення


1

Bash + Jelly + GraphViz, 52 символи, 52 або 63 байти

Зважаючи на те, що програми, про які йдеться, не згодні з тим, яке кодування символів використовувати, програма повна контрольних символів. Ось як це виглядає під xxdкодуванням Latin-1 (яке представляє кожен символ в одному байті):

00000000: 6a65 6c6c 7920 6520 2793 5213 636a 0c8e  jelly e '.R.cj..
00000010: 2d2d 59fe 9a3f 1d15 dc65 34d3 8442 7f05  --Y..?...e4..B..
00000020: 1172 80cf fb3b ff7d 277c 6369 7263 6f20  .r...;.}'|circo 
00000030: 2d54 7073                                -Tps

Насправді я не міг змусити програму запуститись, не перетворивши вхід в UTF-8 з якихось причин (що зробило б її 63 байтами). Логічно це повинно бути працювати як латинська-1 - жоден із символів не перебуває за межами діапазону від 0 до 255, але я продовжую отримувати помилки "рядкового індексу поза діапазоном", незалежно від того, як я налаштовую змінні середовища кодування символів. Таким чином, це доведеться рахувати як 63 байти, якщо хтось не зможе знайти спосіб запустити його без повторного кодування.

Програма може бути трохи читабельнішою, якщо ми інтерпретуємо її в кодуванні Jelly:

jelly e 'ƓRŒcj€⁾--Y“Ȥ?øßṇe4ạ⁴B¶¦×r°Ẇ»;”}'|circo -Tps

Програма приймає кількість точок на стандартному вході та виводить зображення PostScript на стандартний вихід. (Він може тривіально адаптуватися до виводу у будь-якому форматі, що підтримує GraphViz, змінивши -Tpsв кінці; це саме те, що PostScript має найкоротше ім'я. Можливо, ви можете зберегти п'ять символів, видаливши -Tps, але тоді ви отримаєте вихід у внутрішньому форматі зображення GraphViz що нічого іншого не підтримує, що, мабуть, не враховується для цілей питання.)

По суті, це просто програма Jelly, яка закликає GraphViz зробити креслення; однак, схоже, у Jelly немає можливостей для запуску зовнішніх програм, тому мені довелося використовувати bash, щоб з'єднати їх разом. (Це також означає, що дешевше зробити введення запиту Jelly від stdin вручну; зазвичай він приймає введення з командного рядка, але це означатиме додаткові байти в обгортці bash.) circoАвтоматично організує всі точки, які його просять намалювати по колу. , тому код Jelly просто повинен попросити його скласти список точок, всі вони пов'язані один з одним. Ось як це працює:

ƓRŒcj€⁾--Y“Ȥ?øßṇe4ạ⁴B¶¦×r°Ẇ»;”}
Ɠ                               read number from stdin
 R                              produce range from 1 to that number
                                (here used to produce a list with
                                that many distinct elements)
  Œc                            select all unordered pairs from that
      ⁾--                       a string consisting of two hyphens
    j€                          join each pair via the string
         Y                      join on newlines
                            ;   prepend (in this context)
          “Ȥ?øßṇe4ạ⁴B¶¦×r°Ẇ»    "graph{node[shape=point]"
                             ”} follow output with a "}" character

Використання Jelly дозволяє нам трохи стиснути рядок, який налаштовує вихід GraphViz через вбудований словник. Словник має graph, nodeі point. Прикро, що його немає shape(він є SHAPE, але GraphViz чутливий до регістру), тому нам доведеться кодувати цей символ за символом.

Ось висновок для введення 21 (з невеликою модифікацією програми, щоб зробити його вихід у форматі, який можна завантажити в Stack Exchange):

заповнити графік на 21 бал


0

PHP + HTML SVG, 316 263 байт

Гольф-версія з твердо кодованими nочками та відсутніми вхідними nпараметрами:

<svg height="610" width="610"><?for($i=1;$i<33;$i++){$x[]=300*sin(2*M_PI/32*$i)+305;$y[]=300*cos(2*M_PI/32)+305;}foreach($x as$j=>$w){foreach($y as$k=>$z){echo'<line x1="'.$x[$j].'" y1="'.$y[$j].'" x2="'.$x[$k].'" y2="'.$y[$k].'" style="stroke:red;"/>';}}?></svg>

Попередня версія для гольфу з вхідним параметром для nочок, 316 байт:

<svg height="610" width="610"><?$n=$_GET[n];$d=2*M_PI/$n;$r=300;$o=305;for($i=1;$i<=$n;$i++){$x[]=$r*sin($d*$i)+$o;$y[]=$r*cos($d*$i)+$o;}foreach($x as$j=>$w){foreach($y as$k=>$z){echo'<line x1="'.$x[$j].'" y1="'.$y[$j].'" x2="'.$x[$k].'" y2="'.$y[$k].'" style="stroke:rgba(0,0,0,.15);stroke-width:1;" />';}}?></svg>

Використання: збереження у файлі та дзвінок із браузера:

http://localhost/codegolf/circle.php?n=32

Невиконана версія з вхідним параметром для nточок та CSS:

<style>
line {
    stroke: rgba(0,0,0,.15);
    stroke-width:1;
}
</style>
<svg height="610" width="610">
<?php
$n=$_GET[n]; // number of points
$d=2*M_PI/$n; // circle parts
$r=300; // circle radius
$o=305; // offset x,y
for ($i=1;$i<=$n;$i++){
    $x[]=$r*sin($d*$i)+$o; // store x,y coordinates in array
    $y[]=$r*cos($d*$i)+$o;
}
foreach($x as $j => $w){ // iterate all x,y points and connect to each other
    foreach($y as $k => $z) {
        echo '<line x1="'.$x[$j].'" y1="'.$y[$j].'" x2="'.$x[$k].'" y2="'.$y[$k].'" />'."\n";   
    }
}
?>
</svg>

Не вдалося приєднати 32 пункти повністю функціонального фрагмента через обмеження в 30 кб для однієї публікації. Ось скріншот:

введіть тут опис зображення

Прикріплений фрагмент обмежений 18 балами через обмеження 30-разової посади.


0

R, 108 байт

plot(x<-cos(t<-seq(0,2*pi,l=21)),y<-sin(t),as=1);apply(expand.grid(1:21,1:21),1,function(e)lines(x[e],y[e]))

Я міг би відмахнутися на 5 байтів, якщо я позбувся аргументу, ,as=1який змушує співвідношення сторін 1. Використовує expand.gridдля створення матриці з усіма можливими парами точок, і використовує applyдля її перегляду.

N = 21

R + іграф, 87 байт

Ще одне рішення з використанням пакету igraph .

library(igraph);plot(make_full_graph(21),layout=cbind(cos(t<-seq(0,2*pi,l=21)),sin(t)))

N = 21

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.