Цель
Генерируйте ( N) случайные отрезки одинаковой длины ( l), проверьте, пересекают ли они равноотстоящие ( t) параллельные линии.
моделирование
Что мы моделируем? Игла Буффона . Разгладьте песок в своей песочнице, нарисуйте набор параллельных линий, расположенных на равных расстояниях (назовите расстояние между ними t). Возьмите прямую палку длины lи бросьте ее Nв песочницу. Пусть будет количество пересечений линии c. Тогда Pi = (2 * l * n) / (t * c)!
Как мы моделируем это?
- Принять вход
N,t,l - Со
N, t, lвсеми положительными целыми числами - Делайте следующее
Nвремя:- Генерация равномерно случайной целочисленной координаты
x,y - С
1 <= x, y <= 10^6 x,yявляется центром отрезка длиныl- Генерация равномерно случайного целого числа
a - С
1 <= a <= 180 - Позвольте
Pбыть точкой, где отрезок будет пересекать ось X - Тогда
aугол(x,y), P, (inf,0)
- Генерация равномерно случайной целочисленной координаты
- Подсчитайте количество
cотрезков, которые пересекают линиюx = i*tдля любого целого числаi - Возвращение
(2 * l * N) / (t * c)
Спецификация
- вход
- Гибкость, принимать входные данные любым из стандартных способов (например, параметр функции, STDIN) и в любом стандартном формате (например, String, Binary)
- Вывод
- Гибкость, вывод на печать любым из стандартных способов (например, возврат, печать)
- Пробел, конечный и ведущий пробел приемлем
- Точность, укажите не менее 4 знаков после запятой (т.е.
3.1416)
- счет
- Самый короткий код выигрывает!
Тестовые случаи
Ваш результат может не совпадать с этим из-за случайного шанса. Но в среднем вы должны получить примерно такую точность для заданного значения 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
Эти проблемы представляют собой симуляции алгоритмов, которые требуют только природы и вашего мозга (и, возможно, некоторых ресурсов многократного использования) для приближения Pi. Если вам действительно нужен Пи во время апокалипсиса зомби, эти методы не тратят патроны ! Всего девять задач .
aбыть создано другим методом, если оно однородно? (думая о 2D
t > l? Два решения ниже делают это предположение, которое немного упрощает проверку на пересечение.

