Ваше завдання - написати програму або функцію, яка виводить n
випадкові числа з інтервалу [0,1] з фіксованою сумою s
.
Вхідні дані
n, n≥1
, кількість випадкових чисел для генерації
s, s>=0, s<=n
, сума чисел, які потрібно генерувати
Вихід
Випадкову n
множину чисел з плаваючою комою з усіма елементами з інтервалу [0,1] і сумою всіх елементів дорівнює s
, вивести будь-яким зручним однозначним способом. Усі дійсні n
пара-параметри повинні бути однаково вірогідними в межах обмежень чисел з плаваючою комою.
Це дорівнює рівномірному відбору проб від перетину точок всередині n
куба-розмірної одиниці та n-1
-вимірної гіперплани, яка проходить через (s/n, s/n, …, s/n)
і перпендикулярна вектору (1, 1, …, 1)
(див. Червону зону на малюнку 1 на трьох прикладах).
Малюнок 1: Площина дійсних виходів з n = 3 і сумами 0,75, 1,75 і 2,75
Приклади
n=1, s=0.8 → [0.8]
n=3, s=3.0 → [1.0, 1.0, 1.0]
n=2, s=0.0 → [0.0, 0.0]
n=4, s=2.0 → [0.2509075946818119, 0.14887693388076845, 0.9449661625992032, 0.6552493088382167]
n=10, s=9.999999999999 → [0.9999999999999,0.9999999999999,0.9999999999999,0.9999999999999,0.9999999999999,0.9999999999999,0.9999999999999,0.9999999999999,0.9999999999999,0.9999999999999]
Правила
- Ваша програма повинна закінчитися за секунду на вашій машині, принаймні з
n≤10
будь-якими дійсними s - Якщо ви цього хочете, ваша програма може бути ексклюзивною у верхньому кінці, тобто
s<n
числа виходів з напіввідкритого інтервалу [0,1) (порушуючи другий приклад) - Якщо ваша мова не підтримує числа з плаваючою комою, ви можете підробити висновок принаймні десятьма десятковими цифрами після десяткової крапки.
- Стандартні лазівки заборонені, а стандартні методи введення / виводу дозволені.
- Це код-гольф , тому найкоротший запис, виміряний в байтах, виграє.
This is equal to uniformly sampling from the intersection
- я бачу програму, що вибирає випадковим чином лише з кутів цього перехрестя. Чи було б це дійсно?
s==0 or s==3
. Для всіх інших значень s
, площина має ненульову область, і вам доведеться рівномірно обрати випадкову точку на цій площині.
s=2.99999999999, n=3
? Чи можемо ми генерувати випадкові результати в множинах, скажімо 1e-9
,?