Теория гравитации Ньютона говорит, что гравитационная сила между двумя точечными массами
F = (Гм 1 м 2 ) / г 2
куда
- G - гравитационная постоянная: 6,674 × 10 -11 Н · (м / кг) 2
- m 1 - масса первого объекта
- м 2 - масса второго объекта
- r - расстояние между их центрами масс
Вызов
Вам нужно смоделировать тягу между двумя словами. Каждая строчная буква имеет массу, заданную ее положением в алфавите. Заглавные буквы имеют вдвое большую массу, чем их строчные буквы! Вам будет предоставлена строка, содержащая два слова, разделенных несколькими пробелами, а также положительное целое число секунд, с . Выведите, как будет выглядеть строка через s секунд.
Информация
- Поскольку слова являются абстрактными, они имеют различный набор единиц и констант
- Масса: WMU (Word Mass Unit) - равна массе буквы «а».
- Расстояние: em , длина одного символа.
- Сила: N W (Слово Ньютон) = WMU · em / s 2
- Гравитационная постоянная: G = 1 N w · (em / WMU) 2
- Первый символ соответствует позиции 0 на оси х.
- Все вычисления должны быть сделаны с максимально возможной точностью, только в конце вы округляетесь до ближайшего значения.
- Вам не нужно использовать исчисление, вам просто нужно пересчитывать F каждую секунду, автоматически применять новое ускорение к скорости, а через секунду применять скорость к позиции (см. Пример).
- Как только два слова сталкиваются друг с другом (как
catdog
), они не двигаются дальше.
Центр массы
Центр масс слова можно найти по следующей формуле:
Где M - общая масса слова, m i - масса буквы, а r i - позиция буквы.
Пример:
(Примечание. Хотя в этом примере это не показано, помните, что заглавные буквы имеют в два раза большую массу, чем их строчные буквы.)
Вход:, cat dog
2
Во-первых, каковы позиции каждого слова? «кошка» начинается с позиции 0, а «собака» начинается с позиции 9, поэтому
- х с = 0 и х д = 9
Далее давайте найдем центр масс «кота».
- Он имеет массу 24 WMU (3 + 1 + 20).
- R c = 1/24 (3 * 0 + 1 * 1 + 20 * 2) = 41/24 = 1,70833
- Поэтому неудивительно, что центр масс очень близок к букве «т».
Теперь давайте получим центр масс «собаки»
- R d = 1/26 (4 * 9 + 15 * 10 + 7 * 11) = 263/26 = 10,11538 em
- Таким образом, центр масс собаки близок к букве «о», слегка в направлении «г».
Теперь мы можем рассчитать силу между двумя словами.
- F = 24 * 26 / (10,11538-1,70833) 2 = 8,82871 N ш
Теперь нам нужно применить эту силу к обоим словам и получить их ускорения
- a c = 8,82871 / 24 = .36786 em / с 2
- a d = -8,82871 / 26 = -,33957 em / с 2
Следуя приведенным выше правилам, мы применяем ускорение к скорости, поэтому
- v c = .36786 em / s
- V д = -,33957 Ем / с
Затем мы применяем скорость к позиции, поэтому через одну секунду
- х с = .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
Теперь повторим процедуру еще раз с новыми позициями:
- F = 24 * 26 / ((9,77581) - (2,07619)) 2 = 10,52558 Н ш
- a c = 10,52558 / 24 = .43857 em / с 2 , a d = 10,52558 / 26 = -.40483 em / с 2
- v c = .36786 + .43857 = .80643 em / с, v d = -.33957 - .40483 = -.74440 em / с
- 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
Таким образом, мы получаем «кошка» в x = 1.17429 и «собака» в x = 7.91603.
- Мы округляем их до ближайшего целого числа, так что «кошка» переходит в позицию 1, а «собака» переходит в позицию 8, поэтому вывод
cat dog
- Мы округляем их до ближайшего целого числа, так что «кошка» переходит в позицию 1, а «собака» переходит в позицию 8, поэтому вывод
Обработка коллизий
Помните, что новое ускорение немедленно добавляется к скорости каждую секунду. Поэтому, если два слова сталкиваются в определенное время, используйте алгебру, чтобы найти точку столкновения. Возьмите этот пример:
- слово 1 состоит из 4 букв (|| w 1 || = 4)
- слово 2 имеет длину 4 буквы (|| w 2 || = 4)
- х 1 = 3, х 2 = 8
v 1 = 2, v 2 = -6
Решите
3 + (4-1) + 2t = 8 - 6t
. t = 0,25 с. Положение столкновения x col = 6,5. Поэтому столкновение должно выглядеть как происходящее между x = 6 и x = 7, как таковое####@@@@
,
Явная формула для положения слов после столкновения
- x 1 = этаж (x цв ) - || w 1 || +1
- х 2 = этаж (х цв ) +1
источник
xx a
(один пробел между словамиxx
иa
). В ньютоновской физике сила, котораяa
ощущается, должна быть связана с более близкимx
натяжением с расстояния двух, а другоеx
- с расстояния трех, да? Это не то же самое, что силаX
вытягивания одной точки-массы с расстояния2.5
их (т.xx
Ответы:
Python 3, 556 байт
Спасибо FryAmTheEggman и Sherlock9 за некоторые байты
g(w,t)
принимает строку (w
) и время (t
) и возвращает результат. Другие функции являются помощниками.Попробуйте онлайн (распечатывает
*
s вместо пробелов, чтобы он был более заметным)источник