Biorąc pod uwagę liczbę całkowitą, n
gdzie 3 <= n < 2^32
oblicz pole regularnego n
-gona z apothemem 1; wzór, dla którego jest n * tan(π / n)
. Dla tych, którzy nie wiedzą, czym jest apothem:
Apothem zwykłego wielokąta jest odcinek linii od środka do środka jednego z jego boków.
Wypisuje obszar n
-gon jako zmiennoprzecinkowy z nie mniej niż 8 miejscami dziesiętnymi.
Przypadki testowe
3
5.1961524227
6
3.4641016151
10
3.2491969623
20
3.1676888065
99
3.1426476062
1697
3.1415962425
15000
3.1415926995
Uwaga: powyższe przypadki testowe zawierają 2 cyfry więcej niż jest to wymagane do wydrukowania.
Area@RegularPolygon
powinno byćArea@*RegularPolygon
; tak jak jest teraz, nie można go przechwycić w zmiennej. Oznacza to,f = Area@RegularPolygon; f[3]
że nie działa. Odpowiednia meta dyskusjaJava (OpenJDK 9) , 24 bajty
Wypróbuj online!
źródło
Właściwie 5 bajtów
Wypróbuj online!
W jaki sposób?
Alternatywa:
ß╦/T*
. o_O Właściwie to faktycznie pokonuje Galaretkę !!!źródło
Kod maszynowy x87, 11 bajtów
Powyższe bajty kodu definiują funkcję, która oblicza obszar zwykłego n-gona z apothemem 1. Używa instrukcji x87 FPU (klasyczna jednostka zmiennoprzecinkowa na procesorach x86) do wykonania tego obliczenia.
Zgodnie ze standardową konwencją wywoływania opartą na rejestrze x86 (w tym przypadku
__fastcall
) argumentem funkcji jest wskaźnik do liczby całkowitej przekazywanej doECX
rejestru. Wynikiem tej funkcji jest wartość zmiennoprzecinkowa, zwracana na górze stosu zmiennoprzecinkowego (rejestrST0
) x87 .Wypróbuj online!
Mnemoniki do montażu bez golfa:
Jak widać, jest to po prostu proste obliczenie podanej formuły,
wynik = n * tan (π / n)
Wskazuje tylko kilka interesujących rzeczy:
FLDPI
). Było to rzadko używane, nawet z powrotem w ciągu dnia (i oczywiście znacznie mniej teraz), ale ma mniejszy rozmiar niż osadzanie stałej w pliku binarnym i ładowanie tego.FPTAN
zastępuje wartość rejestru wejściowego (górną część stosu FPU) wynikiem, ale także wypycha stałą 1,0 na górę stosu FPU. Odbywa się to dla kompatybilności wstecznej z 8087 (nie mam pojęcia, dlaczego zrobiono to na 8087; prawdopodobnie błąd). Oznacza to, że musimy usunąć tę niepotrzebną wartość ze stosu. Najszybszy i najkrótszy sposób, aby to zrobić, jest prostyFSTP st0
, jak tutaj. Moglibyśmy również wykonać pomnożenie i pop , ponieważ pomnożenie przez 1,0 nie zmieni wyniku, ale są to również 2 bajty (więc nie ma wygranej w rozmiarze kodu), prawdopodobnie wykona się wolniej i może wprowadzić niepotrzebną nieokreśloność do wynik.Chociaż nowoczesny programista lub kompilator używałby zestawu instrukcji SSE (i późniejszych) zamiast starzejącego się x87, wymagałoby to więcej kodu do wdrożenia, ponieważ nie ma jednej instrukcji do obliczenia stycznej w nowszych wersjach ISA.
źródło
Galaretka , 6 bajtów
Wypróbuj online!
Wbudowane π Jelly ma> 8 miejsc po przecinku.
źródło
Brachylog , 9 bajtów
Wypróbuj online!
źródło
Sakura , 4 bajty
Zostało to rozszerzone na
*ij/π⓪⓪
, czyliźródło
R , 25 bajtów
Wejście ze standardowego wejścia, wyjście na standardowe wyjście.
Wypróbuj online!
źródło
cat()
. 5 bajtów mniej.MATL , 7 bajtów
Wypróbuj online!
źródło
Japt , 7 bajtów
Sprawdź to
Wyjaśnienie
Po prostu implementuje forumla, gdzie
Mt
jest tan,MP
jest pi iU
stanowi dane wejściowe.źródło
Ohm v2 , 7 bajtów
Wypróbuj online!
W jaki sposób?
źródło
var'aq , 51 bajtów
Wyjaśnienie
źródło
Common Lisp, 29 bajtów
Wypróbuj online!
źródło
JavaScript (ES6), 24 bajty
Spróbuj
źródło
Python 2 , 45 bajtów
Wypróbuj online!
źródło
Pyth , 9 bajtów
Zestaw testowy.
W jaki sposób?
źródło
Gaia , 5 bajtów
Wypróbuj online!
W jaki sposób?
źródło
Szybki , 35 bajtów
Z ostrzeżeniami kompilatora:
Wypróbuj tutaj!
Bez ostrzeżeń kompilatora 40 bajtów :
źródło
Excel, 16 bajtów
źródło
Perl, 14 + 16 = 30
14 bajtów dla właściwego programu i 16 dla przełączników wiersza poleceń
źródło
Prolog (SWI) , 25 bajtów
Wypróbuj online!
To jest moje pierwsze zgłoszenie do codegolf, mam nadzieję, że mam się dobrze. Napisane jako funkcja.
źródło
Język formuły IBM / Lotus Notes, 13 bajtów
Dane wejściowe pobierane za pośrednictwem pola o nazwie a w tym samym formularzu, co pole zawierające formułę. Brak dostępnych TIO, więc zrzut ekranu wszystkich przypadków testowych pokazanych poniżej:
źródło
PowerShell , 38 bajtów
Wypróbuj online!
Robi dokładnie to, co jest napisane na puszce, tylko trochę dłużej z powodu długich
[math]::
połączeń .NET.źródło
Rubinowy , 27 bajtów
Wypróbuj online!
źródło
Pari / GP , 14 bajtów
Wypróbuj online!
źródło
C # (kompilator Mono C #) , 24 bajty
Wypróbuj online!
źródło
n=>
na początku, aby uczynić to funkcją strzałki (weź to ze szczyptą soli, nie znam C #), co jest poprawne.System.Func<T, T>
, który pobierałbyfloat
jako dane wejściowe, a drugi jako dane wyjściowe. Deklaracja wyglądałaby następującoSystem.Func<float, float> f = n=>n*Math.Tan(Math.PI/n);
:, od której bytecount zaczynałby sięn=>
. W moim przykładzie pominąłem dwa z twoich nawiasów, aby zaoszczędzić 2 bajty;)RPNGolf 0,6 / 0,7 , 12 bajtów
Mój pierwszy post przy użyciu RPNGolf, mojego nowego języka opartego na stosie!
Jest to pełny program, który odczytuje liczbę całkowitą ze standardowego wejścia i drukuje dane wyjściowe na standardowe wyjście (bez końcowego znaku nowej linii).
Wyjaśnienie:
źródło