La teoría de la gravitación de Newton dice que la fuerza gravitacional entre dos masas de puntos es
F = (Gm 1 m 2 ) / r 2
Dónde
- G es la constante gravitacional: 6.674 × 10 −11 N · (m / kg) 2
- m 1 es la masa del primer objeto
- m 2 es la masa del segundo objeto
- r es la distancia entre sus centros de masa
Desafío
Necesita simular la atracción entre dos palabras. Cada letra minúscula tiene masa dada por su posición en el alfabeto. ¡Las letras mayúsculas tienen el doble de masa que sus equivalentes en minúsculas! Se le dará una cadena que contiene dos palabras separadas por varios espacios, así como un número entero positivo de segundos, s . Muestra cómo se vería la cadena después de s segundos.
Informacion
- Como las palabras son abstractas, tienen un conjunto diferente de unidades y constantes.
- Masa: WMU (Unidad de masa de palabras): igual a la masa de la letra 'a'.
- Distancia: em , la longitud de un personaje.
- Fuerza: N W (Palabra Newton) = WMU · em / s 2
- Constante gravitacional: G = 1 N w · (em / WMU) 2
- El primer carácter corresponde a la posición 0 en el eje x.
- Todos los cálculos deben hacerse con la mayor precisión posible, solo al final se redondea al em más cercano.
- No necesita usar cálculo, solo necesita recalcular la F cada segundo, aplicar automáticamente la nueva aceleración a la velocidad y después de un segundo aplicar la velocidad a la posición (ver ejemplo).
- Una vez que dos palabras chocan entre sí (como
catdog
), no se mueven más.
Centro de masa
El centro de masa de una palabra se puede encontrar con la fórmula:
Donde M es la masa total de la palabra, m i es la masa de una letra y r i es la posición de la letra.
Ejemplo:
(Nota: aunque este ejemplo no lo muestra, recuerde que las letras mayúsculas tienen el doble de masa que sus equivalentes en minúsculas).
Entrada: cat dog
2
Primero, ¿cuáles son las posiciones de cada palabra? "cat" comienza en la posición 0 y "dog" comienza en la posición 9, entonces
- x c = 0 yx d = 9
A continuación, busquemos el centro de masa del "gato".
- Tiene una masa de 24 WMU (3 + 1 + 20).
- R c = 1/24 (3 * 0 + 1 * 1 + 20 * 2) = 41/24 = 1.70833 em
- Así que, como era de esperar, el centro de masa está muy cerca de la letra 't'.
Ahora vamos al centro de masa del "perro"
- R d = 1/26 (4 * 9 + 15 * 10 + 7 * 11) = 263/26 = 10.11538 em
- Entonces, el centro de masa para el perro está cerca de la letra 'o', ligeramente hacia 'g'.
Ahora podemos calcular la fuerza entre las dos palabras.
- F = 24 * 26 / (10.11538-1.70833) 2 = 8.82871 N w
Ahora necesitamos aplicar esta fuerza a ambas palabras y obtener sus aceleraciones
- a c = 8.82871 / 24 = .36786 em / s 2
- a d = -8.82871 / 26 = -.33957 em / s 2
Siguiendo las reglas anteriores, aplicamos la aceleración a la velocidad, entonces
- v c = .36786 em / s
- v d = -.33957 em / s
Luego aplicamos la velocidad a la posición, así que después de un segundo,
- 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
Ahora repetimos el procedimiento una vez más con las nuevas posiciones:
- 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
Entonces terminamos con "gato" en x = 1.17429 y "perro" en x = 7.91603.
- Los redondeamos al número entero más cercano para que "cat" vaya a la posición 1 y "dog" vaya a la posición 8, por lo que la salida es
cat dog
- Los redondeamos al número entero más cercano para que "cat" vaya a la posición 1 y "dog" vaya a la posición 8, por lo que la salida es
Manejo de colisiones
Recuerde que la nueva aceleración se agrega inmediatamente a la velocidad cada segundo. Por lo tanto, si dos palabras chocan en cierto momento, use álgebra para encontrar el punto de colisión. Toma este ejemplo:
- la palabra 1 tiene 4 letras (|| w 1 || = 4)
- la palabra 2 tiene 4 letras (|| w 2 || = 4)
- x 1 = 3, x 2 = 8
v 1 = 2, v 2 = -6
Resolver
3 + (4-1) + 2t = 8 - 6t
. t = .25s. La posición de la colisión es x col = 6.5. Por lo tanto, la colisión debería aparecer entre x = 6 yx = 7, como tal####@@@@
.
La fórmula explícita para las posiciones de las palabras después de una colisión es
- x 1 = piso (x col ) - || w 1 || +1
- x 2 = piso (x col ) +1
fuente
xx a
(un espacio entre las palabrasxx
ya
). En la física newtoniana, la fuerza quea
se sentiría se debería a lax
atracción más cercana desde una distancia de dos em, y la otrax
atracción desde una distancia de tres em, ¿sí? Eso no es lo mismo que la fuerza de un solo punto deX
extracción de masa desde una distancia de2.5
em (es decir, el centro de masa delxx
), debido a la ley del cuadrado inverso ...Respuestas:
Python 3, 556 bytes
Gracias a FryAmTheEggman y Sherlock9 por algunos bytes
g(w,t)
toma la cadena (w
) y el tiempo (t
), y devuelve el resultado. Las otras funciones son ayudantes.Pruébelo en línea (imprime
*
s en lugar de espacios para que sea más visible)fuente