Dalam trigonometri, ada sudut tertentu yang dikenal sebagai "sudut khusus". Ini karena ketika Anda mengambil dosa, cos atau tan dari salah satu sudut ini, Anda mendapatkan hasil yang mudah diingat karena itu adalah akar kuadrat dari bilangan rasional. Sudut khusus ini selalu merupakan kelipatan dari keduanya pi/6
, atau pi/4
. Berikut adalah visualisasi dari semua sudut khusus, dan nilai trigonometri yang sesuai.
Seperti yang Anda lihat, untuk setiap sudut mereka adalah pasangan angka yang sesuai. Angka pertama adalah cosinus dari sudut itu, dan yang kedua adalah sinus dari sudut itu. Untuk menemukan garis singgung dari salah satu sudut ini, cukup bagi dosa dengan cos. Misalnya, tan(pi/6)
sama dengan
sin(pi/6) / cos(pi/6) ==
(1/2) / (√3/2) ==
1/√3 ==
√3/3
Tantangan
Anda harus menulis program lengkap yang membutuhkan 3 input.
Satu arang mewakili fungsi trigonometri yang seharusnya Anda hitung. Ini akan menjadi 's' (dosa), 'c' (cos), atau 't' (tan).
Pembilang dari sudut input. Ini bisa berupa bilangan bulat positif. Perhatikan bahwa input 5 berarti pembilangnya 5 * pi.
Penyebut dari sudut input. Ini akan selalu menjadi salah satu dari yang berikut:
1, 2, 3, 4, 6
Kemudian cetak nilai persisnya fungsi trigonometri dari sudut itu. Berikut adalah daftar dosa, cos, dan tan dari semua sudut hingga 2 * pi:
sin(0pi): 0
sin(pi/6): 1/2
sin(pi/4): root(2)/2
sin(pi/3): root(3)/2
sin(pi/2): 1
sin(2pi/3): root(3)/2
sin(3pi/4): root(2)/2
sin(5pi/6): 1/2
sin(1pi): 0
sin(7pi/6): -1/2
sin(5pi/4): -root(2)/2
sin(4pi/3): -root(3)/2
sin(3pi/2): -1
sin(5pi/3): -root(3)/2
sin(7pi/4): -root(2)/2
sin(11pi/6): -1/2
sin(2pi): 0
cos(0pi): 1
cos(pi/6): root(3)/2
cos(pi/4): root(2)/2
cos(pi/3): 1/2
cos(pi/2): 0
cos(2pi/3): -1/2
cos(3pi/4): -root(2)/2
cos(5pi/6): -root(3)/2
cos(1pi): -1
cos(7pi/6): -root(3)/2
cos(5pi/4): -root(2)/2
cos(4pi/3): -1/2
cos(3pi/2): 0
cos(5pi/3): 1/2
cos(7pi/4): root(2)/2
cos(11pi/6): root(3)/2
cos(2pi): 1
tan(0pi): 0
tan(pi/6): root(3)/3
tan(pi/4): 1
tan(pi/3): root(3)
tan(pi/2): nan
tan(2pi/3): -root(3)
tan(3pi/4): -1
tan(5pi/6): -root(3)/3
tan(1pi): 0
tan(7pi/6): root(3)/3
tan(5pi/4): 1
tan(4pi/3): root(3)
tan(3pi/2): nan
tan(5pi/3): -root(3)
tan(7pi/4): -1
tan(11pi/6): -root(3)/3
tan(2pi): 0
Jika Anda mendapatkan angka yang lebih besar dari 2pi, kurangi 2pi darinya hingga Anda mendapatkan angka yang ada dalam jangkauan. Misalnya, sin(17pi/6)
sama dengan sin(5pi/6)
== 1/2. Program Anda diharapkan untuk melakukan penyederhanaan dasar, misalnya, jika input Anda cos(2pi/4)
sama dengan cos(pi/2)
== 0. Fungsi trigonometri bawaan tidak diizinkan.
Jawaban terpendek dalam byte menang!
sumber
Jawaban:
Pyth,
125122 byteMenggunakan rumus
n = 4 - |floor(4.5-9k)|
, di manakπ = θ
k adalah hasil bagi input kedua dan ketiga, untuk menentukan sudut khusus mana yang dipertanyakan: sudut 0, 30, 45, 60 dan 90 derajat diberi nomor masing-masing 0 hingga 4, dan 90 ~ 180 derajat sudut bergerak terbalik; rumus ini berfungsi untukθ∈[0,π]
. Nilai-nilai sinus yang sesuai akansqrt(n)/2
dan ada, garis singgung non-nol akan3^(n/2-1)
. Namun, implementasi saya menggunakan daftar dengan string terkompresi hard-code untuk kontrol yang lebih tinggi dari format output, dan sepertinya kode lebih pendek juga.Mari mengubahnya menjadi kodesemu pythonic:
Tes online .
sumber