Das Ziel dieses Codegolfs ist es, ein regelmäßiges Polygon (eines mit gleichen Seitenlängen) zu zeichnen, das die Anzahl der Seiten und den Radius (Abstand von der Mitte zum Scheitelpunkt) angibt.
- Die Anzahl der Seiten und der Radius können über eine Datei, STDIN oder einfach eine alte Variable eingegeben werden. Verwenden Sie, was in Ihrer Sprache kürzer ist.
- -25% aller Zeichen / Bytes, wenn das Bild tatsächlich anstelle von ASCII-Grafiken gezeichnet wird.
Antworten:
LOGO 37 - 25% = 27,75 (mit Variablen)
LOGO 49 - 25% = 36,75 (als Funktion)
Dreieck
Wird mit Variablen aufgerufen
Wird als Funktion verwendet
P 100 3
Platz
Wird mit Variablen aufgerufen
Wird als Funktion verwendet
P 100 4
Pentagon
Wird mit Variablen aufgerufen
Wird als Funktion verwendet
P 100 5
Zehneck
Wird mit Variablen aufgerufen
Wird als Funktion verwendet
P 100 10
Kreis
Wird mit Variablen aufgerufen
Wird als Funktion verwendet
P 100 360
quelle
Mathematica, 40 - 25% = 30
quelle
Graphics
.Graphics@RegularPolygon
nicht erlaubt?Java 8:
533322 - 25% = 241,5Nun, es ist Java: / Zeichnet nur Linien, Punkt zu Punkt. Sollte für ein beliebig großes Polygon funktionieren. Schneiden Sie es ziemlich weit von der Originalgröße ab. Wir danken Vulcan (in Kommentaren) für die Golfstunde.
Zeilenumbrüche:
Eingabe ist Argumente [Radius] [Seiten]:
Ausgabe:
quelle
java.awt.image.*
anstelle vonjava.awt.image.BufferedImage
Short.valueOf
anstelle vonInteger.valueOf
, um vier Bytes zu speichern, da die Eingabe den Kurzschlussbereich niemals überschreiten sollte. 2)y[]=x.clone()
spart ein Byte mehry[]=new int[s]
. 3) Verwenden Sie das veraltetef.show();
anstelle vonf.setVisible(1>0);
, um neun zusätzliche Bytes zu speichern. 4) Verwenden Sie6.28
stattdessenMath.PI*2
, da die Schätzung für diesen Zweck genau genug ist, um drei Bytes zu sparen. 5) Deklarieren SieGraphics g
stattGraphics2D g
beim Erstellen der Grafikinstanz, um zwei Bytes zu sparen.BufferedImage
undGraphics
alles weggeworfen habe und einfach alles reingeworfen habepaint()
). Es hat die Farbe des Bildes geändert, obwohl es IMO immer noch gut aussieht. Vielen Dank, dass ich mir das noch einmal anschaue :)Frame
als lokale Variable, das Entfernen derd
ganzen Zahl und mit / missbrauchen die for-Schleife ein paar Zeichen zu sparen, vor allem Semikolons. Hier ist auch eine Version mit Leerzeichen .drawPolygon
anstelle vondrawLine
. Whitespace-Version .TeX / TikZ (60 - 80,25)
Datei
polygon.tex
:(80 Bytes)
Der Radius und die Anzahl der Seiten werden als Variablen / Makros
\r
und angegeben\n
. Für den Radius kann eine beliebige TeX-Einheit angegeben werden. Ohne Einheit wird die Standardeinheitcm
verwendet. Beispiele:(16 Bytes ohne Werte)
Wenn die Seitenzahl unterdrückt werden soll, kann dies mit erfolgen
(11 Bytes)
Beispiele zum Generieren von PDF-Dateien:
Ergebnis:
Es ist nicht klar, was gezählt werden muss. Der Bereich für die Punktzahl wäre:
Der Basiscode ist 80 Bytes minus 25% = 60
Oder alles inklusive (Definition der Eingabevariablen, keine Seitenzahl): (80 + 16 + 11) minus 25% = 80,25
Wenn die Verbindung zwischen dem ersten und dem letzten Punkt nicht glatt sein muss,
--cycle
kann sie entfernt werden, wodurch 7 Byte eingespart werden.quelle
Geogebra , 42 - 25% = 31,5 Bytes
Wenn Sie anstelle von Bytes Zeichen eingeben, sind dies 41 - 25% = 30,75 Zeichen.
(Das heißt, wenn Sie Geogebra als eine Sprache betrachten ...)
Angenommen, der Radius ist in der Variablen
r
und die Anzahl der Seiten in der Variablen gespeicherts
.Dies verwendet den Cosinussatz c 2 = a 2 + b 2 - 2 ab cos C , um die Seitenlänge aus dem gegebenen Radius zu berechnen.
Beispielausgabe für
s
= 7,r
= 5quelle
C:
229180(r ist der Radius des Kreises)
Bitte laufen in ANSI-Terminal
Bearbeiten:
kompilieren:
quelle
#include
s weglassen . Außerdem können Siev
als global außerhalbmain
deklarieren undu
als Parameter von deklarierenmain
, dann brauchen Sieint
(dhv;main(u){//...
) nicht. Schließlich können Sie die letzte Änderungfor
Schleife infor(j=0;j<s;)/*...*/x=j++-s/2.,//...
C 359 Zeichen
Mein erster Golfversuch. Zumindest schlägt es die Java-Lösung ;-)
ungolfed:
Und es ist das einzige Programm, das das Polygon in ASCII ausgibt, anstatt es zu zeichnen. Aufgrund dieser und einiger Gleitkomma-Rundungsprobleme sieht die Ausgabe nicht besonders hübsch aus (ASCII-Zeichen sind nicht so hoch wie breit).
quelle
int
können entfernt werden, da sieint
vom Compiler als solche angenommen werden . Die letztefor
Schleife kann auch geändert werden zufor(j=0;j<r;){x=p+u*j;y=q+z*j++;//...
if(i<0)
könnte geändert werden zuif(i)
. Was immer noch nur in einer Iteration benötigt wird, aber keinen effizienten Weg finden konnte, es herauszunehmen :(Mathematica, 54 * 75% = 40,5
Ich glaube nicht einmal, dass es einen Sinn für eine ungolfed Version gibt. Es würde nur mehr Leerzeichen enthalten.
Erwartet den Radius in Variable
r
und die Anzahl der Seiten in Variablen
. Der Radius ist ein bisschen bedeutungslos, ohne dass Achsen angezeigt werden, da Mathematica alle Bilder so skaliert, dass sie passen.Anwendungsbeispiel:
quelle
Graphics@Polygon@Array[r{Sin@#,Cos@#}&,n+1,{0,2π}]
Array
.HTML / JavaScript:
215 - 25% = 161,25, 212 - 25% = 159Ungolfed-Version:
quelle
i=S=5;
undfor(;i-->0;)
.i-->0
Teil? Es ist das gleiche wiei-- > 0
. Einige Leute nennen es auch den Pfeil-Operator oder denc=document.currentScript.parentNode;
und ersetzen<canvas>
durch<canvas id="c">
Postscript 156 - 25% = 117
Übergeben Sie den Radius, die Anzahl der Seiten und den Mittelpunkt in der Befehlszeile
oder der Quelle voranstellen
In die Mitte verschieben, auf den Radius skalieren und auf (1,0) verschieben. dann n-mal wiederholen: um 360 / n drehen, Linie auf (1,0) zeichnen; Letzte Linie zeichnen, streichen und die Seite ausgeben.
quelle
Salbei , 44 - 25% = 33
Angenommen, die Anzahl der Seiten ist in der
s
Variablen und der Radius in derr
Variablen gespeichert .Beispielausgabe:
s
= 5,r
= 3s
= 5,r
= 6s
= 12,r
= 5quelle
regular_polygon
Funktion immer Polygone mit dem ersten Eckpunkt bei (0,1). Ein Fix wäre, die Achsen nicht mit zusätzlichen 7 Bytes (,axes=0
nachfigsize=r
) zu zeigenbc + ImageMagick + xview + bash, 104,25 (139 Byte - 25%)
Diese Herausforderung wäre ohne eine ImageMagick-Antwort unvollständig ...
Beispiel:
./polygon.sh 8 100
Erzeugt das folgende Bild:quelle
JavaScript 584 (867 ungolfed)
Dieser Code verwendet N komplexe Wurzeln der Einheit und übersetzt die Winkel in X-, Y-Punkte. Dann wird der Ursprung in die Mitte der Leinwand verschoben.
Golf gespielt
Beispielausgabe:
Ungolfed
Für diesen Code ist ein HTML5-Zeichenflächenelement erforderlich, c ist ein Zeichenflächenobjekt, r ist der Radius und n ist die Anzahl der Seiten.
quelle
PHP 140 - 25% = 105
Nimmt zwei vordefinierte Variablen an:
$p
die Anzahl der Punkte und$r
den Radius in Pixel. Alternativ könnte man auch voranstellenlist(,$r,$p)=$argv;
stattdessen Befehlszeilenargumente und verwenden. Die Ausgabe ist ein PNG, das an eine Datei weitergeleitet werden soll.Ausgabe
$r=100; $p=5;
$r=100; $p=6;
$r=100; $p=7;
$r=100; $p=50;
quelle
TI-80 BASIC, 25 Byte - 25% = 18,75
Angenommen, alle Einstellungen werden auf die Standardwerte gesetzt. Führen Sie das Programm wie folgt aus
5:PRGM_POLYGON
folgt aus (für ein Fünfeck)Es funktioniert durch Zeichnen eines Kreises mit einer sehr geringen Anzahl von Schritten. Zum Beispiel würde ein Fünfeck Schritte von 2π / 5 Radiant haben.
Die Fenstereinstellungen sind standardmäßig gut genug, und
TMIN
undTMAX
sind auf0
und eingestellt2π
. Alles, was wir ändern müssen, istTSTEP
.quelle
SmileBASIC 3,
183159 - 25% = 119,25 BytesNimmt die Seiten und den Radius ab
INPUT
, berechnet und speichert die Punkte und zeichnet sie dann mitGLINE
.Ich denke, das könnte kürzer sein, aber es ist wie 1 Uhr morgens, egal was.Es wird eine saubere und standardmäßige Anzeigeumgebung vorausgesetzt, daher müssen Sie diese möglicherweise ausführen,ACLS
wenn Sie sie in DIRECT ausführen.quelle
OpenSCAD: 31 abzüglich 25% = 23,25
Erster Beitrag hier! Ich weiß, dass ich zu spät zur Party komme, aber das schien mir eine gute Frage zu sein. Mit anrufen
p(n,r)
.quelle
ActionScript 1, Flash Player 6: 92 - 25% = 69
quelle
C # in LINQPAD
Der mathematische Teil geht mit der Java-Antwort an Geobits (ich hoffe, es macht Ihnen nichts aus!). Ich bin in Mathe hoffnungslos :)
Ich habe das in LINQPAD gemacht, da es ein eingebautes Ausgabefenster hat. Sie können also im Wesentlichen die folgenden Elemente ziehen und ablegen, um das Polygon zu zeichnen. Wechseln Sie einfach zu "C # -Programm" und importieren Sie die System.Drawing-Bibliothek in die Abfrageeigenschaften.
quelle
Matlab 58 Bytes - 25% = 43,5
Ich habe keine Matlab-Lösung gesehen, daher hier eine, die ziemlich einfach ist:
Sie können einige Bytes abschneiden, wenn r und n bereits im Arbeitsbereich befinden.
Beispielaufruf:
quelle
Python 2, 222 Bytes
Überprüft, ob sich ein Pixel auf der Innenseite aller Hyperebenen (Linien) des Polygons befindet. Der Radius wird berührt, weil tatsächlich das Apothem verwendet wird.
quelle
Mathematica 27 (= 36 - 25%)
Wenn wir Mathematica-Code einreichen, vergessen wir häufig neue Funktionen, die immer wieder in die Sprache integriert werden. Das aktuelle Sprachvokabular umfasst rund 5000 Kernfunktionen . Ein umfangreiches und erweitertes Sprachvokabular ist übrigens sehr praktisch für das Code-Golfen. CirclePoints wurden in der aktuellen Version 11.X eingeführt. Ein spezielles Beispiel für den 7-seitigen Radius 5 ist:
Außerdem müssen Sie nur den Winkelparameter eingeben, um die Ausrichtung Ihres Polygons zu steuern:
quelle
Python 2, 74 Bytes - 25% = 55,5
Die Eingabe erfolgt in den Variablen
r,n
. Wenn in der Zählung enthalten, wäre esr,n=input()
für 12 Bytes mehr.Probieren Sie es online aus - (verwendet einen anderen Code, da dieser
exec
nicht im Online-Interpreter implementiert ist)quelle
SmileBASIC,
8575 - 25% = 56,25 BytesDie Variablen S und R werden zur Eingabe verwendet.
Erklärt:
Die Seiten werden mit der Farbe gezeichnet
-I
, die normalerweise in der Nähe von -1 liegt (& HFFFFFFFF weiß) (außer wennI
0 ist, wenn es transparent ist).Sie können auch ein gefülltes Polygon zeichnen, indem Sie
GTRI N,M,X,Y,R,R,-I
anstelle von verwendenGLINE...
quelle
Tikz, 199 Bytes
Diese Lösung verwendet die Tikz-Bibliothek
shapes.geometric
.So sieht ein Polygon mit
5
Seiten und Radius8in
aus, wenn es in Evince angezeigt wird .quelle