Objectif
Générez ( N
) des segments de ligne aléatoires de longueur uniforme ( l
), vérifiez s'ils croisent les t
lignes parallèles équidistantes ( ).
Simulation
Que simulons-nous? L'aiguille de Buffon . Lissez le sable dans votre bac à sable, tracez un ensemble de lignes parallèles également espacées (appelez la distance entre les deux t
). Prenez un bâton droit de longueur l
et déposez-le N
fois dans le bac à sable. Soit le nombre de fois qu'il a franchi une ligne c
. Alors Pi = (2 * l * n) / (t * c)
!
Comment simulons-nous cela?
- Prendre connaissance
N,t,l
- Avec
N, t, l
tous des entiers positifs - Procédez comme suit
N
:- Générer une coordonnée entière uniformément aléatoire
x,y
- Avec
1 <= x, y <= 10^6
x,y
est le centre d'un segment de ligne de longueurl
- Générer un entier uniformément aléatoire
a
- Avec
1 <= a <= 180
- Soit
P
le point où le segment de ligne traverserait l'axe des x - Alors
a
c'est l'angle(x,y), P, (inf,0)
- Générer une coordonnée entière uniformément aléatoire
- Compter le nombre
c
de segments de ligne qui traversent la lignex = i*t
pour tout entieri
- Revenir
(2 * l * N) / (t * c)
spécification
- Contribution
- Flexible, saisissez les données de n'importe quelle manière standard (par exemple, paramètre de fonction, STDIN) et dans n'importe quel format standard (par exemple chaîne, binaire)
- Production
- Flexible, donne une sortie de n'importe quelle manière standard (par exemple retour, impression)
- Les espaces blancs, les espaces blancs arrière et avant sont acceptables
- Précision, veuillez fournir au moins 4 décimales de précision (c.-à-d.
3.1416
)
- Notation
- Le code le plus court gagne!
Cas de test
Votre sortie peut ne pas correspondre à ceux-ci, en raison du hasard. Mais en moyenne, vous devriez obtenir cette précision pour la valeur donnée 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
Ces défis sont des simulations d'algorithmes qui ne nécessitent que la nature et votre cerveau (et peut-être quelques ressources réutilisables) pour approximer Pi. Si vous avez vraiment besoin de Pi pendant l'apocalypse zombie, ces méthodes ne gaspillent pas de munitions ! Il y a neuf défis au total.
a
peut-elle également être créée par une autre méthode, si elle est uniforme? (en pensant à une bulle de Gauss 2D)
t > l
? Deux solutions ci-dessous font cette hypothèse, ce qui simplifie un peu la vérification de l'intersection.