これは月曜日の朝の簡単なチャレンジです...
以下の最小バイト数で関数またはプログラムを作成します。
- 入力として
[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)]
タプルのリストなどはどうですか?または、引数がタプル、リスト、配列のどれであるかは問題ではありませんか?3つのリスト/配列はどうですか?