Gegeben eine ganze Zahl n
, wobei 3 <= n < 2^32
, die Berechnung der Fläche eines regelmäßigen n
-gon mit einem Apothema von 1; die Formel für die ist n * tan(π / n)
. Für diejenigen, die nicht wissen, was das Apothem ist:
n
Geben Sie den Bereich des -gons als Gleitkomma mit mindestens 8 Dezimalstellen aus.
Testfälle
3
5.1961524227
6
3.4641016151
10
3.2491969623
20
3.1676888065
99
3.1426476062
1697
3.1415962425
15000
3.1415926995
Hinweis: Die obigen Testfälle enthalten 2 Stellen mehr, als Sie zur Ausgabe benötigen.
Area@RegularPolygon
sollte seinArea@*RegularPolygon
; wie es jetzt ist, kann es nicht in einer Variablen erfasst werden. Das heißt,f = Area@RegularPolygon; f[3]
funktioniert nicht. RelevanteJava (OpenJDK 9) , 24 Byte
Probieren Sie es online!
quelle
Eigentlich 5 Bytes
Probieren Sie es online!
Wie?
Alternative:
ß╦/T*
. o_O Schlägt tatsächlich Jelly !!!quelle
x87-Maschinencode, 11 Byte
Die obigen Codebytes definieren eine Funktion, die die Fläche eines regulären n-Gons mit einem Apothem von 1 berechnet. Für diese Berechnung werden x87-FPU-Anweisungen (die klassische Gleitkommaeinheit auf den x86-Prozessoren) verwendet.
In diesem Fall ist
__fastcall
das Argument der Funktion ein Zeiger auf die imECX
Register übergebene Ganzzahl . Das Ergebnis der Funktion ist ein Gleitkommawert, der oben im x87-Gleitkommastapel (RegisterST0
) zurückgegeben wird.Probieren Sie es online!
Ungolfed Assembler-Mnemonik:
Wie Sie sehen, ist dies im Grunde nur eine einfache Berechnung der angegebenen Formel,
result = n * tan (π / n).
Nur ein paar interessante Dinge weisen darauf hin:
FLDPI
). Dies wurde früher selten verwendet (und jetzt offensichtlich viel weniger), ist jedoch kürzer als das Einbetten einer Konstanten in Ihre Binärdatei und das Laden dieser.FPTAN
ersetzt den Wert des Eingaberegisters (die Oberseite des FPU-Stapels) durch das Ergebnis, drückt jedoch auch eine Konstante 1.0 auf die Oberseite des FPU-Stapels. Dies geschieht aus Gründen der Abwärtskompatibilität mit dem 8087 (ich habe keine Ahnung, warum dies auf dem 8087 geschehen ist; wahrscheinlich ein Fehler). Das heißt, wir müssen diesen nicht benötigten Wert vom Stapel nehmen. Der schnellste und kürzeste Weg dazu ist ein einfacherFSTP st0
, wie wir ihn hier verwenden. Wir hätten auch ein Multiplizieren und Popen durchführen können , da das Multiplizieren mit 1,0 das Ergebnis nicht ändert, aber dies sind auch 2 Bytes (also kein Gewinn in der Codegröße), die wahrscheinlich langsamer ausgeführt werden und möglicherweise unnötige Unbestimmtheit mit sich bringen das Ergebnis.Obwohl ein moderner Programmierer oder Compiler den SSE-Befehlssatz (und einen neueren Befehlssatz) anstelle des alternden x87 verwenden würde, würde dies mehr Code zur Implementierung erfordern, da es in diesen neueren ISAs keinen einzelnen Befehl zur Berechnung einer Tangente gibt.
quelle
Gelee , 6 Bytes
Probieren Sie es online!
Jellys eingebautes π hat> 8 Dezimalstellen.
quelle
Brachylog , 9 Bytes
Probieren Sie es online!
quelle
Sakura , 4 Bytes
Dies wird erweitert
*ij/π⓪⓪
, was istquelle
R , 25 Bytes
Eingabe von stdin, Ausgabe nach stdout.
Probieren Sie es online!
quelle
cat()
. 5 Bytes weniger.MATL , 7 Bytes
Probieren Sie es online!
quelle
Japt , 7 Bytes
Probier es aus
Erläuterung
Implementiert nur das Forumla, wo
Mt
ist Tan,MP
ist Pi undU
ist die Eingabe.quelle
Ohm v2 , 7 Bytes
Probieren Sie es online!
Wie?
quelle
var'aq , 51 Bytes
Erläuterung
quelle
Common Lisp, 29 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6), 24 Byte
Versuch es
quelle
Python 2 , 45 Bytes
Probieren Sie es online!
quelle
Pyth , 9 Bytes
Testsuite.
Wie?
quelle
Gaia , 5 Bytes
Probieren Sie es online!
Wie?
quelle
Schnell , 35 Bytes
Mit Compiler-Warnungen:
Probieren Sie es hier aus!
Ohne Compiler-Warnungen 40 Bytes :
quelle
Excel, 16 Bytes
quelle
Perl, 14 + 16 = 30
14 Byte für das eigentliche Programm und 16 Byte für die Befehlszeilenoptionen
quelle
Prolog (SWI) , 25 Bytes
Probieren Sie es online!
Dies ist meine erste Einreichung bei Codegolf, ich hoffe, es geht mir gut. Als Funktion geschrieben.
quelle
IBM / Lotus Notes Formula Language, 13 Byte
Die Eingabe erfolgt über ein Feld mit dem Namen a auf demselben Formular wie das Feld mit der Formel. Kein TIO verfügbar, also Screenshot aller unten gezeigten Testfälle:
quelle
PowerShell , 38 Byte
Probieren Sie es online!
Tut genau das, was es verspricht, dauert aber aufgrund der langen
[math]::
.NET-Aufrufe etwas länger .quelle
Ruby , 27 Bytes
Probieren Sie es online!
quelle
Pari / GP , 14 Bytes
Probieren Sie es online!
quelle
C # (Mono C # -Compiler) , 24 Byte
Probieren Sie es online!
quelle
n=>
zu Beginn hinzufügen können , um daraus eine Pfeilfunktion zu machen (nehmen Sie dies mit einer Prise Salz, ich weiß nicht, C #), die gültig ist.System.Func<T, T>
, das einfloat
als Eingabe und ein anderes als Ausgabe annehmen würde . Die Deklaration würde so aussehenSystem.Func<float, float> f = n=>n*Math.Tan(Math.PI/n);
:, wo der bytecount beginnen würden=>
. In meinem Beispiel habe ich zwei Ihrer Klammern weggelassen, um 2 Bytes zu sparen;)RPNGolf 0,6 / 0,7 , 12 Bytes
Mein erster Beitrag mit RPNGolf, meiner neuen Stack-basierten Sprache!
Dies ist ein vollständiges Programm, das eine Ganzzahl von der Standardeingabe liest und die Ausgabe auf die Standardausgabe druckt (ohne nachfolgende Newline).
Erläuterung:
quelle