Pour normaliser un vecteur est à elle échelle à une longueur de 1 ( un vecteur unitaire ), tout en maintenant la direction cohérente.
Par exemple, si nous voulions normaliser un vecteur à 3 composantes, u , nous trouverions d'abord sa longueur:
| u | = sqrt (u x 2 + u y 2 + u z 2 )
... puis redimensionnez chaque composant selon cette valeur pour obtenir un vecteur de longueur 1.
û = u ÷ | u |
Le défi
Votre tâche consiste à écrire un programme ou une fonction qui, étant donné une liste non vide d'entiers signés, l'interprète comme un vecteur et le normalise. Cela devrait fonctionner pour n'importe quel nombre de dimensions, par exemple (cas de test arrondis à deux décimales):
[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]
Règles:
- Vous pouvez supposer que la liste de saisie:
- Avoir au moins un élément non nul
- Ne contient que des nombres dans la plage de virgule flottante standard de votre langue
- Votre sortie doit être précise à au moins deux décimales . Le retour de fractions / valeurs symboliques de «précision infinie» est également autorisé, si c'est ainsi que votre langue stocke en interne les données.
- Les soumissions doivent être soit un programme complet qui effectue des E / S, soit une fonction. Les soumissions de fonctions peuvent soit renvoyer une nouvelle liste, soit modifier la liste donnée en place.
- Les fonctions / classes vectorielles intégrées sont autorisées. De plus, si votre langue a un type de vecteur qui prend en charge un nombre arbitraire de dimensions, vous pouvez en prendre une en entrée.
Il s'agit d'un concours de code-golf , vous devez donc viser à obtenir la solution la plus courte possible (en octets).