Ваша задача - написать программу или функцию, которая выводит 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?
