Ecco una rapida sfida del lunedì mattina ...
Scrivi una funzione o un programma nel minor numero di byte che:
- Accetta come input un elenco di
[x,y]
coordinate - Prende come input un elenco delle
[x,y]
rispettive masse delle coordinate - Emette il centro di massa calcolato sotto forma di
[xBar,yBar]
.
Nota:
- L'input può essere assunto in qualsiasi forma, purché venga utilizzato un array.
Il centro di massa può essere calcolato con la seguente formula:
In parole povere ...
- Per trovare
xBar
, moltiplicare ogni massa per la rispettiva coordinata x, sommare l'elenco risultante e dividerlo per la somma di tutte le masse. - Per trovare
yBar
, moltiplicare ciascuna massa per la rispettiva coordinata y, sommare l'elenco risultante e dividerlo per la somma di tutte le masse.
Trivial Python 2.7 esempio:
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]
Casi 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]
Questo è code-golf, quindi vince il minor numero di byte!
[x,y,m],[x,y,m]...
:?
[(x1,y1,m1), (x2,y2,m2)]
, ad esempio, un elenco di tuple? O non importa se gli argomenti sono tuple, liste o matrici? Che dire di tre elenchi / matrici?