Teoria grawitacji Newtona mówi, że siła grawitacji między dwiema masami punktowymi jest
F = (Gm 1 m 2 ) / r 2
Gdzie
- G to stała grawitacyjna: 6,674 x 10 -11 Nm (m / kg), 2
- m 1 to masa pierwszego obiektu
- m 2 to masa drugiego obiektu
- r jest odległością między ich środkami masy
Wyzwanie
Musisz zasymulować przyciąganie między dwoma słowami. Każda mała litera ma masę wynikającą z jej pozycji w alfabecie. Wielkie litery mają dwa razy więcej niż małe litery! Otrzymasz ciąg zawierający dwa słowa oddzielone kilkoma spacjami, a także dodatnią liczbę całkowitą sekund, s . Wypisuj, jak wyglądałby łańcuch po s sekundach.
Informacje
- Ponieważ słowa są abstrakcyjne, mają inny zestaw jednostek i stałych
- Mass: WMU (Word Mass Unit) - równa masie litery „a”.
- Odległość: em , długość jednego znaku.
- Siła: N W (Słowo Newton) = WMU · em / s 2
- Stała grawitacyjna: G = 1 N w · (em / WMU) 2
- Pierwszy znak odpowiada pozycji 0 na osi x.
- Wszystkie obliczenia powinny być wykonywane z możliwie największą precyzją, tylko na końcu zaokrąglasz się do najbliższego.
- Nie musisz używać rachunku całkowego, wystarczy ponownie obliczyć F co sekundę, automatycznie zastosować nowe przyspieszenie do prędkości, a po drugiej zastosować prędkość do pozycji (patrz przykład).
- Kiedy dwa słowa zderzą się ze sobą (jak
catdog
), nie ruszają się dalej.
Centrum Mszy
Środek ciężkości danego słowa może być znaleziony z wzoru:
Gdzie M jest całkowitą masą słowa, m i jest masą litery, a r i jest pozycją litery.
Przykład:
(Uwaga: chociaż ten przykład tego nie pokazuje, pamiętaj, że wielkie litery mają dwa razy większą masę niż małe odpowiedniki).
Wejście:, cat dog
2
Po pierwsze, jakie są pozycje każdego słowa? „kot” zaczyna się w pozycji 0, a „pies” zaczyna się w pozycji 9, więc
- x c = 0 i x d = 9
Następnie znajdźmy środek masy „kota”.
- Ma masę 24 WMU (3 + 1 + 20).
- R c = 1/24 (3 * 0 + 1 * 1 + 20 * 2) = 41/24 = 1,70833 em
- Nic więc dziwnego, że środek masy znajduje się bardzo blisko litery „t”.
Teraz zdobądźmy środek masy „psa”
- R d = 1/26 (4 * 9 + 15 * 10 + 7 * 11) = 263/26 = 10,11538 em
- Środek masy dla psa jest więc zbliżony do litery „o”, nieco w kierunku „g”.
Teraz możemy obliczyć siłę między dwoma słowami.
- F = 24 * 26 / (10,11538-1,70833) 2 = 8,82871 N w
Teraz musimy zastosować tę siłę do obu słów i uzyskać ich przyspieszenie
- a c = 8,82871 / 24 = .36786 em / s 2
- a d = -8,82871 / 26 = -333957 em / s 2
Zgodnie z powyższymi zasadami stosujemy przyspieszenie do prędkości, więc
- v c = 0,36786 em / s
- v d = -333957 em / s
Następnie zastosujemy prędkość do pozycji, więc po jednej sekundzie
- x c = .36786 em
- x d = 9 -3 3957 = 8,66043 em.
- R c = 1,70833 + .36786 = 2,07619 em
- R d = 10,11538 0,33957 = 9,77581-em
Teraz powtarzamy procedurę jeszcze raz z nowymi pozycjami:
- F = 24 * 26 / ((9,77581) - (2,07619)) 2 = 10,52558 N w
- a c = 10,52558 / 24 = 0,43857 em / s 2 , a d = 10,52558 / 26 = -.40483 em / s 2
- v c = .36786 + .43857 = .80643 em / s, v d = -333957 - .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, Rd = 9,77581 - .74440 = 9,03141 em
W rezultacie otrzymujemy „cat” przy x = 1,17429 i „dog” przy x = 7,91603.
- Zaokrąglamy je do najbliższej liczby całkowitej, więc „kot” przechodzi na pozycję 1, a „pies” na pozycję 8, więc wynikiem jest
cat dog
- Zaokrąglamy je do najbliższej liczby całkowitej, więc „kot” przechodzi na pozycję 1, a „pies” na pozycję 8, więc wynikiem jest
Obsługa kolizji
Pamiętaj, że nowe przyspieszenie jest natychmiast dodawane do prędkości co sekundę. Dlatego, jeśli dwa słowa zderzają się w określonym czasie, użyj algebry, aby znaleźć punkt zderzenia. Weź ten przykład:
- słowo 1 ma 4 litery (|| w 1 || = 4)
- słowo 2 ma 4 litery (|| w 2 || = 4)
- x 1 = 3, x 2 = 8
v 1 = 2, v 2 = -6
Rozwiązać
3 + (4-1) + 2t = 8 - 6t
. t = .25s. Pozycja kolizji wynosi x col = 6,5. Dlatego zderzenie powinno wyglądać jak występujące między x = 6 a x = 7####@@@@
.
Wyraźna formuła dla pozycji słów po zderzeniu to
- x 1 = podłoga (x kolumna ) - || w 1 || +1
- x 2 = podłoga (x kolumna ) +1
źródło
xx a
(jedna spacja między słowamixx
ia
). W fizyce newtonowskiej odczuwalna siłaa
byłaby spowodowana bliższymx
przyciąganiem z odległości dwóch em, a drugimx
przyciąganiem z odległości trzech em, tak? To nie to samo, co siła pojedynczej masy punktowejX
ciągnącej się z odległości2.5
ich (tj.xx
Odpowiedzi:
Python 3, 556 bajtów
Dzięki FryAmTheEggman i Sherlock9 za niektóre bajty
g(w,t)
pobiera string (w
) i time (t
) i zwraca wynik. Pozostałe funkcje są pomocnikami.Wypróbuj online (drukuje
*
s zamiast spacji, aby był bardziej widoczny)źródło