단어 사이의 매력


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 (Word Mass Unit)-문자 'a'의 질량과 같습니다.
    • 거리 : em , 한 문자의 길이.
    • 힘 : N W (Word Newton) = WMU · em / s 2
    • 중력 상수 : G = 1 N w · (em / WMU) 2
  • 첫 번째 문자는 x 축의 위치 0에 해당합니다.
  • 모든 계산은 가능한 한 정밀하게 이루어져야하며, 마지막에 가장 가까운 em으로 반올림해야합니다.
  • 미적분학을 사용할 필요가 없으며, 매 초마다 F 를 다시 계산하고 , 새로운 가속도를 속도에 자동으로 적용하고, 1 초 후에 속도를 위치에 적용하면됩니다 (예 참조).
  • 두 단어가 서로 충돌하면 (예 :) catdog 더 이상 움직이지 않습니다.

질량 중심

질량 중심 단어는 공식으로 찾을 수 있습니다 :

여기에 이미지 설명을 입력하십시오

여기서 M은 단어의 총 질량이고, 해요 내가 편지의 질량이고, r에 문자의 위치이다.

예:

(참고 :이 예에서는 표시되지 않지만 대문자는 소문자보다 2 배 더 큰 것을 기억하십시오.)

입력 : cat dog, 2

  1. 먼저 각 단어의 위치는 무엇입니까? "cat"은 위치 0에서 시작하고 "dog"은 위치 9에서 시작하므로

    • x c = 0 및 x d = 9
  2. 다음으로 "고양이"의 질량 중심을 찾으십시오.

    • 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. 그런 다음 위치에 속도를 적용하여 1 초 후에

    • x c = .36786 엠
    • 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. 따라서 x = 1.17429에서 "cat", x = 7.91603에서 "dog"으로 끝납니다.

    • 가장 가까운 정수로 반올림하여 "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 = .25 초 충돌 위치는 x col = 6.5입니다. 따라서 충돌은 x = 6과 x = 7 사이에서 발생하는 것으로 나타납니다.

    ####@@@@ .

충돌 후 단어의 위치에 대한 명시 적 공식은 다음과 같습니다.

  • x 1 = 바닥 (x col )-|| w 1 || +1
  • x 2 = 바닥 (x col ) +1

@FryAmTheEggman "info"의 마지막 글 머리 기호는 충돌에 대해 이야기합니다. 한 번에 수행 할 수 있지만 규정 된 규칙을 따라야합니다.
geokavel

단어가 서로를 통과 할 수 있습니까?
xnor

@ xnor 아니요, 그렇지 않습니다. 충돌을 올바르게 처리하는 방법에 대한 부분을 추가했습니다.
geokavel

여기에 관련된 물리학을 이해하려고합니다. 구성 고려 xx a(단어 사이에 하나의 공간 xxa). 뉴턴 물리학에서 a느끼는 힘 x은 2 em의 거리에서 더 가까이 당기고 다른 하나 x는 3 em의 거리에서 더 가까이 당기기 때문입니다 . 그것은 역 제곱 법칙으로 인해 em의 X거리 2.5(즉, 질량 중심) 에서 끌어 당기는 단일 포인트 질량의 힘과 같지 않습니다 xx.
mathmandan

1
... 명확히하기 위해, 나는 각 단어를 마치 질량 중심에 집중된 모든 질량을 가진 질량 질량 인 것처럼 취급해야합니다. 여기서 "질량 중심"이란 대신 질량을 점 질량으로 취급하면 질량이됩니다. " 이 올바른지?
mathmandan

답변:


3

파이썬 3, 556 바이트

FyAmTheEggman과 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)을 가져와 결과를 반환합니다. 다른 기능은 도우미입니다.

온라인으로 시도하십시오 ( *공백 대신 s로 인쇄하여 더 잘 보입니다)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.