Voici un petit défi du lundi matin ...
Écrivez une fonction ou un programme dans le moins d'octets qui:
- Prend en entrée une liste de
[x,y]
coordonnées - Prend en entrée une liste des
[x,y]
masses respectives des coordonnées - Sort le centre de masse calculé sous la forme de
[xBar,yBar]
.
Remarque:
- L'entrée peut être prise sous n'importe quelle forme, tant qu'un tableau est utilisé.
Le centre de masse peut être calculé par la formule suivante:
En anglais simple ...
- Pour trouver
xBar
, multipliez chaque masse par sa coordonnée x respective, additionnez la liste résultante et divisez-la par la somme de toutes les masses. - Pour trouver
yBar
, multipliez chaque masse par sa coordonnée y respective, additionnez la liste résultante et divisez-la par la somme de toutes les masses.
Exemple Trivial Python 2.7:
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]
Cas de test:
> 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]
Il s'agit de code-golf, donc le moins d'octets gagne!
[x,y,m],[x,y,m]...
:?
[(x1,y1,m1), (x2,y2,m2)]
exemple d'une liste de tuples? Ou importe peu que les arguments soient des tuples, des listes ou des tableaux? Qu'en est-il de trois listes / tableaux?