Aby znormalizować wektor, należy przeskalować go do długości 1 ( wektor jednostkowy ), zachowując spójność kierunku.
Na przykład, jeśli chcielibyśmy znormalizować wektor składający się z 3 składników, u najpierw ustalilibyśmy jego długość:
| u | = sqrt (u x 2 + u y 2 + u z 2 )
... a następnie przeskaluj każdy składnik według tej wartości, aby uzyskać wektor długości 1.
û = u ÷ | u |
Wyzwanie
Twoim zadaniem jest napisanie programu lub funkcji, która biorąc pod uwagę niepustą listę liczb całkowitych, interpretuje ją jako wektor i normalizuje. Powinno to działać dla dowolnej liczby wymiarów, na przykład (przypadki testowe zaokrąglone do dwóch miejsc po przecinku):
[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]
Zasady:
- Możesz założyć, że lista wejściowa:
- Mieć co najmniej jeden niezerowy element
- Zawiera tylko liczby ze standardowego zakresu zmiennoprzecinkowego w Twoim języku
- Wynik powinien być dokładny do co najmniej dwóch miejsc po przecinku . Dopuszczalne jest również zwracanie ułamków / wartości symbolicznych „nieskończonej precyzji”, jeśli w ten sposób dane są przechowywane wewnętrznie przez Twój język.
- Zgłoszenia powinny być albo pełnym programem wykonującym operacje we / wy, albo funkcją. Przesłanie funkcji może albo zwrócić nową listę, albo zmodyfikować podaną listę.
- Wbudowane funkcje / klasy wektorowe są dozwolone. Dodatkowo, jeśli twój język ma typ wektorowy, który obsługuje dowolną liczbę wymiarów, możesz wziąć jeden z nich jako dane wejściowe.
Jest to konkurs golfowy , więc powinieneś dążyć do jak najkrótszego możliwego rozwiązania (w bajtach).