Ihre Aufgabe ist es, ein Programm oder eine Funktion zu schreiben , die Zufallszahlen aus Intervall [0,1] mit fester Summe ausgibt .ns
Eingang
n, n≥1, Anzahl der zu generierenden Zufallszahlen
s, s>=0, s<=n, Summe der zu generierenden Zahlen
Ausgabe
Ein zufälliges nTupel von Gleitkommazahlen mit allen Elementen aus dem Intervall [0,1] und der Summe aller Elemente, die gleich sind s, wird auf eine bequeme, eindeutige Weise ausgegeben. Alle gültigen nTupel müssen innerhalb der Grenzen von Gleitkommazahlen gleich wahrscheinlich sein.
Dies ist gleichbedeutend mit einer gleichmäßigen Abtastung vom Schnittpunkt der Punkte innerhalb des nWürfels mit den Maßeinheiten und der n-1eindimensionalen Hyperebene, die durch (s/n, s/n, …, s/n)den Vektor verläuft und senkrecht zum Vektor verläuft (1, 1, …, 1)(siehe roter Bereich in Abbildung 1 für drei Beispiele).
Abbildung 1: Die Ebene der gültigen Ausgaben mit n = 3 und den Summen 0,75, 1,75 und 2,75
Beispiele
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]
Regeln
- Ihr Programm sollte auf Ihrem Computer in weniger als einer Sekunde beendet sein, zumindest mit
n≤10und allen gültigen s. - Wenn Sie möchten, kann Ihr Programm am oberen Ende exklusiv sein, dh
s<nund die Ausgabenummern aus dem halboffenen Intervall [0,1) (unterbrechen des zweiten Beispiels) - Wenn Ihre Sprache keine Gleitkommazahlen unterstützt, können Sie die Ausgabe mit mindestens zehn Dezimalstellen nach dem Komma fälschen.
- Standard-Regelungslücken sind nicht zulässig, und Standard-Eingabe- / Ausgabemethoden sind zulässig.
- Das ist Code-Golf , also gewinnt der kürzeste Eintrag, gemessen in Bytes.
This is equal to uniformly sampling from the intersection- ich kann ein Programm sehen, das zufällig nur aus den Ecken dieser Kreuzung auswählt. Wäre das gültig?
s==0 or s==3. Für alle anderen Werte von shat die Ebene eine Fläche ungleich Null und Sie müssen einen Punkt auf dieser Ebene gleichmäßig zufällig auswählen.
s=2.99999999999, n=3? Können wir zufällige Reals in Vielfachen von beispielsweise generieren 1e-9?
