Objetivo
Gere ( N
) segmentos de linhas aleatórias de comprimento uniforme ( l
), verifique se eles cruzam as t
linhas paralelas equidistantes ( ).
Simulação
O que estamos simulando? Agulha de Buffon . Alise a areia na sua caixa de areia, desenhe um conjunto de linhas paralelas igualmente espaçadas (chame a distância entre elas t
). Pegue um pedaço reto de comprimento l
e solte-o N
na caixa de areia. Seja o número de vezes que cruzou uma linha c
. Então Pi = (2 * l * n) / (t * c)
!
Como estamos simulando isso?
- Aceitar entrada
N,t,l
- Com
N, t, l
todos sendo inteiros positivos - Faça os seguintes
N
horários:- Gere uma coordenada inteira uniformemente aleatória
x,y
- Com
1 <= x, y <= 10^6
x,y
é o centro de um segmento de linha de comprimentol
- Gere um número inteiro uniformemente aleatório
a
- Com
1 <= a <= 180
- Seja
P
o ponto em que o segmento de linha cruzaria o eixo x - Então
a
é o ângulo(x,y), P, (inf,0)
- Gere uma coordenada inteira uniformemente aleatória
- Conte o número
c
,, de segmentos de linha que cruzam a linhax = i*t
para qualquer número inteiroi
- Retorna
(2 * l * N) / (t * c)
Especificação
- Entrada
- Flexível, receba informações de qualquer uma das formas padrão (por exemplo, parâmetro de função, STDIN) e em qualquer formato padrão (por exemplo, String, Binário)
- Resultado
- Flexível, produza de qualquer forma padrão (por exemplo, devolução, impressão)
- Espaço em branco, espaço em branco à direita e à esquerda é aceitável
- Precisão, forneça pelo menos 4 casas decimais de precisão (ou seja
3.1416
)
- Pontuação
- O menor código vence!
Casos de teste
Sua saída pode não estar alinhada com isso, por causa do acaso. Mas, em média, você deve obter tanta precisão para o valor especificado 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
Esses desafios são simulações de algoritmos que exigem apenas a natureza e seu cérebro (e talvez alguns recursos reutilizáveis) para aproximar o Pi. Se você realmente precisa de Pi durante o apocalipse zumbi, esses métodos não desperdiçam munição ! Existem nove desafios no total.
a
também pode ser criada por outro método, se for uniforme? (pensando em uma bolha 2D Gauss)
t > l
? Duas soluções abaixo fazem essa suposição, o que simplifica bastante a verificação de interseção.