Час викопувати свої старі записки тригонометрії зі середньої школи! Завдання полягає у вирішенні невідомих сторін та кутів різних трикутників. І як це прийнято в гольф-коді, виграє найменший робочий код.
Це не тривіальна проблема; моя реалізація в Python в даний час знижується до 838 837 символів, але я впевнений, що ви зможете гольф-рішень набагато менше.
Окрім того, якщо ви застрягли, цей розділ у Вікіпедії повинен перейти: Трикутник: Обчислення сторін та кутів .
Вхідні дані
Наступний трикутник показує назви сторін та кутів, використаних у цьому виклику. Зауважте, що сторони є малі, а кути - великими.
Введення подається у вигляді шести значень, розділених пробілом, stdin
або в аргументах командного рядка (на ваш вибір). Шість значень відповідають сторонам a, b, c
і кутам A, B, C
. Невідомі сторони подаються як знаки запитання ( ?
). І вхідний, і вихідний кути повинні бути в радіанах. Ви можете припустити, що введені значення є правильними (не потрібно нічого перевіряти). Ви також можете припустити, що вхідний трикутник не вироджується, і що всі сторони та кути є ненульовими.
Наступний приклад вказує, що сторона a
є 8
, сторона b
є, 12
а кут A
- 0.5
радіани:
8 12 ? 0.5 ? ?
Вихідні дані
Вихід подається в тому ж форматі, що і вхід - шість розділених пробілами цифр stdout
. Єдиний виняток - коли неможливо вирішити вхідний трикутник - тоді рядок "No solution"
потрібно записати в stdout
. Якщо можливі два рішення, вони обидва виводяться між ними за допомогою нового рядка.
Далі йде вихід для вищевказаного входу:
8.0 12.0 16.0899264342 0.5 0.802561439714 1.83903121388
8.0 12.0 4.97205505116 0.5 2.33903121388 0.302561439714
Вихідні дані не повинні мати велику точність, але потрібно принаймні пару десяткових знаків.
Правила
- Введення зчитується з
stdin
аргументів або командного рядка - Вихід записується в
stdout
- Якщо з даного входу можливі два рішення, виведіть обидва
- Якщо недостатньо інформації для отримання одного чи двох чітких рішень, вважайте це
"No solution"
випадком - Жоден вбудований або попередньо існуючий код не може використовуватися (звичайно, ви можете використовувати тригерні функції, але не "
solveTriangle
" чи подібні) - Найкоротший код виграє
Тестові справи
В 3 4 5 ? ? ?
Вийшов 3.0 4.0 5.0 0.643501108793 0.927295218002 1.57079630572
В ? 4 ? 0.64 0.92 1.57
Вийшов 3.00248479301 4.0 5.02764025486 0.64 0.92 1.57
В ? ? 5 ? 0.92 ?
Вийшов No solution
В ? ? 5 ? 0.92 1.57
Вийшов 3.03226857833 3.97800936148 5.0 0.65159265359 0.92 1.57
В 8 12 ? 0.5 ? ?
Вихід (два рішення)
8.0 12.0 16.0899264342 0.5 0.802561439714 1.83903121388
8.0 12.0 4.97205505116 0.5 2.33903121388 0.302561439714
В 8 12 ? ? .5 ?
Вийшов 8.0 12.0 18.3912222133 0.325325285223 0.5 2.31626736837