Hier ist eine kurze Herausforderung am Montagmorgen ...
Schreiben Sie eine Funktion oder ein Programm in der geringsten Anzahl von Bytes, die:
- Nimmt als Eingabe eine Liste von
[x,y]
Koordinaten - Nimmt als Eingabe eine Liste der
[x,y]
jeweiligen Massen der Koordinaten - Gibt den berechneten Schwerpunkt in Form von aus
[xBar,yBar]
.
Hinweis:
- Die Eingabe kann in beliebiger Form erfolgen, solange ein Array verwendet wird.
Der Schwerpunkt kann nach folgender Formel berechnet werden:
In reinem Englisch...
- Um zu finden
xBar
, multiplizieren Sie jede Masse mit ihrer jeweiligen x-Koordinate, addieren Sie die resultierende Liste und dividieren Sie sie durch die Summe aller Massen. - Um zu finden
yBar
, multiplizieren Sie jede Masse mit ihrer jeweiligen y-Koordinate, addieren Sie die resultierende Liste und dividieren Sie sie durch die Summe aller Massen.
Trivial Python 2.7 Beispiel:
def center(coord, mass):
sumMass = float(reduce(lambda a, b: a+b, mass))
momentX = reduce(lambda m, x: m+x, (a*b for a, b in zip(mass, zip(*coord)[0])))
momentY = reduce(lambda m, y: m+y, (a*b for a, b in zip(mass, zip(*coord)[1])))
xBar = momentX / sumMass
yBar = momentY / sumMass
return [xBar, yBar]
Testfälle:
> center([[0, 2], [3, 4], [0, 1], [1, 1]], [2, 6, 2, 10])
[1.4, 2.0]
> center([[3, 1], [0, 0], [1, 4]], [2, 4, 1])
[1.0, 0.8571428571428571]
Das ist Code-Golf, also gewinnt die geringste Anzahl von Bytes!
[x,y,m],[x,y,m]...
:?
[(x1,y1,m1), (x2,y2,m2)]
zB mit einer Liste von Tupeln? Oder spielt es keine Rolle, ob es sich bei den Argumenten um Tupel, Listen oder Arrays handelt? Was ist mit drei Listen / Arrays?