Цель
Генерируйте ( 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
? Два решения ниже делают это предположение, которое немного упрощает проверку на пересечение.