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.