Zeichnen Sie Linien zwischen jedem Paar unterschiedlicher Punkte für n
Punkte, die in einem Kreis angeordnet sind, und erzeugen Sie so etwas wie das folgende Ergebnis. Kürzester Code (in Bytes) gewinnt! Ihre Linien müssen nicht transparent sein, aber so sieht es besser aus. Die Ausgabe muss eine Vektorgrafik oder ein Bild von mindestens 600 x 600 Pixel sein (entweder in einer Datei gespeichert oder auf dem Bildschirm angezeigt). Um die Herausforderung abzuschließen, musst du mindestens 20 ziehen.
code-golf
kolmogorov-complexity
graphical-output
J. Antonio Perez
quelle
quelle
n
und Linien fürn
Punkte ziehen müssten .n
Problem die Herausforderung erheblich verschärfen würde, da ich davon ausgehe, dass die meisten Lösungen ohnehin mit einer beliebigen Zahl funktionieren, insbesondere, weil 37 ungerade ist und daher keine Spiegelsymmetrien vorliegen.n
als Eingabe oder wählen Sie einfach eine beliebigen
über 20?Antworten:
Mathematica, 13 Bytes
Sieht so aus, als gäbe dies nur eine runde Einbettung für nicht
n=4
, aber die Frage lautetn>=20
quelle
n
(ich hatte die Antwort von der festen 37 bereit) :(MATL ,
16 bis14 BytesDa ich mit MATL nicht besonders fließend bin, erwarte ich, dass dies etwas besser ist. (Wäre nett, wenigstens Mathematica zu schlagen :-) Dh der Flip
w
ist nicht optimal, es könnte wohl vermieden werden ...Online testen! (Danke @Suever für diesen Service, danke @DrMcMoylex für -2 Bytes.)
Erklärung (für
N=3
):Es ist erwähnenswert, dass Sie zum Erzeugen der N-ten Wurzeln der Einheit die Formel
exp(2*pi*i*k/N)
für verwenden könnenk=1,2,3,...,N
. Aber daexp(pi*i/2) = i
man könnte auch schreibeni^(4*k/N)
fürk=1,2,3,...,N
das ist , was ich hier tue.quelle
XH:H
zu:G
G
vielen Dank!PICO-8 , 131 Bytes
Ich war mir nicht sicher, ob ich gegen Regeln verstoßen würde, aber ich tat es trotzdem!
Golf gespielt
Ungolfed
PICO-8 ist eine Lua-basierte Fantasy-Konsole mit einer nativen Auflösung von 128x128. Ich habe den Kreis so groß wie möglich gemacht ...
quelle
Mathematica, 42 Bytes
Erstellt eine Menge von 37 Punkten, die in einem Kreis angeordnet sind, und zeichnet dann Linien zwischen allen möglichen Teilmengen von zwei Punkten. Jemand hat eine kürzere Antwort gepostet, die CompleteGraph nutzt, aber ich glaube, dies ist die kürzeste, abgesehen von denen, die sich auf CompleteGraph verlassen.
quelle
Tuple
. Sie müssen dies auch aktualisieren, um willkürliche zu akzeptierenn
, aber dies kostet Sie praktisch keine Bytes.Tuples
HTML + JS (ES6), 34 +
177164162 = 196 BytesVerwenden der HTML5 Canvas-API .
Sehen Sie es auf CodePen .
-13 Bytes : entfernt
closePath()
, nachstroke()
innen verschobenbeginPath()
-2 Bytes : Definierte Variable
a
innerhalbrotate()
quelle
Java,
346338322301 BytesDiese Lösung funktioniert für alle
n>1
, auch wenn der ursprüngliche Beitrag dies nicht erforderte.Mein Favorit ist
n=5
, nicht fragen, warum, auch wenn Sie eine coolere GUI wollen, verwenden Sie:int a=Math.min(this.getHeight(),this.getWidth())/2;
Anstelle des hartcodierten 300 wird die Breite oder Höhe des Rahmens als Durchmesser verwendet.
8 Bytes dank Shooqie gespart. 21 Bytes dank Geobits gespart.
Ausgabe für
n=37
:quelle
Frame x=
undfinal
(ich denke?)Frame x
war von einer anderen Lösung, die einen Thread beinhaltete. Sie benötigen das Finale, da es eine interne Klassenreferenz auf eine externe Variable in der besitzenden Klasse ist.int
Deklarationen außerhalb derfor
Schleifen verschiebenPython 2,
258235229 BytesAusgabe für
n=37
quelle
from PIL import*
kürzer?import *
Abhängig von Ihrer Installation können Sie die PIL nicht überspringen und Image / ImageDraw direkt importierenOktave,
8869 BytesAusgabe für
N=37
:Ausgabe für
N=19
:quelle
gplot
auch, aber ich habe es nicht geschafft, es kurz genug zu machen ...Perl, 229 Bytes
Es verwendet die gleiche Formel wie die meisten anderen Sprachen, die für diese Herausforderung nicht geeignet sind (auch wenn ich sie nicht angeschaut habe, um sie zu finden, aber das ist eine ziemlich einfach zu findende Formel). Also nicht sehr interessant, aber normalerweise gibt es nicht viele Perl-Antworten auf diese Art von Herausforderungen, deshalb wollte ich nur eine vorschlagen.
Und Sie benötigen
-MImager
(9 Byte),-MMath::Trig
(pi
13 Byte) und-n
(1 Byte) ==> + 23 Byte.Um es auszuführen:
Es wird eine Datei mit dem Namen erstellt,
t.png
die das Bild enthält.Sie müssen zwar installieren
Imager
, aber keine Sorge, es ist ganz einfach:(Das
echo
s konfiguriert dich cpan, wenn du es noch nie benutzt hast. (Eigentlich funktioniert das nur, wenn dein Perl aktuell genug ist. Ich denke, für die meisten von dir ist es das und es tut mir leid für die anderen!) .Und die besser lesbare Version (ja, für ein Perl-Skript ist sie ziemlich gut lesbar!):
-1 Byte danke an Titus.
quelle
for
Schleifen beziehen , dann sind sie obligatorisch.y2
. Ich wette, das brauchst du nicht. Und kannst du STDOUT schreiben?GeoGebra , 92 Bytes
Jede Zeile wird separat in die Eingabeleiste eingegeben. Hier ist ein GIF, das die Ausführung zeigt:
Wie es funktioniert
Der
polygon
Befehl erstellt ein 20-seitiges Polygon mit den Eckpunkten der Grundlinie bei(0,0)
und(1,0)
. Der nächste Befehl durchläuft danni
mit den Befehlen und jeden Scheitelpunkt des Polygons mit Indexsequence
und zeichnet mit dem Befehlvertex
für jeden Scheitelpunkt mit Indexi
ein Liniensegment zu jedem anderen Scheitelpunkt mit Index .j
segment
quelle
PHP,
186184196 Bytesschreibt das Bild nach STDOUT
Nervenzusammenbruch
-12 Bytes für fest
n=20
Ersetzen Sie
$p=2*M_PI
mit6
(-8),/=$argv[1]
mit=M_PI/10
(-2) und$b>0
mit$b
(-2)Die exakte Verwendung von PI / 10 schadet nicht. Mit
.3142
sind die Rundungsfehler aus der parametrisierten Version geblieben, aber mit sindM_PI/10
sie verschwunden und ich kann$b
(<> 0) statt überprüfen$b>0
. Ich hätte mit zwei Bytes sparen können.314
, aber das hätte die Punkte verschoben.Das Limit
$a<6
ist für 20 Punkte ausreichend genau.174 Bytes für fest
n=314
Die Verwendung von 314 Punkten führt zu einem gefüllten Kreis in dieser Auflösung (ebenso wie 136.140, jede gerade Zahl darüber und alles über 317).
quelle
NetLogo - 44 Bytes
quelle
R,
127123 BytesProduziert:
Schöne Achsenlabels, was?
-4 Bytes dank @Titus!
quelle
for(i in 2:n){for(j in 1:i)...}
. BenötigtR
die Hosenträger?BBC BASIC, 98 ASCII-Zeichen
Tokenized Dateigröße 86 Bytes
Laden Sie den Interpreter unter http://www.bbcbasic.co.uk/bbcwin/bbcwin.html herunter
Es ist nichts Falsches daran, jede Linie zweimal zu zeichnen, das Aussehen ist identisch :-P
Ungolfed
Ausgabe n = 21
Dies sieht im Original-Rendering viel besser aus als im Browser.
quelle
LINE
Funktion. BeatsDRAW
...Oktave,
50 48 4645 BytesDies ist eine beliebige Funktion, die den gesuchten Graphen darstellt.
Erläuterung:
(k=0:2*pi/N:N)+k'
Erstellt eine vollständigeN+1 x N+1
Adjekenzmatrix und definiert gleichzeitig den Winkelvektork
, für den wir dann[cos(k);sin(k)]'
eine Koordinatenmatrix verwenden, in der jeder Graphknoten positioniert ist.gplot
Zeichnet einfach die Grafik, die wir wollen.Denn
N = 29
wir bekommen:quelle
JavaScript (ES5) / SVG (HTML5), 181 Byte
Funktioniert nur für Primzahlen, z. B. den ursprünglichen Vorschlag von 37. Sie können den Anfangswert von halbieren (aufrunden)
i
, um ein blasseres Bild zu erhalten. Sie können die1e3,2e3
Werte auch konsequent an andere Geschmackswerte anpassen (ich habe angefangen,300,600
aber festgestellt, dass sie zu grob sind).quelle
MATLAB, 36 Bytes
Dies ist eine nervige Funktion, die die Handlung erstellt.
Beispiel:
quelle
graph
es nicht Teil der bioinformatischen Toolbox ist ... ich wusste gar nicht, dass es sie gibt ... Schön :)QBasic 4.5,
398271 BytesDer Bildschirm in QBasic kann nur 640x480 sein, so dass der Kreis leider nur einen Radius von 230 px hat. Außerdem gibt es einige Artefakte aufgrund des Verlusts der Genauigkeit von Float-to-Int. Sieht so aus für
N=36
:EDIT: Ich brauchte nicht den Speicher, die Typdeklaration und die ganze Schleife. Die Berechnung aller Carthesians von Polars an Ort und Stelle ist in der Byteanzahl 50% billiger ...
quelle
QBIC ,
9894 BytesIch habe
meine ursprüngliche Antwort von QBasic@LevelRiverSt auf QBIC konvertiert. Ich dachte, dies würde zu stark von Funktionen abhängen, die nicht in QBIC integriert sind, um durchführbar zu sein, aber wie sich herausstellt, werden weitere 90 Bytes eingespart. Durch ErsetzenDRAW
von werdenLINE
weitere 80 Byte eingespart. Ich wusste, dass ich etwas Einfaches vergessen hatte ...Wenn es mit einem Befehlszeilenparameter von 36 ausgeführt wird, sieht es folgendermaßen aus:
quelle
Verarbeitung, 274 Bytes (239 +
size
Aufruf und Funktionsaufruf)Ich weiß ehrlich gesagt nicht warum,
setup
musste aber in der zweiten Reihe sein. Ich habe https://en.wikipedia.org/wiki/Rotation_matrix verwendet , um die Mathematik für die Rotation zu berechnen. Dieses Programm berechnet die Punkte und verschiebt sie in ein Array, mit dem wir Linien zeichnen.Hier ist ein Bild eines Polygons mit 50 Kanten (die 100 Kanten waren fast vollständig schwarz)
Sie können hinzufügen
stroke(0,alpha);
, dass transparente Kanten vorhanden sind. Dabeialpha
handelt es sich um die Deckkraft der Linie. Hier ist das gleiche Polygon mitalpha
von20
.quelle
Bash + Jelly + GraphViz, 52 Zeichen, 52 oder 63 Bytes
Angesichts der Tatsache, dass die fraglichen Programme nicht übereinstimmen, welche Zeichenkodierung verwendet werden soll, ist das Programm voll von Steuerzeichen. So sieht es
xxd
in der lateinischen 1-Kodierung aus (die jedes Zeichen in einem Byte darstellt):Ich konnte das Programm jedoch nicht zum Laufen bringen, ohne die Eingabe aus irgendeinem Grund in UTF-8 umzuwandeln (was eine Länge von 63 Byte zur Folge hätte). Logischerweise sollte es als Latin-1 funktionieren - keines der Zeichen liegt außerhalb des Bereichs von 0 bis 255 -, aber ich erhalte weiterhin Fehler "String-Index außerhalb des Bereichs", egal wie ich die Umgebungsvariablen für die Zeichencodierung konfiguriere. Dies muss also als 63 Byte gezählt werden, es sei denn, jemand kann eine Möglichkeit finden, es auszuführen, ohne es neu zu codieren.
Das Programm ist möglicherweise etwas besser lesbar, wenn wir es in Jellys Codierung interpretieren:
Das Programm nimmt die Anzahl der Punkte auf der Standardeingabe und gibt ein PostScript-Bild auf der Standardausgabe aus. (Es kann trivial angepasst werden, um in jedem von GraphViz unterstützten Format auszugeben, indem das
-Tps
am Ende geändert wird . Es ist nur so, dass PostScript den kürzesten Namen hat. Sie können-Tps
wahrscheinlich fünf Zeichen speichern, indem Sie das entfernen , aber dann werden Sie im internen GraphViz-Bildformat ausgegeben das unterstützt sonst nichts, was für die zwecke der frage wohl nicht zählt.)Grundsätzlich ist dies nur ein Jelly-Programm, das GraphViz zum Zeichnen aufruft. Jelly scheint jedoch keine Fähigkeiten zum Ausführen externer Programme zu haben, daher musste ich bash verwenden, um sie miteinander zu verknüpfen. (Dies bedeutet auch, dass es billiger ist, Jelly-Eingaben von stdin manuell anzufordern; normalerweise werden sie über die Befehlszeile eingegeben, dies würde jedoch zusätzliche Bytes im Bash-Wrapper bedeuten.)
circo
Alle Punkte, die gezeichnet werden sollen, werden automatisch in einem Kreis angeordnet Der Jelly-Code muss ihn also nur bitten, eine Liste von Punkten zu zeichnen, die alle miteinander verbunden sind. So funktioniert das:Durch die Verwendung von Jelly können wir den String, der die GraphViz-Ausgabe konfiguriert, über das integrierte Wörterbuch leicht komprimieren. Das Wörterbuch hat
graph
,node
undpoint
. Dummerweise hat es nichtshape
(es hatSHAPE
, aber GraphViz ist case-sensitive), so haben wir zu kodieren , die Zeichen- für -Zeichen.Hier ist die Ausgabe für Eingabe 21 (mit einer geringfügigen Änderung am Programm, damit es in einem Format ausgegeben wird, das auf Stack Exchange hochgeladen werden kann):
quelle
PHP + HTML SVG,
316263 BytesGolf-Version mit fest codierten
n
Punkten und ohne Eingabeparametern
:Vorherige Golfversion mit Eingabeparameter für
n
Punkte, 316 Bytes:Verwendung: In einer Datei speichern und vom Browser aus aufrufen:
Ungolfed-Version mit Eingabeparameter für
n
Punkte und CSS:Ein voll funktionsfähiges 32-Punkte-Snippet konnte nicht angehängt werden, da für einen einzelnen Beitrag maximal 30.000 Zeichen zulässig sind. Hier ist ein Screenshot:
Das angehängte Snippet ist aufgrund des 30-KB-Limits für einzelne Posts auf 18 Punkte begrenzt.
Code-Snippet anzeigen
quelle
R, 108 Bytes
Konnte 5 Bytes sparen, wenn ich das Argument loswurde,
,as=1
das ein Seitenverhältnis von 1 erzwingt. Erstelltexpand.grid
eine Matrix mit allen möglichen Punktpaaren und verwendet dieseapply
zum Durchlaufen.R + igraph 87 Bytes
Eine andere Lösung mit Paket
igraph
.quelle