Cel
Wygeneruj ( N
) losowe segmenty linii o jednakowej długości ( l
), sprawdź, czy przecinają t
równoległe linie równoodległe ( ).
Symulacja
Co symulujemy? Igła Buffona . Wygładź piasek w piaskownicy, narysuj zestaw równomiernie rozmieszczonych równoległych linii (nazwij odległość między nimi t
). Weź prosty kij długości l
i upuść go N
razy w piaskownicy. Niech liczba razy przekroczy linię c
. To Pi = (2 * l * n) / (t * c)
!
Jak to symulujemy?
- Weź wkład
N,t,l
- Z
N, t, l
wszystkich dodatnich liczb całkowitych będących - Wykonaj następujące
N
czasy:- Wygeneruj jednolicie losową współrzędną całkowitą
x,y
- Z
1 <= x, y <= 10^6
x,y
jest środkiem odcinka liniil
- Wygeneruj jednolicie losową liczbę całkowitą
a
- Z
1 <= a <= 180
- Niech
P
będzie punktem, w którym odcinek linii przecinałby oś x - To
a
jest kąt(x,y), P, (inf,0)
- Wygeneruj jednolicie losową współrzędną całkowitą
- Policz liczbę
c
segmentów linii, które przecinają linięx = i*t
dla dowolnej liczby całkowiteji
- Powrót
(2 * l * N) / (t * c)
Specyfikacja
- Wejście
- Elastyczny, przyjmuj dane wejściowe na dowolny ze standardowych sposobów (np. Parametr funkcji, STDIN) i w dowolnym standardowym formacie (np. Ciąg, Binarny)
- Wynik
- Elastyczny, daje wydruk w dowolny ze standardowych sposobów (np. Zwrot, wydruk)
- Dopuszczalne są białe pola, końcowe i białe znaki wiodące
- Dokładność, proszę podać co najmniej 4 miejsca dziesiętne dokładności (tj.
3.1416
)
- Punktacja
- Najkrótszy kod wygrywa!
Przypadki testowe
Twój wynik może się nie zgadzać z powodu losowej szansy. Ale średnio powinieneś uzyskać taką dokładność dla danej wartości 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
Wyzwania te są symulacjami algorytmów, które wymagają jedynie natury i twojego mózgu (i być może pewnych zasobów wielokrotnego użytku) do przybliżenia Pi. Jeśli naprawdę potrzebujesz Pi podczas apokalipsy zombie, te metody nie marnują amunicji ! Łącznie jest dziewięć wyzwań .
a
można również utworzyć inną metodą, jeśli jest on jednolity? (myślenie o 2D Gaussa Bubble)
t > l
? Dwa poniższe rozwiązania potwierdzają to założenie, co znacznie upraszcza sprawdzanie skrzyżowania.