Trouver l'angle de référence

17

C'est une question assez simple. Selon ce site Web aléatoire que j'ai trouvé - Web Archive , un angle de référence est que the acute angle formed by the terminal side of the given angle and the x-axis.vous devez écrire un programme pour les trouver.

Je ne me souviens de rien de l'algèbre 2, qu'est-ce que cela signifie?

Les angles sont généralement donnés sous forme standard , qui est mesurée en plaçant un côté de l'angle et en mesurant de l'autre côté, dans le sens antihoraire, comme suit:

Forme standard

Ce sera votre contribution. Votre sortie sera l'angle de référence de cela. Vous pouvez considérer cela comme essentiellement la plus petite distance entre le côté terminal et l'axe x. Sauf que c'est un angle, pas une distance. Voici quelques exemples:

Quad 2 ref Quad 1 ref

Quad 3 ref Quad 4 ref

Clarifications

  • Tous les défauts sur les entrées et les soumissions.
  • Les angles sont en degrés .
  • Les angles négatifs, les angles non entiers et les angles> 360 degrés sont autorisés.
  • Sortie sous forme 60 deg.
  • C'est le , donc le code le plus court en octets gagne!

Un autre lien utile .

Cas de test

70      ->  70 deg
135     ->  45 deg
210     ->  30 deg
-60     ->  60 deg
91      ->  89 deg
610     ->  70 deg
-1000   ->  80 deg
Maltysen
la source
1
Que faisons-nous en entrée de 90?
lirtosiast
2
@ThomasKwa, ce serait 90 dans les deux sens.
Maltysen
1
Une solution courte est abs(arcsin(sin(input)))+" deg", bien que je ne sache pas quelle langue gagnerait (elle devrait prendre en charge les degrés et les opérations de chaîne).
lirtosiast
L'entrée est-elle toujours un entier?
lirtosiast
6
Étant donné que les angles non entiers sont autorisés, vous devez en inclure un dans les cas de test.
Dennis

Réponses:

6

Pyth, 18 octets

+.a-%+QK90yKK" deg

Essayez-le en ligne.

grovesNL
la source
réduit à 19 en utilisant votre algo mais avec assign en ligne, n'hésitez pas à utiliser: pyth.herokuapp.com/…
Maltysen
@Maltysen: Merci, nous avons également trouvé une autre amélioration
grovesNL
5

Python 2, 34 octets

lambda x:`90-abs(x%180-90)`+' deg'

L'utilisation du "%d deg"formatage de chaîne serait plus longue en raison des parenthèses nécessaires.

Sp3000
la source
5

CJam (21 octets)

180qd1$%z_@@-e<" deg"

Démo en ligne

Peter Taylor
la source
4

dc, 25

90?90+d*v180%-d*vn[ deg]p

Remarque dcutilise _comme signe -ve au lieu de -.

Sortie de test:

$ for test in 70 135 210 _60 91 610 _1000; do dc -e'90?90+d*v180%-d*vn[ deg]p' <<< $test ; done
70 deg
45 deg
30 deg
60 deg
89 deg
70 deg
80 deg
$
Traumatisme numérique
la source
3

Mathematica, 22 31

ToString@Abs@Mod[#,180,-90]deg&
alephalpha
la source
1
@ LegionMammal978 Si je le multiplie deg, 0 degdeviendra 0.
alephalpha
1
Puisque vous ne vous souciez pas du type de sortie, vous pouvez enregistrer 2 octets comme ceci:Row@{Abs@Mod[#,180,-90],deg}&
LegionMammal978
3

Python 2, 35

lambda x:`min(x%180,-x%180)`+' deg'

Le plus petit de l'angle et son modulo négatif 180. Convertit efficacement l'angle dans la plage de 0 à 180 et prend la distance au plus près des points d'extrémité. Notez que-x%180 groupes comme (-x)%180.

Même longueur avec formatage de chaîne pour Python 3:

lambda x:'%d deg'%min(x%180,-x%180)
xnor
la source
3

Pyth 25 30 octets

Solution douloureusement peu créative, utilisant les fonctions trigonométriques. Lien permanent

+.R.t.a.t.t.tQ7Z3 6?%Q1Q0" deg

Toutes les suggestions sont les bienvenues.

Winny
la source
1
.t+.R.t.a.tF[Q7Z3)6?%Q1Q0" deg
Je suis
Soigné. Je l' ai remarqué ne semble pas fonctionner avec une entrée à virgule flottante: 90.5 => 90.0 deg, cependant.
Winny
C'est parce que le vôtre ne le fait pas non plus: pyth.herokuapp.com/…
Maltysen
Capture intéressante. Avec entrée -60.5 => 60.5 degmais avec 60.5 => 60.0 deg. Ressemble à un problème avec Pyth - Exemple utilisant pyth / macros.py
Winny
1

JavaScript (ES6), 43 octets

Semblable à la réponse de Sp3000 , bien que le modulo soit assez long en raison du comportement en JavaScript .

f=x=>90-Math.abs((x%180+180)%180-90)+' deg'

Démo

Le code est réécrit dans ES5 pour la compatibilité du navigateur:

function f(x){return 90-Math.abs((x%180+180)%180-90)+' deg'}

// Snippet stuff
console.log = function(x){document.body.innerHTML += x + '<br>'};
[70,135,210,-60,91,610,-1000].map(function(v){console.log(f(v))});

CoffeeScript, 45 octets

f=(x)->90-Math.abs((x%180+180)%180-90)+' deg'
rink.attendant.6
la source
5
Je suppose que c'était une décision de conception par un ingénieur matériel PDP qui est responsable du fait que plusieurs décennies plus tard, nous avons encore très peu de langages à implémenter de manière %sensée.
Peter Taylor
Remplacer les 180 premiers par (t=180)puis remplacer les 180s suivants par t économiserait probablement quelques octets
Downgoat
@ vihan1086 C'est la même chose
rink.attendant.6
1

J, 26 octets

m=:180&|
' deg',~m@-":@<.m

Identique à la méthode de xnor .

Legendre
la source
1

Matlab, 44

Utilisation d'une fonction anonyme:

f=@(x)[num2str(min(mod([x -x],180))) ' deg']

Exemple:

>> f=@(x)[num2str(min(mod([x -x],180))) ' deg']
f = 
    @(x)[num2str(min(mod([x,-x],180))),' deg']

>> f(70)
ans =
70 deg

>> f(210)
ans =
30 deg

>> f(-1000)
ans =
80 deg
Luis Mendo
la source
4
Cela n'ajoute cependant pas le 'deg' à la fin. (N'a pas downvote.)
Legendre
@Legendre Oups. Merci! Corrigé
Luis Mendo
1

Scala, 40 35 caractères

(a:Int)⇒s"${90-(a%180-90).abs} deg"
gilad hoch
la source
-1

PHP, 44 octets

Prend un paramètre de ligne de commande. Encore une fois, PHP souffre du même problème que JavaScript .

<?=90-abs(($argv[1]%180+180)%180-90)+' deg';

L'utilisation de la solution canonique nécessite 53 octets (la conversion en degrés et radians prend beaucoup de caractères):

<?=rad2deg(abs(asin(sin(deg2rad($argv[1])))))+' deg';
rink.attendant.6
la source
1
PHP n'utilise-t-il pas .pour la concaténation?
Downgoat
@ vihan1086 Oui, PHP utilise .. Voté jusqu'à ce qu'il soit corrigé
Ismael Miguel