Para normalizar um vector é para dimensioná-lo até um comprimento de 1 ( um vector de unidade ), enquanto se mantinha a direcção consistente.
Por exemplo, se quiséssemos normalizar um vetor com 3 componentes, u , primeiro encontraríamos seu comprimento:
| u | = sqrt (u x 2 + u y 2 + u z 2 )
... e, em seguida, dimensione cada componente por esse valor para obter um vetor de comprimento 1.
û = u ÷ | u |
O desafio
Sua tarefa é escrever um programa ou função que, dada uma lista não vazia de números inteiros assinados, interprete-o como um vetor e o normalize. Isso deve funcionar para qualquer número de dimensões, por exemplo (casos de teste arredondados para duas casas decimais):
[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]
Regras:
- Você pode assumir que a lista de entrada irá:
- Ter pelo menos um elemento diferente de zero
- Contém apenas números dentro do intervalo de ponto flutuante padrão do seu idioma
- Sua saída deve ser precisa com pelo menos duas casas decimais . Também é permitido o retorno de frações / valores simbólicos de "precisão infinita", se é assim que seu idioma armazena os dados internamente.
- Os envios devem ser um programa completo que execute E / S ou uma função. Os envios de funções podem retornar uma nova lista ou modificar a lista fornecida no local.
- Funções / classes de vetores incorporadas são permitidas. Além disso, se o seu idioma tiver um tipo de vetor que suporte um número arbitrário de dimensões, você poderá usar um deles como entrada.
Como é um concurso de código-golfe , você deve ter como objetivo alcançar a solução mais curta possível (em bytes).