Temukan sudut referensi


17

Ini pertanyaan yang cukup sederhana. Menurut website ini random saya menemukan - Web Archive , sudut referensi the acute angle formed by the terminal side of the given angle and the x-axis.Anda harus menulis sebuah program untuk menemukan ini.

Saya tidak ingat apa pun dari aljabar 2, apa artinya ini?

Angles biasanya diberikan dalam bentuk standar , yang diukur dengan menempatkan satu sisi sudut dan mengukur ke sisi lain, berlawanan, seperti:

Bentuk standar

Ini akan menjadi masukan Anda. Output Anda akan menjadi sudut referensi ini. Anda dapat menganggap ini pada dasarnya jarak terkecil dari sisi terminal ke sumbu x. Kecuali itu sudut, bukan jarak. Berikut ini beberapa contohnya:

Ref 2 Quad Ref 1 kuad

Rujukan kuad 3 Ref 4 kuad

Klarifikasi

  • Semua default pada input dan pengiriman.
  • Sudut dalam derajat .
  • Sudut negatif, sudut non-integer, dan sudut> 360 deg yang diperbolehkan.
  • Output dalam bentuk 60 deg.
  • Ini adalah , jadi kode terpendek dalam byte menang!

Tautan bermanfaat lainnya .

Uji Kasus

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

1
Apa yang kita lakukan pada input 90?
lirtosiast

2
@ ThomasKwa itu akan menjadi 90 dari kedua arah.
Maltysen

1
Solusi singkatnya adalah abs(arcsin(sin(input)))+" deg", meskipun saya tidak tahu bahasa mana yang akan menang (itu perlu mendukung operasi derajat dan string).
lirtosiast

Apakah input selalu berupa bilangan bulat?
lirtosiast

6
Karena sudut non-integer diperbolehkan, Anda harus memasukkan satu dalam kasus uji.
Dennis

Jawaban:




5

Python 2, 34 byte

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

Menggunakan "%d deg"pemformatan string akan lebih lama karena tanda kurung yang dibutuhkan.



4

dc, 25

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

Note dcmenggunakan _sebagai tanda -ve bukan -.

Output tes:

$ 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 Jika saya hanya melipatgandakannya deg, 0 degakan menjadi 0.
alephalpha

1
Karena Anda tidak peduli dengan tipe output, Anda dapat menyimpan 2 byte seperti ini:Row@{Abs@Mod[#,180,-90],deg}&
LegionMammal978

3

Python 2, 35

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

Semakin kecil sudut dan modulo negatifnya 180. Secara efektif mengubah sudut ke rentang dari 0 hingga 180 dan membawa jarak ke titik akhir yang lebih dekat. Perhatikan bahwa -x%180kelompokkan sebagai (-x)%180.

Panjang yang sama dengan pemformatan string untuk Python 3:

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

3

Pyth 25 30 byte

Solusi menyakitkan yang tidak kreatif, menggunakan fungsi trigonometri. Permalink

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

Ada saran yang diterima.


1
.t+.R.t.a.tF[Q7Z3)6?%Q1Q0" deg
Menurunkannya

Rapi. Saya melihat tidak muncul untuk bekerja dengan masukan floating point: 90.5 => 90.0 deg, meskipun.
Winny

Itu karena punyamu juga tidak: pyth.herokuapp.com/...
Maltysen

Tangkapan yang menarik. Dengan input -60.5 => 60.5 degtetapi dengan 60.5 => 60.0 deg. Sepertinya masalah dengan Pyth - Contoh menggunakan pyth / macros.py
Winny

1

JavaScript (ES6), 43 byte

Mirip dengan jawaban Sp3000 , meskipun modulo cukup panjang karena perilaku dalam JavaScript .

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

Demo

Kode ditulis ulang dalam ES5 untuk kompatibilitas 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
Saya berasumsi itu adalah keputusan desain oleh seorang insinyur perangkat keras PDP yang bertanggung jawab atas kenyataan bahwa beberapa dekade kemudian kita masih memiliki sedikit bahasa yang mengimplementasikannya dengan %bijaksana.
Peter Taylor

Mengganti 180 pertama dengan (t=180)kemudian mengganti 180 berikut dengan t mungkin akan menghemat beberapa byte
Downgoat

@ vihan1086 Sama saja
rink.attendant.6


1

Matlab, 44

Menggunakan fungsi anonim:

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

Contoh:

>> 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
Ini tidak menambahkan 'deg' pada akhirnya. (Tidak downvote.)
Legendre

@Legendre Ups. Terima kasih! Diperbaiki
Luis Mendo



-1

PHP, 44 byte

Mengambil satu parameter baris perintah. Sekali lagi PHP menderita masalah yang sama dengan JavaScript .

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

Menggunakan solusi kanonik membutuhkan 53 byte (konversi derajat dan radian membutuhkan banyak karakter):

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

1
Bukankah PHP digunakan .untuk penggabungan?
Downgoat

@ vihan1086 Ya, PHP menggunakan .. Diturunkan hingga diperbaiki
Ismael Miguel
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.