줄 지어 원, n 포인트


39

n원으로 배열 된 점에 대해 구별되는 점 쌍마다 선을 그리면 아래와 같은 결과가 나타납니다. 가장 짧은 코드 (바이트)가 이깁니다! 선이 투명 할 필요는 없지만 그렇게하는 것이 좋습니다. 출력은 벡터 그래픽이거나 600 x 600 픽셀 이상 (파일에 저장되거나 화면에 표시되는) 이미지 여야합니다. 챌린지를 완료하려면 최소한 20을 뽑아야합니다.

여기에 이미지 설명을 입력하십시오


7
숫자를 입력 n하고 n점을 그리 려면 선 이 좋을 것 입니다.
Yodle

2
이 아이디어는 두 번째입니다. 누군가가 첫 번째 답변을 받기 전에 변경하십시오.
shooqie

2
@shooqie 그렇다면 제목을 수정하지 않으면 제목이 이해가되지 않습니까?
Yodle

2
37을 임의의 값으로 변경하면 n어쨌든 대부분의 솔루션이 아무리 많은 숫자와도 작동 할 것으로 예상되므로 특히 37이 홀수이므로 미러 대칭이 없기 때문에 문제가 더 커질 것이라고 생각하지 않습니다 .
Laikoni

3
우리 n는 입력을 받거나 n20 개가 넘는 임의의 것을 선택 합니까?
Rɪᴋᴇʀ

답변:


26

수학, 13 바이트

CompleteGraph

줄 지어 37 포인트

이에 대한 원형 삽입을 제공하지 못하는 것처럼 n=4보이지만 질문에 나와 있습니다.n>=20


1
... 그리고 기능을 수행하는 올바른 방법을 찾으려고 노력했습니다 n(고정 37에서 답을
Jonathan Allan

6
@carusocomputing이 함수는 플로팅의 의미에서 "그 래프팅"과 관련이 없습니다. Mathematica는 또한 그래프 이론 문제에 매우 적합 하며 완전한 그래프를 생성하기 위해 기본 제공되는 기능이 그래프에 대한 지원을 언어로 추가 한 경우 가장 먼저 추가하는 것처럼 보입니다. 이 기능이이 문제에 유용한 유일한 이유는 전체 그래프가 기본적으로 원으로 정렬되어 렌더링되기 때문입니다.
Martin Ender

2
그래프를 지원하려면 완전한 그래프 기능인 IMO가 내장되어있는 것이 좋습니다.
ngenisis

2
@carusocomputing 모든 기존 기능에 내장 된 언어 인 Mathematica에 오신 것을 환영합니다. - P
HyperNeutrino

1
"멀티 거북이가이 작업을 간단하게 수행 할 것"이라고 생각했기 때문에 NetLogo를 다운로드했습니다. 수학자들이 어른 버전을 사용하고 있다는 것을 기억했습니다.
wyldstallyns

13

MATL , 16 14 바이트

MATL에 유창하지 않기 때문에 이것이 다소 골프화 될 것으로 기대합니다. (적어도 Mathematica를이기는 것이 좋을 것입니다 :-) 즉 플립 w이 최적이 아니므로 아마도 피할 수 있습니다 ...

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

온라인으로 테스트하십시오! (이 서비스에 대해 @Suever에게 감사합니다. -2 바이트의 @DrMcMoylex에 감사드립니다.)

설명 (에 대한 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고마워요!
flawr

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

128x128 광기

PICO-8은 기본 해상도가 128x128 인 Lua 기반 판타지 콘솔입니다 . 나는 원을 최대한 크게 만들었습니다.


9

수학, 42 바이트

원으로 배열 된 37 개의 점 세트를 작성한 다음 가능한 두 점의 모든 서브 세트 사이에 선을 그립니다. 누군가가 CompleteGraph를 활용하는 더 짧은 답변을 게시했지만 이것이 CompleteGraph에 의존하는 사람들을 제외하고는 가장 짧은 답변이라고 생각합니다.

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

여기에 이미지 설명을 입력하십시오


3
점에서 자체로 선을 그리는 것을 피할 필요가 없으므로을 사용하여 3 바이트를 절약 할 수 Tuple있습니다. 또한 임의를 허용하도록 업데이트해야 n하지만 바이트 비용이 들지 않습니다.
ngenisis

1
말을 의미Tuples
ngenisis

9

HTML + JS (ES6) 34 + 177 164 162 = 196 바이트

은 Using HTML5 캔버스 API를 .

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

자바 346 338 322 301 바이트

이 솔루션은 n>1원래 게시물이 필요하지 않더라도 모두에 효과적입니다 .

내가 가장 좋아하는 것은 n=5, 왜 더 멋진 GUI를 원한다면 다음을 사용하지 마십시오.

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

하드 코딩 된 300 대신 프레임의 너비 또는 높이를 직경으로 사용합니다.

Shooqie 덕분에 8 바이트가 절약되었습니다. Geobits 덕분에 21 바이트가 절약되었습니다.

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 oops Frame x는 스레드와 관련된 다른 솔루션에서 온 것입니다. 최종 클래스는 소유 클래스의 외부 변수에 대한 내부 클래스 참조이므로 최종 버전이 필요합니다.
Magic Octopus Urn

내 컴퓨터에서 잘 작동합니다. BTW 루프 int외부 로 선언 을 이동하여 바이트를 줄일 수 있다고 생각합니다.for
shooqie

Java 6의 @ shooqie는 컴파일 타임에 "포괄 범위에서 비 최종 로컬 변수 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 2016

@ 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

어쨌든, 나중에 이길 :-)
flawr

마일로! 내 첫 생각도 gplot너무 짧았지만 충분히 짧게 만들지 못했습니다 ...
Stewie Griffin

6

펄, 229 바이트

이 과제에 편리하게 내장되어 있지 않은 대부분의 언어와 동일한 공식을 사용합니다. 별로 흥미롭지는 않지만 일반적으로 이런 종류의 도전에 대한 펄 답변이 많지 않으므로 제안하고 싶었습니다.

$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( pi, 13 바이트 제공 ) 및 -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 스크립트에서는 꽤 읽을 수 있습니다!) :

