Мета
Створіть ( 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
? Два рішення, що наведені нижче, роблять це припущення, що трохи спрощує перевірку на перехрестя.