แรงดึงดูดระหว่างคำ


11

ทฤษฎีแรงโน้มถ่วงของนิวตันบอกว่าแรงโน้มถ่วงระหว่างมวลสองจุดคือ

F = (Gm 1 m 2 ) / r 2

ที่ไหน

  • Gคือค่าความโน้มถ่วงคงตัว: 6.674 × 10 −11 N · (m / kg) 2
  • m 1คือมวลของวัตถุแรก
  • m 2คือมวลของวัตถุที่สอง
  • rคือระยะห่างระหว่างจุดศูนย์กลางมวล

ท้าทาย

คุณจำเป็นต้องจำลองการดึงระหว่างสองคำ ตัวอักษรพิมพ์เล็กแต่ละตัวมีมวลที่กำหนดโดยตำแหน่งในตัวอักษร ตัวพิมพ์ใหญ่มีสองเท่าของตัวพิมพ์เล็ก! คุณจะได้รับสตริงที่มีคำสองคำคั่นด้วยช่องว่างหลายเช่นเดียวกับจำนวนของจำนวนเต็มบวกวินาที s การส่งออกสิ่งสตริงจะมีลักษณะหลังจากsวินาที

ข้อมูล

  • เนื่องจากคำว่าเป็นนามธรรมจึงมีหน่วยและค่าคงที่แตกต่างกัน
    • มวล: WMU (หน่วยมวลคำ) - เท่ากับมวลของตัวอักษร 'a'
    • ระยะทาง: emความยาวของอักขระหนึ่งตัว
    • แรง: N W (Word Newton) = WMU · em / s 2
    • ค่าความโน้มถ่วงคงที่: G = 1 N w · (em / WMU) 2
  • อักขระตัวแรกสอดคล้องกับตำแหน่ง 0 บนแกน x
  • การคำนวณทั้งหมดควรทำด้วยความแม่นยำมากที่สุดเท่าที่จะทำได้เฉพาะในตอนท้ายคุณจะปัดเศษเป็น em ที่ใกล้ที่สุด
  • คุณไม่จำเป็นต้องใช้แคลคูลัสคุณเพียงแค่คำนวณFใหม่ทุก ๆ วินาทีใช้การเร่งความเร็วแบบใหม่กับความเร็วโดยอัตโนมัติและหลังจากนั้นวินาทีจะใช้ความเร็วกับตำแหน่ง (ดูตัวอย่าง)
  • เมื่อคำสองคำชนกัน (เช่น catdog ) พวกเขาจะไม่ย้ายอีกต่อไป

ศูนย์กลางของมวล

จุดศูนย์กลางมวลของคำสามารถพบกับสูตร:

ป้อนคำอธิบายรูปภาพที่นี่

โดยที่Mคือมวลทั้งหมดของคำว่าm iคือมวลของตัวอักษรและr iคือตำแหน่งของตัวอักษร

ตัวอย่าง:

(หมายเหตุ: แม้ว่าตัวอย่างนี้จะไม่แสดงให้จำไว้ว่าตัวอักษรพิมพ์ใหญ่มีมวลของตัวพิมพ์เล็กสองเท่า)

อินพุต: cat dog, 2

  1. อันดับแรกของแต่ละคำคืออะไร? "cat" เริ่มที่ตำแหน่ง 0 และ "dog" เริ่มที่ตำแหน่ง 9 ดังนั้น

    • x c = 0 และ x d = 9
  2. ต่อไปเราจะพบศูนย์กลางของมวลของ "cat"

    • มีมวล 24 WMU (3 + 1 + 20)
    • R c = 1/24 (3 * 0 + 1 * 1 + 20 * 2) = 41/24 = 1.70833 em
    • จุดศูนย์กลางมวลที่ไม่น่าแปลกใจจึงอยู่ใกล้กับตัวอักษร 't' มาก
  3. ทีนี้มาเป็นศูนย์กลางของมวลของ "สุนัข"

    • R d = 1/26 (4 * 9 + 15 * 10 + 7 * 11) = 263/26 = 10.11538 em
    • ดังนั้นศูนย์กลางของมวลสำหรับสุนัขจึงอยู่ใกล้กับตัวอักษร 'o' ไปทาง 'g' เล็กน้อย
  4. ตอนนี้เราสามารถคำนวณแรงระหว่างสองคำได้

    • F = 24 * 26 / (10.11538-1.70833) 2 = 8.82871 N W
  5. ตอนนี้เราต้องใช้กำลังนี้กับทั้งสองคำและรับการเร่งความเร็วของพวกเขา

    • a c = 8.82871 / 24 = .36786 em / s 2
    • a d = -8.82871 / 26 = -.33957 em / s 2
  6. ตามกฎข้างต้นเราใช้การเร่งความเร็วกับความเร็วดังนั้น

    • v c = .36786 em / s
    • v d = -.33957 em / s
  7. จากนั้นเราใช้ความเร็วกับตำแหน่งดังนั้นหลังจากหนึ่งวินาที

    • x c = .36786 em
    • x d = 9 -.33957 = 8.66043 em
    • R c = 1.70833 + .36786 = 2.07619 em
    • R d = 10.11538-.33957 = 9.77581 em
  8. ตอนนี้เราทำขั้นตอนซ้ำอีกครั้งด้วยตำแหน่งใหม่:

    • F = 24 * 26 / ((9.77581) - (2.07619)) 2 = 10.52558 N w
    • a c = 10.52558 / 24 = .43857 em / s 2 , a d = 10.52558 / 26 = -.40483 em / s 2
    • v c = .36786 + .43857 = .80643 em / s, v d = -.33957 - .40483 = -.74440 em / s
    • x c = .36786 + .80643 = 1.17429 em, x d = 8.66043 - .74440 = 7.91603 em
    • R c = 2.07619 + .80643 = 2.88262 em, R d = 9.77581 - .74440 = 9.03141 em
  9. ดังนั้นเราจึงลงท้ายด้วย "cat" ที่ x = 1.17429 และ "dog" ที่ x = 7.91603

    • เราปัดค่าเหล่านั้นเป็นจำนวนเต็มที่ใกล้ที่สุดดังนั้น "cat" ไปที่ตำแหน่ง 1 และ "dog" ไปที่ตำแหน่ง 8 ดังนั้นผลลัพธ์คือ cat dog

