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