Знайдіть опорний кут


17

Це досить просте запитання. Відповідно до цього випадкового веб-сайту, який я знайшов - Web Archive , опорний кут: the acute angle formed by the terminal side of the given angle and the x-axis.Ви повинні написати програму, щоб знайти їх.

Я нічого не пам'ятаю з алгебри 2, що це означає?

Кути, як правило, задаються у стандартній формі , яка вимірюється, розміщуючи одну сторону кута і вимірюючи іншу сторону, проти годинникової стрілки, так:

Стандартна форма

Це буде ваш внесок. Ваш вихід буде опорним кутом цього. Ви можете подумати про це як в основному найменшу відстань від термінальної сторони до осі x. За винятком того, що це кут, а не відстань. Ось кілька прикладів:

Квадрат 2 реф Квадрат 1 реф

Квадратний 3 реф Квадрат 4 реф

Роз'яснення

  • Усі за замовчуванням на входах та поданнях.
  • Кути в градусах .
  • Негативні кути, нецілі кути і кути> 360 град будуть дозволені.
  • Виведіть у формі 60 deg.
  • Це , тому найкоротший код у байтах виграє!

Ще одне корисне посилання .

Випробування

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

1
Що ми робимо при введенні 90?
lirtosiast

2
@ThomasKwa це було б 90 з будь-якого напрямку.
Малтісен

1
Коротке рішення полягає в тому abs(arcsin(sin(input)))+" deg", що я не знаю, яка мова перемогла б (вона повинна підтримувати градуси та рядкові операції).
lirtosiast

Чи завжди вхід є цілим числом?
lirtosiast

6
Оскільки нецілі кути дозволені, ви повинні включити один у тестові випадки.
Денніс

Відповіді:




5

Python 2, 34 байти

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

Використання "%d deg"форматування рядків буде довше через необхідні дужки.



4

постійний струм, 25

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

Примітка dcвикористовується _як знак -ve замість -.

Тестовий вихід:

$ 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

Математика, 22 31

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

1
@ LegionMammal978 Якщо я просто помножу його на deg, 0 degстану 0.
алефальфа

1
Оскільки ви не переймаєтесь типом виводу, ви можете зберегти 2 байти, як це:Row@{Abs@Mod[#,180,-90],deg}&
LegionMammal978

3

Пітон 2, 35

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

Менший кут і його негативний модуль 180. Ефективно перетворює кут в діапазон від 0 до 180 і проводить відстань до ближчих кінцевих точок. Зауважте, що -x%180групи як (-x)%180.

Однакова довжина з форматуванням рядків для Python 3:

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

3

Піт 25 30 байт

Болісно нетворче рішення, використовуючи функції триггеру. Постійна посилання

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

Будь-які пропозиції вітаються.


1
Зменшив його до 28, прийнявши .tдзвінки та +.R.t.a.tF[Q7Z3)6?%Q1Q0" deg
переклавши

Акуратний. Я помітив, що він не працює з входом з плаваючою комою: 90.5 => 90.0 degхоча.
Вінні

Це тому, що і ваші: pyth.herokuapp.com/…
Maltysen

Цікавий улов. З введенням, -60.5 => 60.5 degале з 60.5 => 60.0 deg. Схоже, проблема з Pyth - Приклад використання pyth / macros.py
Вінні,

1

JavaScript (ES6), 43 байти

Подібно до відповіді Sp3000 , хоча модуль досить тривалий через поведінку в JavaScript .

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

Демо

Код переписаний у ES5 для сумісності браузера:

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 байт

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

5
Я припускаю, що це було дизайнерське рішення інженера апаратури PDP, який відповідає за те, що через кілька десятиліть у нас ще дуже мало мов, які %розумно реалізуються .
Пітер Тейлор

Заміна першої 180 на (t=180)потім заміна наступних 180-х на t, ймовірно, заощадить кілька байт
Downgoat

@ vihan1086 Це те саме
rink.attendant.6


1

Матлаб, 44

Використання анонімної функції:

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

Приклад:

>> 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
Це не додає "град" в кінці. (Не спровокував.)
Legendre

@Legendre На жаль Спасибі! Виправлено
Луїс Мендо



-1

PHP, 44 байти

Бере один параметр командного рядка. Знову ж таки PHP страждає від тієї ж проблеми, що і JavaScript .

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

Для використання канонічного рішення потрібно 53 байти (перетворення градусів і радіанів займає багато символів):

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

1
PHP не використовується .для конкатенації?
Пуховик

@ vihan1086 Так, PHP використовує .. Відмовлено, поки не буде виправлено
Ісмаель Мігель
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.