Учитывая искусство двух векторов в ASCII, найдите величину и степень результирующего вектора.
вход
Это может быть получено через STDIN, считано из локального файла или предоставлено посредством вызова функции. Вот пример двух векторного ввода:
^------>
|
|
|
x
Это означает изменение 4 единиц на север и 7 единиц на восток. Начальная точка каждого входа будет представлена x
(десятичной 120
).
Все векторы являются горизонтальными или вертикальными линиями.
Каждый вектор имеет одну из этих четырех конечных точек:
^v<>
и состоит из тире (-
десятичное 45) или вертикальной черты (|
десятичное 124).Пустые точки на плоскости заполняются пробелами (
, десятичное число 32).
Вход может быть одним
x
.Смежные векторы всегда перпендикулярны друг другу.
Все векторы являются кончиками хвоста.
Выход
Это будет смещение результирующей точки (расстояние от начальной точки) и степень ее перемещения относительно начальной точки.
Для указанного выше значения на выходе должны быть 8.06
единицы и 60.3
градусы. У каждого должно быть ровно 3 значащих цифры. Вот несколько примеров чисел с 3 значащими цифрами:
- 1,00
- 60,1
- 453
- 7,08
- 4,50
- 349
Все единицы измерения будут <= 999
.
Эти числа должны быть выведены в следующем формате. Это использует числа сверху.
8.06 units @ 60.3 degrees
Это может сопровождаться одним пробелом или новой строкой.
Если входные данные одиночные x
, без смещения и, следовательно, без угла смещения, выходные данные должны быть либо пустой строкой (один символ новой строки), либо в следующем формате:
0 units @ - degrees
Если вы пытаетесь претендовать на бонус, направление должно быть -
также.
В случае, когда бонусы 2, 3 или оба завершены, выходные данные должны соответствовать приведенной ниже модели и соблюдать те же ограничения, что и выше.
8.06 units @ 60.3 degrees NE
Градусы должны измеряться в соответствии со стандартной плоскостью.
90
135 | 45
\|/
180 ---x---- 0
/|\
225 | 315
270
0
градусы - это восток, 1 - 89
градусы - это северо-восток, 90
север и т. д.
Бонусы
Следующее стоит в общей сложности -50%.
Возьмите бонус -10% за каждый дополнительный вектор, который можно обработать. Этот бонус может быть применен до 3 раз. Векторы никогда не будут пересекаться или пересекаться.
Возьмите бонус -10%, если ваш вывод включает в себя основное направление угла (север, юг, восток, запад).
Возьмите бонус -10%, если ваши выходные данные включают промежуточные направления угла (северо-восток, северо-запад, юго-восток, юго-запад).
Примеры
В:
x---->
|
v
Вне:
5.39 units @ 338 degrees
Необязательно SE
В:
<--------------^
|
|
x
Вне:
15.3 units @ 169 degrees
Необязательно NW
В:
x
|
|<-----^
| |
v------>
Вне:
2.24 units @ 297 degrees
Необязательно SE
Примеры (несколько векторов)
В:
x--->
|
|
v----------->
Вне:
16.3 units @ 349 degrees
Необязательно SE
В:
<-------^
| |
| |
v |
|
|
x
Вне:
8.54 units @ 159 degrees
Необязательно NW
В:
^-->
| |
| v
|
<--------x
Вне:
6.32 units @ 162 degrees
Необязательно NW
x
? Какая граница между Севером и Северо-Западом?x-->
. Могут ли векторы пересекаться?x
. Их может быть больше двух (если вы пытаетесь завершить бонус), но не меньше. Я работаю над примерами для нескольких векторных входов. Ни при каких входах векторы не будут пересекаться. @ThomasKwaОтветы:
JavaScript (ES6), 305 байт - бонус 50% = 152,5 балла
объяснение
Ввод должен быть дополнен пробелами. Использует все бонусы.
Тестовое задание
Показать фрагмент кода
источник
Python 2, 238,5 (
594562482477-50%) байтовобъяснение
Находит начальную и конечную позиции, просматривая каждый символ на входе.
Начало это
x
Конец можно найти, посмотрев на каждую стрелку (
<>^v
) и их соседей. Если соседи продолжают векторы, игнорируйте. Иначе это конец.Посмотрите на соседей, перпендикулярных направлению стрелки.
Если они содержат перпендикулярную линию, то это непрерывный вектор.
Примеры (
_
указывает на пробел):Поскольку конечная точка найдена, может быть любое количество векторов ( бонус 30% ).
источник
\n
качестве переносов строк ...input()
и соответствующим переносом ввода с "", но, похоже, не существует правила против этого!