Objetivo
Genere ( N
) segmentos de línea aleatorios de longitud uniforme ( l
), verifique si cruzan las t
líneas paralelas equidistantes ( ).
Simulación
¿Qué estamos simulando? La aguja de Buffon . Alise la arena en su caja de arena, dibuje un conjunto de líneas paralelas igualmente espaciadas (llame a la distancia intermedia t
). Tome un palo recto de longitud l
y colóquelo N
en el cajón de arena. Sea el número de veces que cruzó una línea c
. Entonces Pi = (2 * l * n) / (t * c)
!
¿Cómo estamos simulando esto?
- Tomar entrada
N,t,l
- Con
N, t, l
todos siendo enteros positivos - Haz los siguientes
N
horarios:- Generar una coordenada entera uniformemente aleatoria
x,y
- Con
1 <= x, y <= 10^6
x,y
es el centro de un segmento de línea de longitudl
- Generar un entero uniformemente aleatorio
a
- Con
1 <= a <= 180
- Sea
P
el punto donde el segmento de línea cruzaría el eje x - Entonces
a
es el ángulo(x,y), P, (inf,0)
- Generar una coordenada entera uniformemente aleatoria
- Cuente el número
c
de segmentos de línea que cruzan la líneax = i*t
para cualquier número enteroi
- Regreso
(2 * l * N) / (t * c)
Especificación
- Entrada
- Flexible, tome la entrada en cualquiera de las formas estándar (por ejemplo, parámetro de función, STDIN) y en cualquier formato estándar (por ejemplo, cadena, binario)
- Salida
- Flexible, dé salida en cualquiera de las formas estándar (por ejemplo, devolución, impresión)
- El espacio en blanco, el espacio en blanco al final y al final es aceptable
- Precisión, proporcione al menos 4 decimales de precisión (es decir
3.1416
)
- Puntuación
- ¡El código más corto gana!
Casos de prueba
Es posible que su salida no se alinee con estos, debido a la posibilidad aleatoria. Pero en promedio, debe obtener esta precisión para el valor dado de N, t, l
.
Input (N,t,l) -> Output
----------- ------
10,10,5 -> ?.????
10,100,50 -> ?.????
1000,1000,600 -> 3.????
10000,1000,700 -> 3.1???
100000,1000,700 -> 3.14??
TL; DR
Estos desafíos son simulaciones de algoritmos que solo requieren la naturaleza y su cerebro (y tal vez algunos recursos reutilizables) para aproximarse a Pi. Si realmente necesitas Pi durante el apocalipsis zombie, ¡estos métodos no desperdician munición ! Hay nueve desafíos en total.
a
también por otro método, si es uniforme? (pensando en una burbuja Gauss 2D)
t > l
? Dos de las siguientes soluciones hacen esta suposición, lo que simplifica bastante la verificación de la intersección.