Obbiettivo
Genera ( N
) segmenti di linea casuali di lunghezza uniforme ( l
), controlla se attraversano le t
linee parallele equidistanti ( ).
Simulazione
Cosa stiamo simulando? Ago di Buffon . Leviga la sabbia nella tua sandbox, disegna una serie di linee parallele equidistanti (chiama la distanza in mezzo t
). Prendi un bastoncino dritto di lunghezza l
e lascialo cadere N
nella sandbox. Lascia che sia il numero di volte che ha attraversato una linea c
. Allora Pi = (2 * l * n) / (t * c)
!
Come stiamo simulando questo?
- Prendi input
N,t,l
- Con
N, t, l
tutti i numeri interi positivi - Fai i seguenti
N
orari:- Genera una coordinata intera uniformemente casuale
x,y
- Con
1 <= x, y <= 10^6
x,y
è il centro di un segmento di linea di lunghezzal
- Genera un numero intero uniformemente casuale
a
- Con
1 <= a <= 180
- Lascia che
P
sia il punto in cui il segmento di linea attraverserebbe l'asse x - Quindi
a
è l'angolo(x,y), P, (inf,0)
- Genera una coordinata intera uniformemente casuale
- Contare il numero
c
di segmenti di linea che attraversano la lineax = i*t
per qualsiasi numero interoi
- Ritorno
(2 * l * N) / (t * c)
specificazione
- Ingresso
- Flessibile, accetta input in uno dei modi standard (es. Parametro di funzione, STDIN) e in qualsiasi formato standard (es. String, Binary)
- Produzione
- Flessibile, fornisce output in uno dei modi standard (ad es. Ritorno, stampa)
- Sono ammessi spazi bianchi, finali e spazi bianchi iniziali
- Precisione, si prega di fornire almeno 4 cifre decimali di precisione (es.
3.1416
)
- punteggio
- Vince il codice più corto!
Casi test
L'output potrebbe non allinearsi con questi, a causa di possibilità casuali. Ma in media, dovresti ottenere tanta precisione per il valore dato di 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
Queste sfide sono simulazioni di algoritmi che richiedono solo la natura e il cervello (e forse alcune risorse riutilizzabili) per approssimare Pi. Se hai davvero bisogno di Pi durante l'apocalisse di zombi, questi metodi non sprecano munizioni ! Ci sono nove sfide in totale.
a
essere creata anche con un altro metodo, se è uniforme? (pensando a una bolla Gauss 2D)
t > l
? Due soluzioni di seguito fanno questo presupposto, che semplifica un po 'il controllo dell'intersezione.