Для заданной строки из N, S, E и W выведите направление (угол по часовой стрелке от севера в градусах) с точностью до 5 десятичных знаков.
В традиционных обозначениях компаса строка состоит только из 2 из этих символов (например, NNW или ESE). Здесь вы также должны принять строки, которые содержат все 4 (например, WNNNSE) . Использование только 2 символов позволяет людям интуитивно понять смысл. Разрешение 4 символов делает чтение ужасным, но позволяет использовать более короткие способы описания направления с заданной точностью.
(Как указано в комментариях пользователя user2357112 , оказывается, что вы можете доказать, что для любого данного подшипника строка из 4 символов будет точно такой же длины, что и строка из 2 символов, поэтому я основал эту проблему на ложном предположении. Надеюсь, это отсутствие практической цели не умаляет вашего удовольствия от вызова ...)
Точный метод описан ниже и эквивалентен традиционной записи (он расширяет ее, а не изменяет).
вход
- Ввод представляет собой одну строку, содержащую только символы
NESW
. - Ввод может быть последовательностью символов, если вы предпочитаете, при условии, что это не включает какую-либо предварительную обработку. Например, использование вложенного списка
[N, [E, [S, [W]]]]
для определения порядка обработки не допускается. - Взятие разных персонажей не допускается. Вы не можете взять строку
1234
вместоNESW
.
Выход
- Выходными данными должно быть десятичное число или строковое представление единицы (не рациональное / дробь).
- Конечные нули отображать не нужно. Если подшипник есть
9.00000
, то результат9
также считается правильным до 5 десятичных знаков. - Выход находится в диапазоне [0, 360). То есть, включая 0, но исключая 360.
- Корректность проверяется путем округления вывода до 5 десятичных знаков. Если подшипник 0,000005, округляется до 0,00001. Выходы 0.00001 и 0.000005 являются правильными.
- Вывод в научной записи для некоторых входов является приемлемым. Например,
1e-5
вместо0.00001
.
преобразование
- Единичный символ компас точки
N
,E
,S
иW
соответствуют 0, 90, 180 и 270 градусов соответственно. - Добавление одного из них к строке приводит к тому, что подшипник делит пополам подшипник одиночного символа и подшипник исходной строки.
- Выбирается ближайший из двух возможных биссектрис, так что NE представляет 45 градусов, а не 225 градусов.
- Это однозначно, за исключением случаев, когда угол деления пополам составляет 180 градусов. Поэтому
NS
,SN
,WE
иEW
соответствуют неопределенным подшипникам, а вход никогда не закончатся ни в одном из них. Однако они могут появляться где-либо еще во входной строке, так как это не вызывает двусмысленности. - Если последние два символа идентичны, последний символ будет избыточным, так как бисекция возвратит тот же самый символ. Поскольку это ничего не добавляет к нотации, ваш код не должен обрабатывать это. Поэтому
NN
,EE
,SS
иWW
соответствуют неопределенным подшипникам, а вход никогда не закончатся ни в одном из них. Однако они могут появляться где-либо еще во входной строке.
Примеры
N: 0
E: 90
S: 180
SE: halfway between S and E: 135
NSE: halfway between N and SE: 67.5
NNSE: halfway between N and NSE: 33.75
NNNSE: halfway between N and NNSE: 16.875
NNNNSE: halfway between N and NNNSE: 8.4375
Контрольные примеры
Представление действительно только в том случае, если оно дает правильный вывод для всех тестовых случаев. Обратите внимание, что контрольные примеры расширяют границы того, что может быть обработано с двойной точностью. Для языков, которые по умолчанию имеют одинарную точность, вам, вероятно, потребуется потратить байты на указание двойной точности, чтобы получить правильные выходные данные.
Результаты тестового набора показаны округленными до 5 десятичных знаков, а также с произвольной точностью. Оба являются действительными выходами.
WNE 337.5 337.5
WEN 337.5 337.5
WEWEWEWEWEWEWEWEWEWEWEN 330.00001 330.000007152557373046875
NESWNESWNESWNESWNESWNESWNESW 90 89.99999932944774627685546875
NNNNNNNNNNNNNNNNNNNNNNNE 0.00001 0.0000107288360595703125
NNNNNNNNNNNNNNNNNNNNNNNW 359.99999 359.9999892711639404296875
SNNNNNNNNNNNNNNNNNNNNNNNE 90.00001 90.00000536441802978515625
SNNNNNNNNNNNNNNNNNNNNNNNW 269.99999 269.99999463558197021484375
счет
Это код-гольф . Оценка - это длина исходного кода в байтах, и кратчайшие выигрыши.
педантичность
Я сделал ошибку, думая, что «Север на северо-западе» является верным направлением компаса. Счастливая ошибка, так как она привела к сложной идее, но потом я обнаружил на странице Википедии :
«Название фильма Альфреда Хичкока 1959 года« Север на северо-западе »на самом деле не является точкой направления на 32-ветровом компасе, но Фильм содержит ссылку на Northwest Airlines. "
Также оказывается, что метод, использованный для этой задачи, совместим только с традиционными точками компаса вплоть до 16-точечного компаса. Компас с 32 ветрами, описанный на этой странице, немного отличается, и я удобно упустил из виду его существование для этой задачи.
Наконец, для тех, кто думает, что я должен использовать «Юго-восток» вместо «Юго-Восток»,,
WNNNSE
будет вывод 323.4375
. Посмотрите пример раздела для пошагового руководства, которое применимо таким же образом к этому случаю.
f(N,N,N,S,E)
хорошо?
WNNNSE
<= что будет выходом для этого примера записи в начале вашего сообщения? это звучит недействительно для меня, но трудно сказать.