Para normalizar un vector es la escala para una longitud de 1 ( un vector unitario ), manteniendo la dirección consistente.
Por ejemplo, si quisiéramos normalizar un vector con 3 componentes, u , primero encontraríamos su longitud:
| u | = sqrt (u x 2 + u y 2 + u z 2 )
... y luego escala cada componente por este valor para obtener un vector de longitud 1.
û = u ÷ | u |
El reto
Su tarea es escribir un programa o función que, dada una lista no vacía de enteros con signo, lo interprete como un vector y lo normalice. Esto debería funcionar para cualquier cantidad de dimensiones, por ejemplo (casos de prueba redondeados a dos decimales):
[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]
Reglas:
- Puede suponer que la lista de entrada:
- Tener al menos un elemento distinto de cero
- Solo contiene números dentro del rango de coma flotante estándar de su idioma
- Su salida debe tener una precisión de al menos dos decimales . También se permite devolver fracciones / valores simbólicos de "precisión infinita", si así es como su idioma almacena internamente los datos.
- Los envíos deben ser un programa completo que realice E / S o una función. Los envíos de funciones pueden devolver una nueva lista o modificar la lista dada en su lugar.
- Se permiten funciones / clases de vectores incorporados. Además, si su idioma tiene un tipo de vector que admite un número arbitrario de dimensiones, puede tomar una de estas como entrada.
Este es un concurso de código de golf , por lo que debe aspirar a lograr la solución más corta posible (en bytes).