Twoim zadaniem jest napisanie programu lub funkcji tego wyjścia n
liczb losowych z przedziału [0,1] z ustaloną sumę s
.
Wkład
n, n≥1
, liczba liczb losowych do wygenerowania
s, s>=0, s<=n
, suma liczb do wygenerowania
Wydajność
Losowa n
liczba liczb zmiennoprzecinkowych ze wszystkimi elementami z przedziału [0,1] i sumą wszystkich elementów równych s
, jest generowana w dowolny dogodny, jednoznaczny sposób. Wszystkie ważne n
pary muszą być jednakowo prawdopodobne w granicach liczb zmiennoprzecinkowych.
Jest to równoznaczne z równomiernym próbkowaniem z przecięcia punktów wewnątrz n
sześcianu -wymiarowej jednostki i n-1
-wymiarowej hiperpłaszczyzny, która przechodzi (s/n, s/n, …, s/n)
i jest prostopadła do wektora (1, 1, …, 1)
(trzy przykłady patrz czerwony obszar na rycinie 1).
Rysunek 1: Płaszczyzna prawidłowych wyników przy n = 3 i suma 0,75, 1,75 i 2,75
Przykłady
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]
Zasady
- Twój program powinien zakończyć się na sekundę na twoim komputerze co najmniej za pomocą
n≤10
i prawidłowych s. - Jeśli chcesz, twój program może być wyłączny na górnym końcu, tj.
s<n
I liczbach wyjściowych z półotwartego przedziału [0,1) (przełamując drugi przykład) - Jeśli twój język nie obsługuje liczb zmiennoprzecinkowych, możesz sfałszować wynik co najmniej dziesięcioma cyframi dziesiętnymi po przecinku.
- Standardowe luki są niedozwolone i dozwolone są standardowe metody wejścia / wyjścia.
- To jest golf golfowy , więc wygrywa najkrótszy wpis, mierzony w bajtach.
This is equal to uniformly sampling from the intersection
- widzę, że program wybiera losowo tylko z rogów tego skrzyżowania. Czy to byłoby ważne?
s==0 or s==3
. Dla wszystkich innych wartości s
płaszczyzna ma niezerowe pole i musisz jednorodnie losowo wybrać punkt na tej płaszczyźnie.
s=2.99999999999, n=3
? Czy możemy generować losowe liczby rzeczywiste w wielokrotnościach, powiedzmy 1e-9
,?