พิมพ์ sin, cos และ tan ของมุมพิเศษ


9

ในตรีโกณมิติมีมุมบางมุมที่เรียกว่า "มุมพิเศษ" นี่เป็นเพราะเมื่อคุณทำบาป cos หรือสีแทนของมุมใดมุมหนึ่งคุณจะได้ผลลัพธ์ที่จำได้ง่ายเพราะเป็นรากที่สองของจำนวนตรรกยะ มุมพิเศษเหล่านี้มักจะมีหลายอย่างใดอย่างหนึ่งหรือ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

จากนั้นพิมพ์ค่าที่แน่นอนของฟังก์ชัน trig ของมุมนั้น นี่คือรายการของบาป cos และผิวสีแทนของทุกมุมจนถึง 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

หากคุณได้รับตัวเลขที่มากกว่า 2pi ให้ลบ 2pi ออกจากนั้นจนกว่าคุณจะได้ตัวเลขที่อยู่ในช่วง ตัวอย่างเช่นsin(17pi/6)เหมือนกับsin(5pi/6)== 1/2 โปรแกรมของคุณคาดว่าจะทำให้เข้าใจง่ายพื้นฐานตัวอย่างเช่นหากอินพุตของคุณเป็นcos(2pi/4)เช่นนี้เหมือนกับcos(pi/2)== 0 ฟังก์ชันตรีโกณมิติในตัวไม่ได้รับอนุญาต

คำตอบที่สั้นที่สุดในการชนะไบต์!


รูปแบบผลลัพธ์จะต้องตรงตามที่ระบุไว้หรือไม่
lirtosiast

@ThomasKwa ใช่
James


@DigitalTrauma ฮ่าฮ่านั่นจะเป็นความท้าทายครั้งต่อไป! Jk ...
James

คำตอบ:


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 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.