การจัดการการชน

โปรดจำไว้ว่าการเร่งความเร็วใหม่จะถูกเพิ่มเข้าไปในความเร็วทุกวินาที ดังนั้นหากสองคำชนกันในบางเวลาให้ใช้พีชคณิตเพื่อหาจุดชนกัน ใช้ตัวอย่างนี้:

  • คำ 1 มีความยาว 4 ตัวอักษร (|| w 1 || = 4)
  • คำ 2 มีความยาว 4 ตัวอักษร (|| w 2 || = 4)
  • x 1 = 3, x 2 = 8
  • v 1 = 2, v 2 = -6

    3 + (4-1) + 2t = 8 - 6tแก้ t = .25s ตำแหน่งของการชนคือ x col = 6.5 ก่อนหน้านี้การปะทะกันควรปรากฏขึ้นระหว่าง x = 6 และ x = 7 เช่นนี้

    ####@@@@ .

สูตรที่ชัดเจนสำหรับตำแหน่งของคำหลังจากการชนกันคือ

  • x 1 = floor (x col ) - || w 1 || +1
  • x 2 = ชั้น (x col ) +1

@FryAmTheEggman สัญลักษณ์หัวข้อสุดท้ายใน "ข้อมูล" พูดถึงการปะทะกัน คุณสามารถทำได้ในขั้นตอนเดียว แต่ให้แน่ใจว่าได้ปฏิบัติตามกฎที่วางไว้
geokavel

คำพูดผ่านกันได้ไหม?
xnor

@xnor ไม่พวกเขาจะไม่ ฉันได้เพิ่มส่วนหนึ่งเกี่ยวกับการจัดการการชนอย่างเหมาะสม
geokavel

ฉันพยายามเข้าใจฟิสิกส์ที่เกี่ยวข้องที่นี่ พิจารณาการกำหนดค่าxx a(ช่องว่างระหว่างคำxxกับa) ในวิชาฟิสิกส์ของนิวตันแรงที่aเกิดขึ้นนั้นเกิดจากการxดึงที่ใกล้ขึ้นจากระยะทางของสอง em และอีกส่วนหนึ่งxดึงจากระยะทางสาม em ใช่หรือไม่ นั่นไม่เหมือนกับแรงของจุดมวลXดึงเดียวจากระยะทางของ2.5em (เช่นศูนย์กลางของมวลxx) เนื่องจากกฎผกผัน - สแควร์ ...
mathmandan

1
... เพื่อให้ชัดเจนฉันควรปฏิบัติต่อ WORD แต่ละคำราวกับว่ามันเป็นจุดมวลที่มีมวลรวมอยู่ที่ศูนย์กลางมวลโดยที่ "ศูนย์กลางของมวล" เราหมายถึง "ซึ่งเป็นศูนย์กลางของ ถ้าเราถือว่าตัวอักษรเป็นมวลจุดแทนที่จะเป็นมวล ถูกต้องหรือไม่
mathmandan

คำตอบ:


3

Python 3, 556 ไบต์

ขอบคุณ FryAmTheEggman และ Sherlock9 สำหรับบางไบต์

s,E,a,b,e=str.split,enumerate,lambda c:ord(c)%32*-~c.isupper(),lambda w:sum(map(a,w)),' '
def j(w):z,y=map(len,s(w));h=w.count(e);return sum(i*a(x)for i,x in E(w)if i<z)/b(w[:z]),sum(i*a(x)for i,x in E(w)if i>=y+h)/b(w[-y:])
def f(w):x,v=j(w);m,n=map(b,s(w));return m*n/(x-v)**2
def q(w):x,v=s(w);return f(w)/b(x),-f(w)/b(v)
def p(w,t):
 x,v=q(w);c,d=x,v;m,n=map(b,s(w));r,u=j(w);g,h=r,u;
 for i in range(t):r+=x;u+=v;f=m*n/(r-u)**2;c,d=f/m,f/n;x+=c;v+=d
 return int(r-g),int(1+h-u)
def g(w,t):x,y=p(w,t);u,v=s(w);return e*x+u+e*(len(w)-len(u+v)-x-y)+v+e*y

g(w,t)ใช้สตริง ( w) และเวลา ( t) และส่งคืนผลลัพธ์ ฟังก์ชั่นอื่น ๆ คือผู้ช่วยเหลือ

ลองออนไลน์ (พิมพ์ออกมา*แทนช่องว่างเพื่อให้มองเห็นได้ชัดเจนขึ้น)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.