这是周一早上的快速挑战..。
用最少的字节编写一个函数或程序,这些字节:
[x,y]坐标的列表作为输入[x,y]坐标各自的质量的列表作为输入[xBar,yBar]的形式输出计算的质量中心。注意:
质量中心可用下列公式计算:

用简单的英语..。
xBar,将每个质量乘以其各自的x坐标,对结果列表进行和,并将其除以所有质量的和。yBar,将每个质量乘以其各自的y坐标,对结果列表进行和,并将其除以所有质量的和。平凡的Python2.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]这是代码-高尔夫,所以最少的字节数获胜!
发布于 2016-03-07 14:42:30
#.#2/Tr@#&示例:
In[1]:= #.#2/Tr@#&[{2,6,2,10},{{0,2},{3,4},{0,1},{1,1}}]
Out[1]= {7/5, 2}发布于 2016-03-07 17:35:48

Mathcad使用2D“白板”和特殊运算符(例如,求和运算符、积分运算符)并以XML格式保存,因此实际工作表可能包含数百个(或更多)字符。为了使用Code,我使用Mathcad“字节计数”作为用户创建工作表时必须输入的字符或运算符的数量。
使用此定义的第一个(程序)版本需要19个“字节”,函数版本需要41个“字节”。
发布于 2016-03-07 14:14:57
{_:+df/.f*:.+}一个未命名的函数期望堆栈上的坐标对列表和质量列表(按该顺序排列),并将质量中心留在它们的位置上。
在这里测试一下。
_ e# Duplicate list of masses.
:+d e# Get sum, convert to double.
f/ e# Divide each mass by the sum, normalising the list of masses.
.f* e# Multiply each component of each vector by the corresponding weight.
:.+ e# Element-wise sum of all weighted vectors.https://codegolf.stackexchange.com/questions/74979
复制相似问题