Для того, щоб нормалізувати вектор, щоб масштабувати його до довжини 1 ( одиничний вектор ), в той час зберігаючи напрямок послідовною.
Наприклад, якби ми хотіли нормалізувати вектор з трьома компонентами, u , ми спочатку знайдемо його довжину:
| 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]
Правила:
- Ви можете припустити, що список введення:
- Мати хоча б один ненульовий елемент
- Вміст чисел лише у стандартному діапазоні з плаваючою точкою вашої мови
- Вихід повинен бути точним як мінімум до двох знаків після коми . Повернення дробів / символічних значень "безмежної точності" також дозволено, якщо саме так ваша мова внутрішньо зберігає дані.
- Подання повинні бути або повною програмою, яка виконує введення-виведення, або функцією. Представлення функцій можуть або повернути новий список, або змінити даний список на місці.
- Вбудовані векторні функції / класи дозволяються. Крім того, якщо ваша мова має векторний тип, який підтримує довільну кількість вимірів, ви можете взяти один із них як вхідний.
Це змагання з кодового гольфу , тому ви повинні прагнути досягти найкоротшого можливого рішення (у байтах).