#!/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");

여기에 이미지 설명을 입력하십시오

Titus 덕분에 -1 바이트.


Perl은 단일 명령에 중괄호가 필요합니까?
Titus

@Titus for루프 후 괄호를 참조하면 필수입니다.
Dada

전에는 공백이 y2있습니다. 난 당신이 필요하지 않습니다 내기. 그리고 STDOUT에 쓸 수 있습니까?
Titus

@Titus 흠, 감사합니다. 나는 내 터미널이 여기에 줄 바꿈을 넣어서 공간을 보지 못했다고 생각합니다.
Dada

5

지오 지브라 , 92 바이트

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

각 줄은 입력 막대에 별도로 입력됩니다. 다음은 실행을 보여주는 gif입니다.

실행

작동 원리

polygon명령은 기준선의 정점이 (0,0)및로 된 20면 다각형을 만듭니다 (1,0). 다음 명령은 인덱스 다각형의 각 꼭지점을 반복 처리 i사용 sequencevertex명령을, 인덱스 각 정점 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_PI6(-8), /=$argv[1]=M_PI/10(-2), 및 $b>0$b(-2)

정확한 PI / 10을 사용해도 문제가되지 않습니다. 를 사용하면 .3142매개 변수가 지정된 버전의 반올림 오류가 남아 있지만 M_PI/10사라져서 $b대신 (<> 0)을 확인할 수 있습니다 $b>0. 로 2 바이트를 절약 할 수 .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을 하드 코딩 한 것 같습니다.
Riking

1
@Riking : 맞습니다. 그러나 매개 변수화에 대한 요구는 없습니다.
Titus


4

R, 127123 바이트

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]))

생산 :

멋진 축 라벨 이요?

@Titus 덕분에 -4 바이트 !


1
짧지는 않지만로 더 빠를 수 있습니다 for(i in 2:n){for(j in 1:i)...}. R중괄호가 필요 합니까 ?
Titus

@Titus 당신이 맞아요! 그리고 거기에는 괄호가 필요 없습니다. 감사 !
Frédéric

3

BBC 기본, 98 ASCII 문자

토큰 화 된 파일 크기 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의 Dowload 인터프리터

모든 선을 두 번 그리는 데 아무런 문제가 없으며 모양이 동일합니다.

