32-точечный компас ... интересен, если не сказать больше.
По Denelson83 (собственная работа) [ GFDL или CC-BY-SA-3.0 ], через Wikimedia Commons
Ваша задача - измерить градус и преобразовать его в направление на 32-точечном компасе.
Каждое направление на 11,25 (360/32) градуса дальше предыдущего. Например, N (север) составляет 0 градусов, NbE (север на восток) составляет 11,25 градуса, NNE (север-северо-восток) составляет 22,5 градуса и т. Д.
Что касается того, как вы должны получить указания,
0 градусов - это N, 90 градусов - это E, 180 градусов - это S, а 270 градусов - это W.
- Это так называемые кардинальные направления.
Точки на полпути между основными направлениями - это просто основные направления между сцепленными. N или S всегда идут первыми, а W или E всегда вторыми.
- Это так называемые порядковые направления.
Точки на полпути между кардинальным и порядковым направлениями - это направления между конкатенацией, опять же, с «-» между ними. Кардинальные направления идут первыми, порядковые вторыми.
- Это так называемые вторично-межкардинальные направления.
Точки на полпути между вторичными межкардинальными направлениями и другими направлениями являются другими направлениями «по» кардинальному направлению, к которому они ближе всего (конечно, кроме того, которое находится непосредственно рядом с ними).
- Я понятия не имею, как они называются: P
Если все это объяснение вредит вашему мозгу так же, как моему, вы можете обратиться к этой таблице:
1 North N
2 North by east NbE
3 North-northeast NNE
4 Northeast by north NEbN
5 Northeast NE
6 Northeast by east NEbE
7 East-northeast ENE
8 East by north EbN
9 East E
10 East by south EbS
11 East-southeast ESE
12 Southeast by east SEbE
13 Southeast SE
14 Southeast by south SEbS
15 South-southeast SSE
16 South by east SbE
17 South S
18 South by west SbW
19 South-southwest SSW
20 Southwest by south SWbS
21 Southwest SW
22 Southwest by west SWbW
23 West-southwest WSW
24 West by south WbS
25 West W
26 West by north WbN
27 West-northwest WNW
28 Northwest by west NWbW
29 Northwest NW
30 Northwest by north NWbN
31 North-northwest NNW
32 North by west NbW
Вот более подробная таблица и, возможно, лучшее объяснение точек компаса.
Ваша задача состоит в том, чтобы взять ввод в градусах и вывести полное имя направления компаса, которому оно соответствует, вместе с его сокращением.
Тестовые случаи:
Input Output
0 North N
23.97 North-northeast NNE
33.7 Northeast by north NEbN
73.12 East-northeast ENE
73.13 East by north EbN
219 Southwest by south SWbS
275 West W
276 West by north WbN
287 West-northwest WNW
Вся заглавная буква должна быть сохранена, как в тестовых примерах. Максимальное количество десятичных знаков равно 2. Все входные числа будут больше или равны 0 и меньше 360. Если присутствует десятичная точка, с обеих сторон будут цифры (вам не нужно обрабатывать .1
или 1.
).
Это код-гольф , поэтому выигрывает самый короткий код в байтах.
Ответы:
Perl,
250 236 231 188187Изменить: некоторые байты от использования симметрии (как я видел в решении @bazzargh)
+ Редактировать: И некоторые злые трюки ...
+ Редактировать : вернуться к тому, с чего я начал (работа со списком, а не со строкой), и использовать больше симметрии = 1 байт выключен и намного уродливее.
Довольно отпечатанный:
5.014 требуется из-за
r
модификатора.источник
Javascript
470453438434432421404Вы можете скопировать этот код на консоль и выполнить его. Он запрашивает ввод градусов и выводит результат с
alert();
Разоблаченный Javascript можно найти на этой скрипке: http://jsfiddle.net/AezL3/11
источник
calcPoint(32)
делать то, что делает 0, так что вы можете сделать это с%32
или любым другим.var name = calcPoint(input % 32);
Haskell
415372347330317304301CЗакончилось сходом к решению, подобному @ VadimR (и обратно симметрии!). Использование:
h 219
выходы"Southwest by south SWbS"
Еще 3 символа исчезли, спасибо @shiona.
источник
drop 1
такой же, как хвост. Также, если я не ошибаюсь, вы можетеe l@(x:_)=x:tail$d l
побрить еще один символ.Python 3.8 ,
482438424 байтПопробуйте онлайн!
Это то, что я получил после игры в гольф от ответа Тони Гудвина ; размещен в своем собственном ответе из-за слишком длинной ссылки TIO для комментария. Если он решит обновить свой ответ выше, я удалю этот ответ.
Я предполагаю, что приемлемо представить функцию в качестве решения, а не полную программу. Если нет, то здесь полная программа на 426 байт.
Я ожидаю, что многое еще можно сделать, чтобы сократить
b
.Изменить: Гольф от 44 байтов, любезность величественного моржа. Все еще не чувствую, что
b
закончил быть гольфом.Edit2: сбрил еще 14 путем распаковки диктов вместо использования
keys()
иitems()
.источник
Питон,
2103164711031034924889848 байтОчень поздно, я знаю. Спасибо за вызов, я настраиваю магнитометр для направления ветра с моим Pi, и хотел получить 16-точечное компасное решение, подобное этому, для включения в алгоритмы прогнозирования погоды. Весь мой код написан на Python, так что вот версия решения javascript, уже опубликованная на Python, но с дополнительным поворотом, в котором вы можете указать 32, 16 или 8 точек компаса для переменной j, и я изменил смещение degHead в заявлении перед ним, в зависимости от количества точек. Я использовал измененный алгоритм переименования (и использовал переменные, которые я мог переименовать, не повреждая слова!), Чтобы убедиться, что я отвечал требованиям к конкретному вопросу.
Я знаю, что это не победит, так как Python более многословен, и я тоже.
Укороченная версия:
Очистить версию
источник