Na trigonometria, existem certos ângulos conhecidos como "ângulos especiais". Isso ocorre porque quando você toma o pecado, cos ou tan de um desses ângulos, obtém um resultado fácil de lembrar, porque é a raiz quadrada de um número racional. Esses ângulos especiais são sempre múltiplos de um pi/6
ou outro pi/4
. Aqui está uma visualização de todos os ângulos especiais e seus correspondentes valores trigonométricos.
Como você pode ver, para cada ângulo, é um par correspondente de números. O primeiro número é cosseno desse ângulo e o segundo é seno desse ângulo. Para encontrar a tangente de um desses ângulos, basta dividir o pecado por cos. Por exemplo, tan(pi/6)
é igual a
sin(pi/6) / cos(pi/6) ==
(1/2) / (√3/2) ==
1/√3 ==
√3/3
O desafio
Você deve escrever um programa completo que aceite 3 entradas.
Um único caractere representando a função trigonométrica que você deve calcular. Será 's' (pecado), 'c' (cos) ou 't' (tan).
O numerador do ângulo de entrada. Pode ser qualquer número inteiro positivo. Observe que uma entrada 5 significa que o numerador é 5 * pi.
O denominador do ângulo de entrada. Este sempre será um dos seguintes:
1, 2, 3, 4, 6
Em seguida, imprima o valor exato da função trigonométrica desse ângulo. Aqui está uma lista de sin, cos e tan de todos os ângulos até 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
Se você obtiver um número maior que 2pi, subtraia 2pi dele até obter um número dentro do intervalo. Por exemplo, sin(17pi/6)
é o mesmo que sin(5pi/6)
== 1/2. Espera-se que seu programa faça simplificação básica, por exemplo, se sua entrada for cos(2pi/4)
igual a cos(pi/2)
== 0. As funções trigonométricas incorporadas não serão permitidas.
Menor resposta em bytes ganha!
fonte
Respostas:
Pitão,
125122 bytesUsa a fórmula
n = 4 - |floor(4.5-9k)|
, ondekπ = θ
ie k é o quociente da segunda e terceira entradas, para determinar qual ângulo especial está em questão: os ângulos 0, 30, 45, 60 e 90 graus são numerados de 0 a 4 respectivamente e os 90 ~ 180 graus ângulos de marcha à ré; Essa fórmula funciona paraθ∈[0,π]
. Os valores dos senos correspondentes seriamsqrt(n)/2
e existiriam , tangentes diferentes de zero3^(n/2-1)
. No entanto, minha implementação usa listas com seqüências compactadas codificadas para maior controle do formato de saída, e parece que o código também é mais curto.Vamos transformá-lo em pseudocódigo pitônico:
Teste online .
fonte