並んだ円、nポイント


39

n円状に配置されたポイントに対して、明確なポイントのすべてのペアの間に線を引き、次のような結果を生成します。最短コード(バイト単位)が勝ちます!線は透明である必要はありませんが、その方が見栄えが良くなります。出力は、ベクトルグラフィック、または少なくとも600ピクセルx 600ピクセルの画像(ファイルに保存されるか、画面に表示される)でなければなりません。チャレンジを完了するには、少なくとも20を引く必要があります。

ここに画像の説明を入力してください


7
数字nを入力してnポイントに線を引く必要がある場合は、クールです。
ヨドル

2
私はこの考えを再確認します。誰かが最初の答えを得る前に変更してください。
shooqie 16

2
@shooqieそれでは、MODで編集できない限り、タイトルは意味がありませんか?
ヨドル

2
37を任意に変更nしても、特に37が奇数でミラー対称性がないため、ほとんどのソリューションが任意の数で動作すると予想されるため、課題に大きな追加はないと思います。
ライコニ16

3
n入力として取るのnか、それとも20を超える任意のものを選択するのか?
Rɪᴋᴇʀ

回答:


26

Mathematica、13バイト

CompleteGraph

並んだ37点

このように見えるのは、に円形の埋め込みを与えるだけではありませんn=4が、質問は述べていますn>=20


1
...そして、取る関数を作成する正しい方法を見つけようとしnていました(固定37から答えが用意されていました):(
ジョナサンアラン

6
@carusocomputingこの関数は、プロットの意味での「グラフ化」とは関係ありません。Mathematicaはグラフ理論の問題にも非常に優れており、グラフのサポートを言語に追加した場合、完全なグラフを生成する組み込み機能を最初に追加するように思えます。この機能がこの課題に役立つ唯一の理由は、完全なグラフがデフォルトですべての頂点が円形に配置されてレンダリングされることです。
マーティンエンダー

2
グラフをサポートする場合は、組み込みの完全なグラフ機能であるIMOを使用することをお勧めします。
ngenisis

2
@carusocomputing Mathematicaにようこそ。これは既存のすべての関数に組み込まれている言語です。:-P
HyperNeutrino 16

1
NetLogoをダウンロードしていたのは、「マルチタートルがこれを簡単に処理できる!」数学者が大人バージョンを使用していることを思い出しました。
wyldstallyns 16

13

MATL16 14バイト

私はMATLにそれほど流fluentではないので、これはややゴルフに適していると思います。(少なくともMathematicaを破るのは良いことです:-)つまり、フリップwは最適ではありません。おそらく避けることができます...

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

オンラインでテストしてください!(このサービスの@Sueverに感謝します。-2バイトの@DrMcMoylexに感謝します。)

説明(for 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 16

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

Mathematica、42バイト

円形に配置された37点のセットを作成し、2つの点のすべての可能なサブセットの間に線を引きます。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バイト

HTML5 Canvas 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

Java、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スレッドを含む別のソリューションからでした。ただし、最終クラスは、所有クラスの外部変数への内部クラス参照であるため、必要です。
魔法のタコUr

それは私のマシンでうまく動作します。ところで私は、あなたが移動することによって、いくつかのバイトをオフに剃ることができると思いint外の宣言をforループ
shooqie

Java 6の@shooqieは、コ​​ンパイル時に「囲みスコープ内の非最終ローカル変数nを参照できない」と言っています。
魔法のタコUr

Java 8ではうまくいきましたが、投稿を編集した後、白い画面しか表示されません。
shooqie 16

7

Python 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*短くなりませんか?
ローマングラフ

RomanGräfPILはできませんので、奇妙なパッケージです@ import *、インストール方法に応じて、あなたが直接PILとインポート画像/ ImageDrawをスキップすることができ
ロッド

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グリフィン

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(提供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が十分に新しい場合にのみ機能します。ほとんどの人にとってはそうなると思います。他の人には申し訳ありません!)) 。

そして、より読みやすいバージョン(はい、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あなたが後にカッコを参照している場合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)

各行は個別に入力バーに入力されます。実行を示すgifは次のとおりです。

実行

使い方

このpolygonコマンドは、ベースラインの頂点が(0,0)およびである、20辺の多角形を作成します(1,0)。次のコマンドはisequenceand vertexコマンドを使用して、indexを持つポリゴンの各頂点を反復処理し、index を持つ各頂点に対して、コマンドを使用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をハードコーディングしたようです。
ライキング

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

生産物:

Nice axis 'labels uh?

@Titusのおかげで-4バイト


1
短くはありませんが、を使用すると高速になりfor(i in 2:n){for(j in 1:i)...}ます。R中括弧が必要ですか?
タイタス

@タイタスあなたは正しいです!いいえ、中括弧は必要ありません。ありがとう!
フレデリック

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の Dowloadインタープリター

すべての行を2回描画しても問題はありません。外観は同じです:-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バイオインフォマティクスのツールボックスの一部ではないことに驚きました...それが存在することすら知らなかったのです...いいね:)
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からintへの精度の損失のため、いくつかのアーティファクトがあります。以下のように見えN=36ます: ここに画像の説明を入力してください

編集:ストレージ、型宣言、すべてのループは必要ありませんでした。PolarsからすべてのCarthesiansを適切に計算すると、バイト数が50%安くなります...


1

QBIC98 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バイト節約できます。代入 DRAWのためには、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、2行目である必要がありました。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エンコード(各文字を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バイトの長さになります)、プログラムを実際に実行することはできませんでした。論理的に、Latin-1として機能するはずです( 0〜255の範囲外の文字はありません)が、文字エンコード環境変数の構成方法に関係なく、「string index out of range」エラーが発生し続けます。そのため、誰かが再エンコードせずに実行する方法を見つけられない限り、これは63バイトとしてカウントする必要があります。

Jellyのエンコーディングで解釈すると、プログラムが少し読みやすくなる場合があります。

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

このプログラムは、標準入力でポイント数を取得し、標準出力でPostScriptイメージを出力します。(-Tps最後にを変更することにより、GraphVizがサポートする任意の形式の出力に簡単に適合させることができます。PostScriptの名前が最も短いだけです。間違いなく、を削除して5文字を保存でき-Tpsます他に何もサポートされていないことは、おそらく質問の目的には数えられません。)

基本的に、これはGraphVizを呼び出して描画を行うJellyプログラムです。ただし、Jellyには外部プログラムを実行する機能がないため、bashを使用してそれらをリンクする必要がありました。(これはまた、手動で標準入力からゼリー要求入力を作るために安価だということを意味する。通常、これは、コマンドラインから入力を受け取り、それは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出力を構成する文字列をわずかに圧縮できます。辞書は持っているgraphnodepoint。面倒なことに、それは持っていません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>

1つの投稿には3万文字の制限があるため、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バイト

パッケージを使用して別の解決策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.