Đây là một thử thách sáng thứ Hai nhanh chóng ...
Viết hàm hoặc chương trình với số byte ít nhất:
- Đưa vào danh sách
[x,y]
tọa độ - Đưa vào danh sách
[x,y]
khối lượng tương ứng của tọa độ - Xuất ra tâm khối lượng tính toán dưới dạng
[xBar,yBar]
.
Chú thích:
- Đầu vào có thể được thực hiện dưới mọi hình thức, miễn là một mảng được sử dụng.
Trung tâm khối lượng có thể được tính theo công thức sau:
Nói một cách dễ hiểu ...
- Để tìm
xBar
, nhân mỗi khối lượng với tọa độ x tương ứng của nó, tính tổng danh sách kết quả và chia nó cho tổng của tất cả các khối lượng. - Để tìm
yBar
, nhân mỗi khối lượng với tọa độ y tương ứng của nó, tính tổng danh sách kết quả và chia nó cho tổng của tất cả các khối lượng.
Ví dụ tầm thường 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]
Các trường hợp thử nghiệm:
> 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]
Đây là môn đánh gôn, vì vậy số byte ít nhất sẽ thắng!
[x,y,m],[x,y,m]...
?
[(x1,y1,m1), (x2,y2,m2)]
một danh sách các bộ dữ liệu thì sao? Hoặc không quan trọng cho dù các đối số là bộ dữ liệu, danh sách hoặc mảng? Thế còn ba danh sách / mảng?