특수 각도의 죄, 코사인 및 황갈색 인쇄


9

삼각법에는 "특수 각도"라고 알려진 특정 각도가 있습니다. 이러한 각도 중 하나의 죄, 코사인 또는 황갈색을 취하면 합리적인 수의 제곱근이므로 기억하기 쉬운 결과를 얻을 수 있기 때문입니다. 이러한 특수 각도는 항상 pi/6또는의 배수입니다 pi/4. 다음은 모든 특수 각도와 해당 삼각 값의 시각화입니다.

삼각 값

보시다시피, 각 각도마다 해당 숫자 쌍이 있습니다. 첫 번째 숫자는 해당 각도의 코사인이고 두 번째 숫자는 해당 각도의 사인입니다. 이 각도 중 하나의 탄젠트를 찾으려면 죄를 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의 모든 각도의 죄, 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). 예를 들어 입력 값 cos(2pi/4)cos(pi/2)== 0 과 같은 경우 프로그램은 기본 단순화를 수행해야 합니다. 내장 삼각법 함수는 허용되지 않습니다.

바이트 단위의 최단 답변이 승리합니다!


출력 형식이 정확하게 지정되어야합니까?
lirtosiast

@ThomasKwa 네.
제임스


@DigitalTrauma Haha, 그 다음 도전이 될 것입니다! Jk ...
제임스

답변:


2

Pyth, 125 122 바이트

화학식 용도 n = 4 - |floor(4.5-9k)|, kπ = θ질문에 특정되는 각도를 결정하기 위해, 즉 k는 두 번째와 세 번째 입력의 몫이다 값 : 0, 30, 45, 60 및 90 °는 각각 0 내지 4로 번호되는 각도와 90 ~ 180 각도는 반대로되어있다. 이 수식은에 적용 θ∈[0,π]됩니다. 대응하는 사인 값은 sqrt(n)/2존재하고 존재하며 0이 아닌 탄젠트 값은입니다 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

그것을 파이썬 의사 코드로 바꾸어 봅시다 :

                                   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.