Geben Sie bei zwei positiven ganzen Zahlen a
und b
die Häufigkeitsverteilung der rollenden a- b
seitigen Würfelzeiten a
und der Summierung der Ergebnisse aus.
Eine Häufigkeitsverteilung listet die Häufigkeit jeder möglichen Summe auf, wenn jede mögliche Folge von Würfeln einmal auftritt. Die Frequenzen sind also ganze Zahlen, deren Summe gleich ist b**a
.
Regeln
- Die Frequenzen müssen in aufsteigender Reihenfolge der Summe aufgeführt werden, der die Frequenz entspricht.
- Das Beschriften der Frequenzen mit den entsprechenden Summen ist zulässig, aber nicht erforderlich (da die Summen aus der erforderlichen Reihenfolge abgeleitet werden können).
- Sie müssen keine Eingaben verarbeiten, bei denen die Ausgabe den für Ihre Sprache darstellbaren Bereich von Ganzzahlen überschreitet.
- Führende oder nachfolgende Nullen sind nicht zulässig. Es sollten nur positive Frequenzen im Ausgang erscheinen.
Testfälle
Format: a b: output
1 6: [1, 1, 1, 1, 1, 1]
2 6: [1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1]
3 6: [1, 3, 6, 10, 15, 21, 25, 27, 27, 25, 21, 15, 10, 6, 3, 1]
5 2: [1, 5, 10, 10, 5, 1]
6 4: [1, 6, 21, 56, 120, 216, 336, 456, 546, 580, 546, 456, 336, 216, 120, 56, 21, 6, 1]
10 10: [1, 10, 55, 220, 715, 2002, 5005, 11440, 24310, 48620, 92368, 167860, 293380, 495220, 810040, 1287484, 1992925, 3010150, 4443725, 6420700, 9091270, 12628000, 17223250, 23084500, 30427375, 39466306, 50402935, 63412580, 78629320, 96130540, 115921972, 137924380, 161963065, 187761310, 214938745, 243015388, 271421810, 299515480, 326602870, 351966340, 374894389, 394713550, 410820025, 422709100, 430000450, 432457640, 430000450, 422709100, 410820025, 394713550, 374894389, 351966340, 326602870, 299515480, 271421810, 243015388, 214938745, 187761310, 161963065, 137924380, 115921972, 96130540, 78629320, 63412580, 50402935, 39466306, 30427375, 23084500, 17223250, 12628000, 9091270, 6420700, 4443725, 3010150, 1992925, 1287484, 810040, 495220, 293380, 167860, 92368, 48620, 24310, 11440, 5005, 2002, 715, 220, 55, 10, 1]
5 50: [1, 5, 15, 35, 70, 126, 210, 330, 495, 715, 1001, 1365, 1820, 2380, 3060, 3876, 4845, 5985, 7315, 8855, 10626, 12650, 14950, 17550, 20475, 23751, 27405, 31465, 35960, 40920, 46376, 52360, 58905, 66045, 73815, 82251, 91390, 101270, 111930, 123410, 135751, 148995, 163185, 178365, 194580, 211876, 230300, 249900, 270725, 292825, 316246, 341030, 367215, 394835, 423920, 454496, 486585, 520205, 555370, 592090, 630371, 670215, 711620, 754580, 799085, 845121, 892670, 941710, 992215, 1044155, 1097496, 1152200, 1208225, 1265525, 1324050, 1383746, 1444555, 1506415, 1569260, 1633020, 1697621, 1762985, 1829030, 1895670, 1962815, 2030371, 2098240, 2166320, 2234505, 2302685, 2370746, 2438570, 2506035, 2573015, 2639380, 2704996, 2769725, 2833425, 2895950, 2957150, 3016881, 3075005, 3131390, 3185910, 3238445, 3288881, 3337110, 3383030, 3426545, 3467565, 3506006, 3541790, 3574845, 3605105, 3632510, 3657006, 3678545, 3697085, 3712590, 3725030, 3734381, 3740625, 3743750, 3743750, 3740625, 3734381, 3725030, 3712590, 3697085, 3678545, 3657006, 3632510, 3605105, 3574845, 3541790, 3506006, 3467565, 3426545, 3383030, 3337110, 3288881, 3238445, 3185910, 3131390, 3075005, 3016881, 2957150, 2895950, 2833425, 2769725, 2704996, 2639380, 2573015, 2506035, 2438570, 2370746, 2302685, 2234505, 2166320, 2098240, 2030371, 1962815, 1895670, 1829030, 1762985, 1697621, 1633020, 1569260, 1506415, 1444555, 1383746, 1324050, 1265525, 1208225, 1152200, 1097496, 1044155, 992215, 941710, 892670, 845121, 799085, 754580, 711620, 670215, 630371, 592090, 555370, 520205, 486585, 454496, 423920, 394835, 367215, 341030, 316246, 292825, 270725, 249900, 230300, 211876, 194580, 178365, 163185, 148995, 135751, 123410, 111930, 101270, 91390, 82251, 73815, 66045, 58905, 52360, 46376, 40920, 35960, 31465, 27405, 23751, 20475, 17550, 14950, 12650, 10626, 8855, 7315, 5985, 4845, 3876, 3060, 2380, 1820, 1365, 1001, 715, 495, 330, 210, 126, 70, 35, 15, 5, 1]
b
das mindestens 2 ist? (Oder wenn nicht, wie sollte die Häufigkeitsliste für Summen eines einseitigen Würfels aussehen?)Antworten:
Oktave , 38 Bytes
Probieren Sie es online!
Erläuterung
Das Hinzufügen unabhängiger Zufallsvariablen entspricht dem Falten ihrer Wahrscheinlichkeitsmassenfunktionen (PMF) oder dem Multiplizieren ihrer charakteristischen Funktionen (CF). Somit ist die CF der Summe
a
unabhängiger, gleichverteilter Variablen gegeben durch die einer einzelnen Variablen, die hoch genug ist vona
.Die CF ist im Wesentlichen die Fourier-Transformation der PMF und kann somit über eine FFT berechnet werden. Die PMF einer einzelnen
b
-sided Matrize ist einheitlich auf1
,2
, ...,b
. Es sind jedoch zwei Änderungen erforderlich:1
wird anstelle der tatsächlichen Wahrscheinlichkeitswerte (1/b
) verwendet. Auf diese Weise wird das Ergebnis de-normalisiert und enthält nach Bedarf ganze Zahlen.a*b-a+1
) hat und das implizite periodische Verhalten, das von der FFT angenommen wird, die Ergebnisse nicht beeinflusst.Sobald die charakteristische Funktion der Summe erhalten wurde, wird eine inverse FFT verwendet, um das Endergebnis zu berechnen, und es wird eine Rundung angewendet, um Gleitkommaungenauigkeiten zu korrigieren.
Beispiel
Betrachten Sie Eingänge
a=2
,b=6
. Der Code erstellta:a*b<a+b
einen Vektor mitb=6
Einsen, der auf die Größe Null aufgefüllt ista*b-a+1
:Dann
fft(...)
gibtMan kann hier fast die sinc-Funktion erkennen (Fourier-Transformation eines Rechteckimpulses).
(...).^a
Wirft jeden Eintrag aufa
undifft(...)
nimmt dann die inverse FFT, die gibtObwohl die Ergebnisse in diesem Fall genau Ganzzahlen sind, kann es im Allgemeinen zu relativen Fehlern in der Größenordnung kommen
1e-16
, weshalb diesround(...)
erforderlich ist.quelle
Mathematica, 29 Bytes
Erzeugt einfach alle möglichen Würfelwürfe, nimmt deren Gesamtwerte und zählt dann. Jede Frequenz ist mit ihrem Wert gekennzeichnet.
Mathematica, 38 Bytes
Erweitert
(1+x+x^2+...+x^(a-1))^b
und nimmt die Koeffizienten vonx
. Da1+x+x^2+...+x^(a-1)
die Erzeugungsfunktion für einen einzelnen Würfelwurf und Produkte Windungen entsprechen - Additionswerte von Würfeln - ergibt das Ergebnis die Häufigkeitsverteilung.quelle
Haskell ,
90797775 BytesVielen Dank an Lynn für den kartesischen Produkttrick . -11 Bytes dank vieler Haskell-Tricks von Funky Computer Man, -2 Bytes durch Namensgebung, -2 Bytes dank Laikoni. Golfvorschläge sind willkommen! Probieren Sie es online!
Ungolfed
quelle
$
anstelle von()
, um 2 Bytes zu speichern. TIOreplicate
(map length$)=(length<$>)
für zwei BytesPyth - 10 Bytes
Nimmt einfach alle möglichen Würfelkombinationen, indem das kartesische Produkt von
[1, b]
,a
Zeiten, Summierung und Länge jeder Summengruppe genommen wird.Test Suite .
quelle
05AB1E , 8 Bytes
Probieren Sie es online!
Wie?
quelle
R , 58 Bytes
Probieren Sie es online!
quelle
R , 52 Bytes
Probieren Sie es online!
Ein Port des @Luis Mendo des Octave Lösung ,
fft(z, inverse=T)
gibt leider die nicht normalisieren inverse FFT, so dass wir durch die Länge zu unterteilen, und es gibt einencomplex
Vektor, so dass wir nur den Realteil nehmen.quelle
cmdscale
:-)SageMath, 40 Bytes
Probieren Sie es online aus
convolution
berechnet die diskrete Faltung zweier Listen.reduce
tut was es verspricht[1]*b
ist eine Liste vonb
1
s, der Häufigkeitsverteilung von1db
.[[1]*b]*a
erstellt eine verschachtelte Liste vona
Kopien vonb
1
s.Python 2 + NumPy , 56 Bytes
Probieren Sie es online!
Ich habe diese Lösung in die obige eingeschlossen, da sie im Wesentlichen gleichwertig ist. Beachten Sie, dass diese Funktion ein NumPy-Array und keine Python-Liste zurückgibt, sodass die Ausgabe etwas anders aussieht, wenn Sie
print
es tun .numpy.ones((a,b))
ist der "richtige" Weg, ein Array für die Verwendung mit NumPy zu erstellen, und daher könnte es anstelle von verwendet werden[[1]*b]*a
, aber es ist leider länger.quelle
Gelee , 5 Bytes
Probieren Sie es online!
Beachten Sie, dass dies die Argumente in umgekehrter Reihenfolge nimmt.
Wie?
Alternativlösungen:
quelle
Python 2 ,
10291 BytesProbieren Sie es online!
quelle
Haskell , 61 Bytes
Probieren Sie es online! Verwenden Sie als
a#b
.Teilweise basierend auf Sherlock9s Haskell-Antwort .
quelle
MATL , 9 Bytes
Gleicher Ansatz wie Maltysens Pyth-Antwort .
Die Eingaben erfolgen in umgekehrter Reihenfolge. Probieren Sie es online!
quelle
Pari / GP , 28 Bytes
Probieren Sie es online!
quelle
Perl 5 , 53 Bytes
Probieren Sie es online!
Eingabeformat:
quelle
JavaScript (ES6), 94 Byte
Begrenzt durch 32-Bit-Integer-Überlauf, aber Floats können stattdessen zu einem Preis von 1 Byte verwendet werden.
quelle
J ,
25 24 2120 BytesProbieren Sie es online!
Anfangs habe ich die [0..n-1] -Liste inkrementiert, um [1..n] zu erhalten, aber anscheinend ist dies nicht erforderlich.
quelle
#/.~@,@(+///)@$i.@{:
. Es scheint, als gäbe es eine Möglichkeit, das Verb ein bisschen weniger dyadisch zu machen, aber ich war nicht in der Lage, es zu tun./
in+//
Javascript (ES6), 89 Byte
Nimmt Eingaben in umgekehrter Reihenfolge vor
f(b)(a)
quelle
Eigentlich ,
1312 Bytes-1 Byte danke an Herrn Xcoder. Probieren Sie es online!
Ungolfed
quelle
@
, oder?R∙♂Σ╗╜╔⌠╜c⌡M
AWK , 191 Bytes
Gibt Frequenzen als vertikale Spalte aus.
Probieren Sie es online!
Das Hinzufügen von 6 weiteren Bytes ermöglicht mehrere Sätze von Eingaben.
Probieren Sie es online!
quelle
Clojure, 86 Bytes
Ein Beispiel:
quelle
C (gcc) , 142 Bytes
Probieren Sie es online!
quelle
sizeof(int)
? "Ja wirklich?"8
würde auf jeder Architektur arbeiten, insgesamt ein bisschen, aber das ist ok.r[0]=1;for(i=1;i<=a;i++)for(j=i*~-b;
->for(i=r[0]=1;i<=a;)for(j=i++*~-b;
für -2 Bytes.Julia , 43 Bytes
Probieren Sie es online!
quelle