นี่คือความท้าทายเช้าวันจันทร์อย่างรวดเร็ว ...
เขียนฟังก์ชันหรือโปรแกรมด้วยจำนวนไบต์น้อยที่สุดที่:
- ใช้เป็นรายการของ
[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)]
แล้วเช่นรายการของสิ่งอันดับ? หรือไม่สำคัญว่าข้อโต้แย้งนั้นจะเป็นสิ่งอันดับรายการหรืออาร์เรย์หรือไม่ มีสามรายการ / อะเรย์