Чтобы нормализовать вектор, нужно масштабировать его до длины 1 ( единичный вектор ), сохраняя при этом постоянное направление.
Например, если мы хотим , чтобы нормализовать вектор с 3 -х компонентов, U , мы бы сначала найти его длину:
| у | = sqrt (u x 2 + u y 2 + u z 2 )
... и затем масштабируйте каждый компонент на это значение, чтобы получить вектор длины 1.
û = u ÷ | u |
Соревнование
Ваша задача - написать программу или функцию, которая, учитывая непустой список целых чисел со знаком, интерпретирует их как вектор и нормализует их. Это должно работать для любого числа измерений, например (контрольные примеры, округленные до двух десятичных разрядов):
[20] -> [1]
[-5] -> [-1]
[-3, 0] -> [-1, 0]
[5.5, 6, -3.5] -> [0.62, 0.68, -0.40]
[3, 4, -5, -6] -> [0.32, 0.43, -0.54, -0.65]
[0, 0, 5, 0] -> [0, 0, 1, 0]
Правила:
- Вы можете предположить, что список ввода будет:
- Иметь хотя бы один ненулевой элемент
- Содержать только числа в пределах стандартного диапазона с плавающей запятой вашего языка
- Ваш вывод должен быть с точностью не менее двух знаков после запятой . Возврат фракций / символьных значений «бесконечной точности» также разрешен, если ваш язык хранит данные внутри себя.
- Представления должны быть либо полной программой, которая выполняет ввод / вывод, либо функцией. Представления функций могут либо вернуть новый список, либо изменить данный список на месте.
- Встроенные векторные функции / классы разрешены. Кроме того, если ваш язык имеет векторный тип, который поддерживает произвольное количество измерений, вы можете использовать одно из них в качестве входных данных.
Это соревнование по коду-гольфу , поэтому вы должны стремиться к достижению как можно более короткого решения (в байтах).