En trigonométrie, il existe certains angles appelés "angles spéciaux". En effet, lorsque vous prenez sin, cos ou tan de l'un de ces angles, vous obtenez un résultat facile à retenir car il s'agit d'une racine carrée d'un nombre rationnel. Ces angles spéciaux sont toujours des multiples de l'un pi/6
ou de l'autre pi/4
. Voici une visualisation de tous les angles spéciaux et de leurs valeurs de trig correspondantes.
Comme vous pouvez le voir, pour chaque angle, il s'agit d'une paire de nombres correspondante. Le premier nombre est le cosinus de cet angle et le second est le sinus de cet angle. Pour trouver la tangente d'un de ces angles, il suffit de diviser sin par cos. Par exemple, tan(pi/6)
est égal à
sin(pi/6) / cos(pi/6) ==
(1/2) / (√3/2) ==
1/√3 ==
√3/3
Le défi
Vous devez écrire un programme complet qui prend 3 entrées.
Un seul caractère représentant la fonction trig que vous êtes censé calculer. Ce sera soit 's' (sin), 'c' (cos), soit 't' (tan).
Le numérateur de l'angle d'entrée. Cela peut être n'importe quel entier positif. Notez qu'une entrée de 5 signifie que le numérateur est 5 * pi.
Le dénominateur de l'angle d'entrée. Ce sera toujours l'un des suivants:
1, 2, 3, 4, 6
Imprimez ensuite la valeur exacte de la fonction trig de cet angle. Voici une liste de sin, cos et tan de tous les angles jusqu'à 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
Si vous obtenez un nombre supérieur à 2pi, soustrayez-en 2pi jusqu'à ce que vous obteniez un nombre qui est dans la plage. Par exemple, sin(17pi/6)
c'est la même chose que sin(5pi/6)
== 1/2. Votre programme devrait effectuer une simplification de base, par exemple, si votre entrée est cos(2pi/4)
identique à cos(pi/2)
== 0. Les fonctions de trigonométrie intégrées ne sont pas autorisées.
La réponse la plus courte en octets gagne!
la source
Réponses:
Pyth,
125122 octetsUtilise la formule
n = 4 - |floor(4.5-9k)|
, oùkπ = θ
ie k est le quotient des deuxième et troisième entrées, pour déterminer quel angle spécial est en question: les angles 0, 30, 45, 60 et 90 degrés sont numérotés de 0 à 4 respectivement, et les 90 ~ 180 les angles de degrés vont en sens inverse; cette formule fonctionne pourθ∈[0,π]
. Les valeurs des sinus correspondants seraientsqrt(n)/2
et existantes, les tangentes non nulles seraient3^(n/2-1)
. Cependant, mon implémentation utilise des listes avec des chaînes compressées codées en dur pour un meilleur contrôle du format de sortie, et il semble que le code soit également plus court de cette façon.Transformons-le en pseudocode pythonique:
Testez en ligne .
la source