Время выкопать ваши старые заметки тригонометрии из средней школы! Задача состоит в том, чтобы решить неизвестные стороны и углы разных треугольников. И, как это принято в кодовом гольфе, выигрывает самый маленький рабочий код.
Это не тривиальная проблема; моя эталонная реализация в 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 ? ?
Out (два решения)
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