特別な角度の罪、余弦、日焼けを印刷する


9

三角法では、「特別な角度」と呼ばれる特定の角度があります。これは、これらの角度のいずれかのsin、cos、またはtanを取ると、有理数の平方根であるため、覚えやすい結果が得られるためです。これらの特別な角度は常にpi/6、またはの倍数ですpi/4。以下は、すべての特別な角度とそれに対応するトリガー値の視覚化です。

トリガー値

ご覧のとおり、角度ごとに対応する数値のペアです。最初の数値はその角度の余弦で、2番目の数値はその角度の正弦です。これらの角度の1つの接線を見つけるには、sinをcosで割ります。たとえば、次tan(pi/6)と等しい

sin(pi/6) / cos(pi/6) == 
(1/2) / (√3/2) ==
1/√3 ==
√3/3

チャレンジ

3つの入力を受け取る完全なプログラムを作成する必要があります。

  1. 計算することになっているトリガー関数を表す単一の文字。これは、 's'(sin)、 'c'(cos)、または 't'(tan)のいずれかになります。

  2. 入力角度の分子。これは任意の正の整数です。5の入力は、分子が5 * piであることを意味することに注意してください。

  3. 入力角度の分母。これは常に次のいずれかになります。1, 2, 3, 4, 6

次に、その角度のトリガー関数の正確な値を出力します。以下は、2 * piまでのすべての角度のsin、cos、tanのリストです。

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

2piより大きい数値を取得した場合は、範囲内の数値が得られるまで、2piを引きます。たとえば、== 1/2 sin(17pi/6)と同じsin(5pi/6)です。たとえば、入力が== 0 cos(2pi/4)と同じである場合、プログラムは基本的な単純化を行うことが期待されていますcos(pi/2)。組み込みの三角関数は許可されていません。

バイト単位の最短の答えが勝ちます!


出力フォーマットは指定されたとおりでなければなりませんか?
リルトシアスト2016

@ThomasKwaはい。
ジェームズ


@DigitalTraumaハハ、それが次の挑戦です!Jk ...
James

回答:


2

Pyth、125 122バイト

式を使用しますn = 4 - |floor(4.5-9k)|。ここで、kπ = θkは2番目と3番目の入力の商であり、問​​題となっている特別な角度を決定します。角度0、30、45、60、90度にはそれぞれ0〜4の番号が付けられ、90〜180度の角度は逆になります。この式はで機能しθ∈[0,π]ます。対応する正弦の値はでsqrt(n)/2あり、存在します3^(n/2-1)。ゼロ以外の接線はです。ただし、私の実装では、ハードコードされた圧縮文字列を含むリストを使用して、出力形式をより細かく制御しています。コードもそのように短いようです。

A,c." t8¾Îzp³9ÓÍÕ¬$ ·Íb³°ü"dc." t@a'óè©ê¶oyÑáîwÀ(";J+cEE?qz\c.5ZK-4.as-4.5*3*3%J1?qz\t+?>%J1 .5\-k@GK+?>%J2 1\-k@HK

それをpythonic pseudocodeに変えましょう:

                                   z = input()
                                   k = ""
                                   d = " "
                                   Z = 0
A,c." t8¾Îzp³9ÓÍÕ¬$ ·Íb³°ü"d       G = "0 sqrt(3)/3 1 sqrt(3) nan".split(d)
  c." t@a'óè©ê¶oyÑáîwÀ(";          H = "0 1/2 sqrt(2)/2 sqrt(3)/2 1".split()
J+cEE                              J = eval(input())/eval(input()) +
  ?qz\c.5Z                             0.5 if z == "c" else Z
                                   # the second term converts sin to cos
K-4.as-4.5*3*3%J1                  K = 4 - abs(int(4.5 - 3*3*(J%1)))
                                   # 9* would lose precision so 3*3* instead
?qz\t                              if z == "t"
  +?>%J1 .5\-k                         print(("-" if J%1 > 0.5 else k) +
   @GK                                     G[K])
                                   else:
  +?>%J2 1\-k                          print(("-" if J%2 > 1 else k) +
   @HK                                     H[K])

オンラインでテストします

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.