Вот быстрый вызов в понедельник утром ...
Напишите функцию или программу с наименьшим числом байтов, которые:
- Принимает в качестве ввода список
[x,y]
координат - В качестве входных данных принимает список
[x,y]
соответствующих масс координат. - Выводит рассчитанный центр масс в виде
[xBar,yBar]
.
Замечания:
- Входные данные могут быть приняты в любой форме, если используется массив.
Центр масс можно рассчитать по следующей формуле:
На простом английском ...
- Чтобы найти
xBar
, умножьте каждую массу на соответствующую ей координату x, суммируйте полученный список и разделите его на сумму всех масс. - Чтобы найти
yBar
, умножьте каждую массу на ее соответствующую координату y, суммируйте полученный список и разделите его на сумму всех масс.
Тривиальный пример 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]
Тестовые случаи:
> 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]
Это код-гольф, поэтому выигрывает наименьшее количество байтов!
[x,y,m],[x,y,m]...
?
[(x1,y1,m1), (x2,y2,m2)]
списка кортежей? Или не имеет значения, являются ли аргументы кортежами, списками или массивами? Как насчет трех списков / массивов?