Tìm góc tham chiếu


17

Đây là một câu hỏi khá đơn giản. Theo trang web ngẫu nhiên này tôi tìm thấy - Lưu trữ web , một góc tham chiếu là the acute angle formed by the terminal side of the given angle and the x-axis.Bạn phải viết một chương trình để tìm những thứ này.

Tôi không nhớ bất cứ điều gì từ đại số 2, điều này có nghĩa là gì?

Các góc thường được đưa ra ở dạng tiêu chuẩn , được đo bằng cách đặt một bên của góc và đo sang phía bên kia, ngược chiều kim đồng hồ, như vậy:

Mẫu

Đây sẽ là đầu vào của bạn. Đầu ra của bạn sẽ là góc tham chiếu của điều này. Bạn có thể nghĩ về điều này về cơ bản là khoảng cách nhỏ nhất từ ​​phía đầu cuối đến trục x. Ngoại trừ đó là một góc, không phải là một khoảng cách. Dưới đây là một số ví dụ:

Giới thiệu Quad 2 Giới thiệu Quad 1

Giới thiệu Quad 3 Tham chiếu Quad 4

Làm rõ

  • Tất cả các mặc định về đầu vào và đệ trình.
  • Angles là độ .
  • Các góc âm, góc không nguyên và góc> 360 độ được cho phép.
  • Đầu ra dưới dạng 60 deg.
  • Đây là , vì vậy mã ngắn nhất tính bằng byte sẽ thắng!

Một liên kết hữu ích khác .

Các trường hợp thử nghiệm

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

1
Chúng ta làm gì với đầu vào của 90?
lirtosiast

2
@ThomasKwa nó sẽ là 90 từ một trong hai hướng.
Maltysen

1
Một giải pháp ngắn là abs(arcsin(sin(input)))+" deg", mặc dù tôi không biết ngôn ngữ nào sẽ giành chiến thắng (nó sẽ cần hỗ trợ các mức độ và hoạt động chuỗi).
lirtosiast

Là đầu vào luôn luôn là một số nguyên?
lirtosiast

6
Vì các góc không nguyên được cho phép, bạn nên đưa một góc vào các trường hợp thử nghiệm.
Dennis

Câu trả lời:




5

Python 2, 34 byte

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

Sử dụng "%d deg"định dạng chuỗi sẽ dài hơn vì các dấu ngoặc đơn cần thiết.



4

đc, 25

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

Ghi chú dc sử dụng _như một dấu -ve thay vì -.

Đầu ra thử nghiệm:

$ 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

Toán học, 22 31

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

1
@ LegionMammal978 Nếu tôi nhân nó lên deg, 0 degsẽ trở thành 0.
alephalpha

1
Vì bạn không quan tâm đến loại đầu ra, bạn có thể lưu 2 byte như thế này:Row@{Abs@Mod[#,180,-90],deg}&
LegionMammal978

3

Con trăn 2, 35

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

Nhỏ hơn của góc và modulo âm của nó 180. Hiệu quả chuyển đổi góc thành phạm vi từ 0 đến 180 và lấy khoảng cách đến gần hơn của các điểm cuối. Lưu ý rằng -x%180các nhóm như (-x)%180.

Cùng độ dài với định dạng chuỗi cho Python 3:

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

3

Bình 25 30 byte

Giải pháp đau đớn không điều trị, sử dụng chức năng trig. Permalink

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

Mọi góp ý đều được chào đón.


1
Giảm xuống còn 28 bằng cách thực hiện các .tcuộc gọi và xếp chúng lại:+.R.t.a.tF[Q7Z3)6?%Q1Q0" deg
Maltysen

Khéo léo. Tôi nhận thấy rằng nó dường như không hoạt động với đầu vào dấu phẩy động : 90.5 => 90.0 deg.
Winny

Đó là bởi vì bạn cũng không: pyth.herokuapp.com / từ
Maltysen

Thú vị bắt. Với đầu vào -60.5 => 60.5 degnhưng với 60.5 => 60.0 deg. Có vẻ như là một vấn đề với Pyth - Ví dụ sử dụng pyth / macros.py
Winny

1

JavaScript (ES6), 43 byte

Tương tự như câu trả lời của Sp3000 , mặc dù modulo khá dài do hành vi trong JavaScript .

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

Bản giới thiệu

Mã được viết lại trong ES5 để tương thích với trình duyệt:

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
Tôi cho rằng đó là một quyết định thiết kế của một kỹ sư phần cứng PDP chịu trách nhiệm cho thực tế là vài thập kỷ sau chúng ta vẫn còn rất ít ngôn ngữ thực hiện %hợp lý.
Peter Taylor

Thay thế 180 đầu tiên bằng (t=180)sau đó thay thế 180 sau bằng t có thể sẽ tiết kiệm được một vài byte
Downgoat

@ vihan1086 Nó giống nhau
rink.attguard.6


1

Matlab, 44

Sử dụng chức năng ẩn danh:

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

Thí dụ:

>> 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
Điều này không nối thêm 'deg' ở cuối. (Không downvote.)
Legendre

@Legendre Rất tiếc. Cảm ơn! Đã sửa
Luis Mendo



-1

PHP, 44 byte

Có một tham số dòng lệnh. Một lần nữa PHP lại gặp vấn đề tương tự như JavaScript .

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

Sử dụng giải pháp chính tắc cần 53 byte (chuyển đổi độ và radian cần rất nhiều ký tự):

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

1
Không sử dụng PHP .để ghép nối?
Hạ cấp

@ vihan1086 Có, PHP sử dụng .. Downvote cho đến khi nó được cố định
Ismael Miguel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.