Berechnen Sie bei einem Deck, das aus N Kopien von Karten mit ganzzahligen Werten [ 1 , M ] für insgesamt N * M Karten besteht, die Wahrscheinlichkeit, dass eine Karte mit dem Wert 1 neben einer Karte mit dem Wert 2 liegt .
Ihre Lösung kann genau oder angenähert sein und muss nicht bei jedem Lauf mit denselben Eingaben gleich sein. Die gegebene Antwort sollte innerhalb von +/- 5% der tatsächlichen Lösung liegen (abgesehen von wirklich seltenen Chancen, dass das RNG nicht zu Ihren Gunsten ist). Ihr Programm sollte die Antwort in angemessener Zeit geben (z. B. weniger als 10 Minuten auf Ihrer Hardware). Sie können davon ausgehen, dass M und N angemessen klein sind und keine Fehlerprüfung erforderlich ist.
Das Deck ist nicht zyklisch. Wenn also die erste Karte eine 1 und die letzte eine 2 ist , entspricht dies nicht den Adjazenzanforderungen.
Als Testfall beträgt die erwartete Lösung für N = 4 und M = 13 (ein Standard-Kartenspiel mit 52 Karten) ~ 48,6%.
Hier ist ein Beispiel für eine Implementierung ohne Golf in Python + NumPy, bei der zufällige Mischvorgänge verwendet werden:
from __future__ import division
from numpy import *
def adjacent(N, M):
deck = array([i for i in range(1, M+1)]*N)
trials = 100000
count = 0
for i in range(trials):
random.shuffle(deck)
ores = (deck == 1)
tres = (deck == 2)
if(any(logical_and(ores[1:], tres[:-1])) or
any(logical_and(ores[:-1], tres[1:]))):
count += 1
return count/trials
Die Ausgabe kann in jeder Form erfolgen, die Sie für zweckmäßig halten (Funktionsrückgabewert, Terminalausgabe, Datei usw.), und die Eingabe kann in jeder Form erfolgen, die Sie für zweckmäßig halten (Funktionsparameter, Terminaleingabe, Befehlszeilenargument usw.).
Es gelten Standardschlupflöcher.
Dies ist Code Golf, der kürzeste Code (in Bytes) gewinnt.
Bestenliste
quelle
Antworten:
Pyth,
2322 BytesFührt 10000 Iterationen aus. Die Nummer kann ohne Bytekosten geändert werden. Die Eingabe ist durch Zeilenumbrüche getrennt. Dauert auf meinem Computer ungefähr 9 Sekunden.
Demonstration
quelle
MATL , 44
46BytesHierbei wird Version 3.1.0 der Sprache verwendet, die vor dieser Herausforderung liegt.
Die Berechnung erfolgt mit einer Schleife, die 1000 zufällige Realisierungen zeichnet. Der Lauf dauert einige Sekunden. Es könnte auf vektorisierte Weise schneller gemacht werden. Die Eingabe erfolgt in der Form
[N M]
.Alte Version : Erzeugt ein zufälliges Kartenspiel und überprüft es zweimal: zuerst vorwärts und dann rückwärts.
Neue Version : Erzeugt ein zufälliges Kartenspiel und fügt dann eine gespiegelte Version mit einem
0
dazwischen liegenden hinzu. Auf diese Weise kann die Überprüfung nur einmal in Vorwärtsrichtung durchgeführt werden. Dies spart zwei Bytes.Beispiel
Erläuterung
quelle
LabVIEW, 58 LabVIEW-Grundelemente
erstellt Kartenarrays und mischt sie dann. Suchen Sie nach 1s und überprüfen Sie benachbarte Karten auf 2s.
quelle
Pyth, 16 Bytes
Demonstration.
Dies folgt dem
Strategie der Programmierung. Die gewinnende Vermutung in diesem Fall ist
was ungefähr besagt, dass es
N
Chancen gibt, in Eimer zu fallen, und ein Bruchteil der gültigen Eimer ist2 / M
. Die Eimer sind Slots neben0
s und die Chancen sind1
s.Der Fehler scheint nie (überraschenderweise) über 3% zu steigen und konvergiert gegen 0%, wenn die Parameter größer werden (wie ich es erwarten würde).
Die Eingabe ist durch Zeilenumbrüche getrennt.
Sie können einen Charakter speichern, wenn Sie die offensichtliche Tatsache akzeptieren
False == 0
, und diesJE&>J1-1^-1c2JQ
stattdessen tun .quelle
MATL ,
4438 BytesDies verwendet auch MATL Version 3.1.0 , die früher als diese Herausforderung ist.
Neue Version, danke an Luis Mendo für das Speichern von 4 Bytes!
Alte Version (44 Bytes):
Erläuterung
Beispielsweise,
Hinweis (21.5.16): Ab MATL Release 18.0.0
X+
wurde entfernt,Y+
kann aber an seiner Stelle verwendet werden. Die Änderungen von MATL Version 3.1.0 zu 18.0.0 bedeuten, dass diese Antwort jetzt in nur 31 Bytes geschrieben werden kann*xO1e4:"2:Gtb*Z@w\TT2&Y+1=ah]Ym
.quelle
[1 1]
in sparenTTo
. Außerdem brauchen Sie kein KommaMathematica,
939291 BytesImmer noch auf der Suche nach einer geschlossenen Form ...
quelle