Ein Kartenspiel ist das kartesische Produkt von S
Farben und R
Rängen. Viele, wenn auch nicht alle, Kartenspiele verwenden S=4
und R∊{6,8,13}
. Eine Hand von H
Karten wird vom Deck ausgeteilt. Die Verteilung , auch als "Handmuster" bezeichnet, ist ein Array, das beschreibt, wie viele Karten Sie von jeder Farbe erhalten haben. Bei einer Verteilung D
erfüllen len(D)=S
, 1≤sum(D)=H≤S×R
, 0≤D[i]≤R
, D[i]≥D[i+1]
, findet die Wahrscheinlichkeit davon auftritt.
Eingabe: eine Ganzzahl R
und ein Array D
.
Ausgabe: die Wahrscheinlichkeit mit mindestens 5 Nachkommastellen; nachfolgende Nullen können übersprungen werden; wissenschaftliche notation ist ok
Lücken verboten. Kürzeste Siege.
Tests:
R D probability
13 4 4 3 2 -> 0.2155117564516334148528314355068773
13 5 3 3 2 -> 0.1551684646451760586940386335649517
13 9 3 1 0 -> 0.0001004716813294328274372174524508
13 13 0 0 0 -> 0.0000000000062990780897964308603403
8 3 2 2 1 -> 0.4007096203759162602321667950144035
8 4 2 1 1 -> 0.1431105787056843786543452839337155
8 2 2 1 0 -> 0.3737486095661846496106785317018910
8 3 1 1 0 -> 0.2135706340378197997775305895439377
15 4 4 3 2 1 -> 0.1428926269185580521441708109954798
10 3 0 0 -> 0.0886699507389162561576354679802956
10 2 1 0 -> 0.6650246305418719211822660098522167
10 1 1 1 -> 0.2463054187192118226600985221674877
Siehe auch Bridge-Handmuster in Wikipedia .
BEARBEITEN: unnötige Einschränkung fallen gelassen H≤R
EDIT: Einschränkung hinzugefügt H≥1
Antworten:
APL (Dyalog Unicode) , 30 Zeichen
Probieren Sie es online!
Verwenden Sie die Formel von @ orlp .
quelle
Python 3, 134 Bytes
Formel ist das Produkt
binom(R, d)
für jedes Elementd
inD
Zeitenfactorial(len(D))
, geteilt durch das Produkt desfactorial(len(S))
für jedeS
in den Gruppierungen vonD
(zB[4, 4, 3, 2]
hat Gruppierungen[[4, 4], [3], [2]]
) schließlich dividiert durchbinom(len(D) * R, sum(D))
.Oder in mathematischer Notation, wenn m die Multiplizitäten der n eindeutigen Elemente in D enthält :
quelle
i=0
zu bedeutenb()
und verwendetR,D
fürn,k
).R ,
908583 BytesProbieren Sie es online!
Ich habe das Gleiche wie orlp beobachtet , aber ich habe eine nette Sprache ausgewählt, die kombinatorisch aufgebaut ist.
Erläuterung:
quelle
"<"=choose
(außerhalb der Funktion) und möglicherweise " seq" verwenden, abhängig von der Antwort von ngn auf den Kommentar, den ich heute Morgen gepostet habe.Jelly ,
22 bis20 Bytes-2 Bytes unter Verwendung eines neuen schnellen
ʋ
und eines neuen monadischen AtomsẈ
Ein dyadischer Link, der die ausgeteilt Verteilung D links und die Anzahl der Ränge R rechts annimmt und die Wahrscheinlichkeit des Auftretens zurückgibt.
Probieren Sie es online!oder sehen Sie die Testsuite an
Wie?
quelle
05AB1E , 21 Bytes
Probieren Sie es online!
Erläuterung
quelle
Pyth , 32 Bytes
Probieren Sie es hier aus! oder Überprüfen Sie alle Testfälle!
Wie funktioniert das
quelle
APL (Dyalog) , 42 Bytes
Probieren Sie es online!
Immer noch Golf spielen.
quelle
Clojure, 153 Bytes
Nur eine Brute-Force-Simulation, um mehr Präzision zu erzielen, erhöhen Sie die Iterationszahl und den "1 / N" -Wert am Ende entsprechend. Das erste Argument ist die Anzahl und das zweite Argument ist die Anzahl der Karten im Stapel pro Suite.
quelle
J, 57 Bytes
Probieren Sie es online!
Dies läuft in O (Golf) und wird an vielen Testfällen ersticken (obwohl theoretisch funktioniert), was in Ordnung wäre, wenn es golfer wäre. Aber ich bin fest entschlossen, es zu reduzieren, vor allem, wenn ich solche Wiederholungen vermeide
"1
. Wenn jemand helfen möchte, ist hier die analysierte Version ...Die rechte Seite der Hauptgabel zeigt alle möglichen Deals des Decks , und die linke Seite der Hauptgabel zeigt nur das ursprüngliche rechte Argument, dh die Anzugmaske, mit der wir übereinstimmen.
Innerhalb jedes "gemischten" Decks nehmen wir die Elemente aus erster Hand , gruppieren sie dann mit der Taste
/.
und sortieren das Ergebnis und prüfen, ob dies mit der fraglichen Anzugmaske übereinstimmt. Wir addieren die Gesamtzahl der Übereinstimmungen und dividieren sie in die Länge aller möglichen Decks.quelle
f=:(([:!#)%[:*/[:!#/.~)@]**/@(]![)%+/@]![*#@]
TIO