Berikut ini tantangan Senin pagi yang cepat ...
Tulis fungsi atau program dengan jumlah byte paling sedikit yang:
- Dibawa sebagai input daftar
[x,y]
koordinat - Dibawa sebagai input daftar
[x,y]
massa masing-masing koordinat - Menghasilkan pusat massa yang dihitung dalam bentuk
[xBar,yBar]
.
catatan:
- Input dapat diambil dalam bentuk apa pun, selama array digunakan.
Pusat massa dapat dihitung dengan rumus berikut:
Dalam bahasa Inggris ...
- Untuk menemukan
xBar
, gandakan setiap massa dengan koordinat x masing-masing, jumlahkan daftar yang dihasilkan, dan bagi dengan jumlah semua massa. - Untuk menemukan
yBar
, gandakan setiap massa dengan koordinat y masing-masing, jumlahkan daftar yang dihasilkan, dan bagi dengan jumlah semua massa.
Trivial Python 2.7 contoh:
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]
Kasus uji:
> 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]
Ini adalah kode-golf, jadi jumlah byte terkecil yang menang!
[x,y,m],[x,y,m]...
:?
[(x1,y1,m1), (x2,y2,m2)]
, misalnya daftar tupel? Atau tidak masalah apakah argumennya adalah tupel, daftar atau array? Bagaimana dengan tiga daftar / array?