Um einen Vektor zu normalisieren , skalieren Sie ihn auf eine Länge von 1 ( ein Einheitsvektor ), während Sie die Richtung konsistent halten.
Zum Beispiel, wenn wir einen Vektor mit drei Komponenten, normalisieren wollten u , würden wir zuerst finden seine Länge:
| u | = sqrt (u x 2 + u y 2 + u z 2 )
... und skalieren Sie dann jede Komponente um diesen Wert, um einen Vektor der Länge 1 zu erhalten.
û = u ÷ | u |
Die Herausforderung
Ihre Aufgabe ist es, ein Programm oder eine Funktion zu schreiben, die bei einer nicht leeren Liste von vorzeichenbehafteten ganzen Zahlen diese als Vektor interpretiert und normalisiert. Dies sollte beispielsweise für eine beliebige Anzahl von Dimensionen funktionieren (Testfälle auf zwei Dezimalstellen gerundet):
[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]
Regeln:
- Sie können davon ausgehen, dass die Eingabeliste:
- Haben Sie mindestens ein Element ungleich Null
- Enthalten Sie nur Zahlen innerhalb des Standard-Gleitkommabereichs Ihrer Sprache
- Ihre Ausgabe sollte auf mindestens zwei Dezimalstellen genau sein . Die Rückgabe von Brüchen / Symbolwerten mit "unendlicher Genauigkeit" ist ebenfalls zulässig, wenn Ihre Sprache die Daten auf diese Weise intern speichert.
- Einreichungen sollten entweder ein vollständiges Programm sein, das E / A ausführt, oder eine Funktion. Übergebene Funktionen können entweder eine neue Liste zurückgeben oder die vorhandene Liste ändern.
- Eingebaute Vektorfunktionen / -klassen sind erlaubt. Wenn Ihre Sprache einen Vektortyp hat, der eine beliebige Anzahl von Dimensionen unterstützt, können Sie eine davon als Eingabe verwenden.
Da dies ein Code-Golf- Wettbewerb ist, sollten Sie versuchen, die kürzestmögliche Lösung (in Byte) zu erzielen.