Trova l'angolo di riferimento


17

Questa è una domanda abbastanza semplice. Secondo questo sito web casuale che ho trovato - Web Archive , un angolo di riferimento è che the acute angle formed by the terminal side of the given angle and the x-axis.devi scrivere un programma per trovarli.

Non ricordo nulla dell'algebra 2, cosa significa?

Gli angoli sono generalmente indicati in forma standard , che viene misurata posizionando un lato dell'angolo e misurando sull'altro lato, in senso antiorario, in questo modo:

Modulo standard

Questo sarà il tuo contributo. Il tuo output sarà l'angolo di riferimento di questo. Puoi pensare a questo come sostanzialmente la distanza minima dal lato terminale all'asse x. Tranne che è un angolo, non una distanza. Ecco alcuni esempi:

Quad 2 rif Quad 1 rif

Quad 3 rif Quad 4 rif

chiarimenti

  • Tutte le impostazioni predefinite su input e invii.
  • Gli angoli sono in gradi .
  • Sono consentiti angoli negativi, angoli non interi e angoli> 360 gradi .
  • Uscita in forma 60 deg.
  • Questo è , quindi vince il codice più breve in byte!

Un altro link utile .

Casi test

70      ->  70 deg
135     ->  45 deg
210     ->  30 deg
-60     ->  60 deg
91      ->  89 deg
610     ->  70 deg
-1000   ->  80 deg

1
Cosa facciamo sull'input di 90?
lirtosiast,

2
@ThomasKwa sarebbe 90 da entrambe le direzioni.
Maltysen,

1
Una soluzione breve è abs(arcsin(sin(input)))+" deg", anche se non so quale lingua vincerebbe (dovrebbe supportare i gradi e le operazioni di stringa).
lirtosiast,

L'input è sempre un numero intero?
lirtosiast,

6
Poiché sono consentiti angoli non interi, è necessario includerne uno nei casi di test.
Dennis,

Risposte:




5

Python 2, 34 byte

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

L'uso "%d deg"della formattazione delle stringhe sarebbe più lungo a causa delle parentesi necessarie.



4

dc, 25

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

Nota dcutilizza _come segno -ve anziché -.

Uscita di prova:

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

3

Mathematica, 22 31

ToString@Abs@Mod[#,180,-90]deg&

1
@ LegionMammal978 Se lo moltiplico per deg, 0 degdiventerà 0.
alephalpha,

1
Poiché non ti interessa il tipo di output, puoi salvare 2 byte in questo modo:Row@{Abs@Mod[#,180,-90],deg}&
LegionMammal978

3

Python 2, 35

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

Il più piccolo dell'angolo e suo modulo negativo 180. Converte efficacemente l'angolo nell'intervallo da 0 a 180 e porta la distanza al punto più vicino degli endpoint. Si noti che i -x%180gruppi come (-x)%180.

Stessa lunghezza con la formattazione delle stringhe per Python 3:

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

3

Pyth 25 30 byte

Soluzione dolorosamente non creativa, che utilizza le funzioni di attivazione. Permalink

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

Eventuali suggerimenti sono benvenuti.


1
Sono arrivato al 28 prendendo le .tchiamate e mettendole in piega:+.R.t.a.tF[Q7Z3)6?%Q1Q0" deg
Maltysen il

Neat. Ho notato che non sembra funzionare con un input in virgola mobile: 90.5 => 90.0 degperò.
Winny, il

Questo perché neanche il tuo: pyth.herokuapp.com/…
Maltysen,

Cattura interessante. Con input -60.5 => 60.5 degma con 60.5 => 60.0 deg. Sembra un problema con Pyth - Esempio usando pyth / macros.py
Winny

1

JavaScript (ES6), 43 byte

Simile alla risposta di Sp3000 , sebbene il modulo sia piuttosto lungo a causa del comportamento in JavaScript .

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

dimostrazione

Il codice viene riscritto in ES5 per la compatibilità del browser:

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 byte

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

5
Suppongo che sia stata una decisione di progettazione da parte di un ingegnere hardware PDP che è responsabile del fatto che diversi decenni dopo abbiamo ancora pochissimi linguaggi che implementano in %modo ragionevole.
Peter Taylor,

Sostituire i primi 180 con la (t=180)sostituzione dei successivi 180 con t probabilmente risparmierebbe qualche byte
Downgoat

@ vihan1086 È lo stesso
rink.attendant.6


1

Matlab, 44

Utilizzando una funzione anonima:

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

Esempio:

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

4
Questo non aggiunge il 'deg' alla fine però. (Non sottovalutato.)
Legendre,

@Legendre Oops. Grazie! Corretto
Luis Mendo il

1

Scala, 40 35 personaggi

(a:Int)⇒s"${90-(a%180-90).abs} deg"


-1

PHP, 44 byte

Accetta un parametro della riga di comando. Ancora una volta PHP soffre dello stesso problema di JavaScript .

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

L'uso della soluzione canonica richiede 53 byte (la conversione in gradi e radianti richiede molti caratteri):

<?=rad2deg(abs(asin(sin(deg2rad($argv[1])))))+' deg';

1
PHP non usa .per la concatenazione?
Downgoat,

@ vihan1086 Sì, utilizza PHP .. Sottovalutato fino a quando non verrà risolto
Ismael Miguel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.