Diberikan bilangan bulat,, di n
mana 3 <= n < 2^32
, menghitung luas n
-gon reguler dengan apotema 1; rumus untuk yang n * tan(π / n)
. Bagi mereka yang tidak tahu apa itu apotema:
Apotem poligon beraturan adalah segmen garis dari pusat ke titik tengah salah satu sisinya.
Keluarkan area n
-gon sebagai titik mengambang dengan tidak kurang dari 8 tempat desimal.
Uji kasus
3
5.1961524227
6
3.4641016151
10
3.2491969623
20
3.1676888065
99
3.1426476062
1697
3.1415962425
15000
3.1415926995
Catatan: Kasing uji di atas mencakup 2 digit lebih banyak dari yang dibutuhkan untuk menghasilkan.
Area@RegularPolygon
seharusnyaArea@*RegularPolygon
; seperti sekarang, tidak bisa ditangkap dalam variabel. Artinya,f = Area@RegularPolygon; f[3]
tidak berfungsi. Diskusi meta yang relevanJava (OpenJDK 9) , 24 byte
Cobalah online!
sumber
Sebenarnya , 5 byte
Cobalah online!
Bagaimana?
Alternatif:
ß╦/T*
. o_O Sebenarnya sebenarnya mengalahkan Jelly !!!sumber
x87 Kode Mesin, 11 byte
Byte kode di atas mendefinisikan fungsi yang menghitung luas n-gon reguler dengan apothem 1. Menggunakan instruksi FPU x87 (unit floating-point klasik pada prosesor x86) untuk melakukan perhitungan ini.
Mengikuti konvensi pemanggilan berbasis register x86 standar (dalam hal ini,
__fastcall
), argumen fungsi adalah sebuah pointer ke integer, diteruskan dalamECX
register. Hasil fungsi adalah nilai titik-mengambang, dikembalikan di bagian atas tumpukan titik-mengambang x87 (registerST0
).Cobalah online!
Mnemonik perakitan tidak dikumpulkan:
Seperti yang Anda lihat, ini pada dasarnya hanya perhitungan langsung dari rumus yang diberikan,
hasil = n * tan (π / n)
Hanya beberapa hal menarik yang menunjukkan:
FLDPI
). Ini jarang digunakan, bahkan pada hari itu (dan jelas jauh lebih sedikit sekarang), tetapi ukurannya lebih pendek daripada memasukkan konstanta ke dalam biner Anda dan memuatnya.FPTAN
menggantikan nilai register input (bagian atas tumpukan FPU) dengan hasilnya, tetapi juga mendorong konstanta 1,0 ke atas tumpukan FPU. Ini dilakukan untuk kompatibilitas dengan 8087 (saya tidak tahu mengapa ini dilakukan pada 8087; mungkin bug). Itu berarti kita perlu membuang nilai yang tidak dibutuhkan ini dari tumpukan. Cara tercepat dan terpendek untuk melakukannya adalah sederhanaFSTP st0
, seperti yang kami gunakan di sini. Kita juga bisa melakukan multiply-and-pop , karena mengalikan dengan 1,0 tidak akan mengubah hasilnya, tetapi ini juga 2 byte (jadi tidak ada kemenangan dalam ukuran kode), mungkin akan mengeksekusi lebih lambat, dan dapat memperkenalkan ketidakpastian yang tidak perlu ke dalam hasil.Meskipun seorang programmer atau kompiler modern akan menggunakan set instruksi SSE (dan yang lebih baru), daripada x87 yang menua, ini akan membutuhkan lebih banyak kode untuk diimplementasikan, karena tidak ada instruksi tunggal untuk menghitung garis singgung dalam SPA yang lebih baru ini.
sumber
Jelly , 6 byte
Cobalah online!
Jelly bawaan has memiliki> 8 tempat desimal.
sumber
Brachylog , 9 byte
Cobalah online!
sumber
Sakura , 4 byte
Ini diperluas ke
*ij/π⓪⓪
, yaitusumber
R , 25 byte
Input dari stdin, output ke stdout.
Cobalah online!
sumber
cat()
. 5 byte lebih sedikit.MATL , 7 byte
Cobalah online!
sumber
Japt , 7 byte
Menguji
Penjelasan
Hanya mengimplementasikan forumla, di mana
Mt
tan,MP
adalah pi danU
inputnya.sumber
Ohm v2 , 7 byte
Cobalah online!
Bagaimana?
sumber
var'aq , 51 byte
Penjelasan
sumber
Gangguan Umum, 29 byte
Cobalah online!
sumber
JavaScript (ES6), 24 byte
Cobalah
sumber
Python 2 , 45 byte
Cobalah online!
sumber
Pyth , 9 byte
Suite uji.
Bagaimana?
sumber
Gaia , 5 byte
Cobalah online!
Bagaimana?
sumber
Swift , 35 byte
Dengan peringatan kompiler:
Coba di sini!
Tanpa peringatan kompiler, 40 byte :
sumber
Excel, 16 byte
sumber
Perl, 14 + 16 = 30
14 byte untuk program yang tepat, dan 16 untuk switch baris perintah
sumber
Prolog (SWI) , 25 byte
Cobalah online!
Ini adalah pengiriman pertama saya ke codegolf, harap saya baik-baik saja. Ditulis sebagai fungsi.
sumber
Bahasa Formula IBM / Lotus Notes, 13 byte
Input diambil melalui bidang bernama a pada formulir yang sama dengan bidang yang berisi rumus. Tidak ada TIO yang tersedia sehingga tangkapan layar dari semua kasus uji yang ditunjukkan di bawah:
sumber
PowerShell , 38 byte
Cobalah online!
Melakukan persis apa yang tertulis di kaleng, hanya butuh sedikit lebih lama karena
[math]::
panggilan NET lama .sumber
Ruby , 27 byte
Cobalah online!
sumber
Pari / GP , 14 byte
Cobalah online!
sumber
C # (Mono C # compiler) , 24 byte
Cobalah online!
sumber
n=>
ke awal untuk membuat ini menjadi fungsi panah (ambil ini dengan sejumput garam, saya tidak tahu C #) yang valid.System.Func<T, T>
, yang akan mengambilfloat
input sebagai dan yang lain sebagai output. Deklarasi akan terlihat seperti iniSystem.Func<float, float> f = n=>n*Math.Tan(Math.PI/n);
:, di mana bytecount akan dimulain=>
. Dalam contoh saya, saya menghilangkan dua tanda kurung Anda untuk menghemat 2 byte;)RPNGolf 0.6 / 0.7 , 12 byte
Posting pertama saya menggunakan RPNGolf, bahasa berbasis stack baru saya!
Ini adalah program lengkap yang membaca bilangan bulat dari input standar dan mencetak output ke output standar (tanpa baris tambahan).
Penjelasan:
sumber