언 골프

  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기능 을 상기시켜 주셔서 감사 합니다. Beats 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바이오 인포 매틱스 툴박스의 일부가 아니라는 사실에 놀랐습니다. 심지어 그것이 존재한다는 것을 몰랐습니다 ... Nice :)
Stewie Griffin

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 픽셀에 불과합니다. 또한 float-to-int 정밀도 손실로 인해 아티팩트가 있습니다. 다음과 같이 보입니다 N=36. 여기에 이미지 설명을 입력하십시오

편집 : 스토리지, 형식 선언 및 모든 루핑이 필요하지 않았습니다. Polars에서 모든 카테 시안을 계산하면 바이트 수가 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 대답 QBIC에 @LevelRiverSt의 대답을. 나는 이것이 QBIC에 내장되지 않은 기능에 너무 많이 의존한다고 생각했지만, 결과적으로 90 바이트를 더 절약합니다. DRAWfor를 대체하면 LINE80 바이트가 더 절약됩니다. 나는 간단한 것을 잊고 있다는 것을 알았습니다 ...

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://ko.wikipedia.org/wiki/Rotation_matrix 를 사용 하여 회전 수학 계산을 도와주었습니다. 이 프로그램은 점을 계산하여 선을 그리는 데 사용하는 배열로 푸시합니다.

다음은 가장자리가 50 개인 다각형의 사진입니다 (100 가장자리는 거의 완전히 검은 색임)

50 포인트

선의 불투명도가있는 stroke(0,alpha);곳에 투명 모서리를 추가 하도록 추가 할 수 있습니다 alpha. 와 같은 다각형 alpha20있습니다.

여기에 이미지 설명을 입력하십시오


1

Bash + Jelly + GraphViz, 52 자, 52 또는 63 바이트

문제의 프로그램이 사용할 문자 인코딩에 동의하지 않는 경우 프로그램은 제어 문자로 가득 차 있습니다. 다음 xxd은 라틴 -1 인코딩 (각 바이트를 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

이 프로그램은 표준 입력에서 포인트 수를 가져 와서 표준 출력에서 ​​포스트 스크립트 이미지를 출력합니다. (사소을 변경하여 모든 형식 graphviz를 지원하는 출력에 적용 할 수 있습니다 -Tps확실하게, 당신은을 제거하여 다섯 개 문자를 저장할 수는 포스트 스크립트가 짧은 이름을 가진 뿐이다;. 마지막에 -Tps,하지만 당신은 graphviz를 내부 이미지 형식으로 출력을 얻을 다른 어떤 것도 지원하지 않으며 아마도 질문의 목적으로 계산되지 않습니다.)

기본적으로이 프로그램은 GraphViz를 호출하여 그리기를 수행하는 Jelly 프로그램입니다. 그러나 Jelly는 외부 프로그램을 실행하는 기능이없는 것 같아서 bash를 사용하여 서로 연결해야했습니다. (이것은 또한 stdin에서 수동으로 Jelly 요청을 입력하는 것이 저렴하다는 것을 의미합니다. 일반적으로 명령 줄에서 입력이 필요하지만 bash 래퍼에 여분의 바이트가 필요합니다.) circo원으로 그리도록 요청 된 모든 점을 자동으로 정렬합니다 따라서 젤리 코드는 포인트 목록을 작성하도록 요청하기 만하면됩니다. 모든 포인트는 서로 연결되어 있습니다. 작동 방식은 다음과 같습니다.

Ɠ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에 대한 출력입니다 (스택 교환에 업로드 할 수있는 형식으로 출력하도록 프로그램을 약간 수정 함).

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>

단일 게시물에 대한 30k 자 제한으로 인해 32 점의 기능을 모두 갖춘 스 니펫을 첨부 할 수 없습니다. 스크린 샷은 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

첨부 된 스 니펫은 30k 단일 게시물 제한으로 인해 18 포인트로 제한됩니다.


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]))

,as=1종횡비를 1로 설정하는 인수 를 제거하면 5 바이트를 줄일 수 expand.grid있습니다. 가능한 모든 점 쌍을 가진 행렬을 만드는 데 사용 apply하고 루프를 반복하는 데 사용 합니다.

N = 21

R + igraph, 87 바이트

package를 사용하는 또 다른 솔루션 igraph.

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

N = 21

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.