İşte Pazartesi sabahı hızlı bir meydan okuma ...
Bir işlevi veya programı en az sayıda baytla yazın:
- Girdi olarak bir
[x,y]
koordinat listesi alır - Girdi olarak
[x,y]
koordinatların ilgili kütlelerinin bir listesini alır - Hesaplanan kütle merkezini
[xBar,yBar]
.
Not:
- Dizi kullanıldığı sürece giriş herhangi bir biçimde alınabilir.
Kütle merkezi aşağıdaki formülle hesaplanabilir:
Sade ingilizce...
- Bulmak için
xBar
, her kütleyi ilgili x koordinatıyla çarpın, elde edilen listeyi toplayın ve tüm kütlelerin toplamına bölün. - Bulmak için
yBar
, her kütleyi ilgili y koordinatıyla çarpın, elde edilen listeyi toplayın ve tüm kütlelerin toplamına bölün.
Önemsiz Python 2.7 örneği:
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]
Test Durumları:
> 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]
Bu kod golf, bu yüzden en az bayt sayısı kazanır!
[x,y,m],[x,y,m]...
?
[(x1,y1,m1), (x2,y2,m2)]
örneğin bir tuples listesi? Yoksa argümanların tuples, listeler veya diziler olması önemli değil mi? Üç liste / diziye ne dersiniz?