Étant donné un jeu composé de N copies de cartes avec des valeurs entières [ 1 , M ] pour un total de N * M cartes, calculez la probabilité qu'une carte avec la valeur de 1 soit adjacente à une carte avec la valeur de 2 .
Votre solution peut être exacte ou approximative, et il n'est pas nécessaire qu'elle soit la même pour chaque exécution avec les mêmes entrées. La réponse donnée doit se situer à +/- 5% de la vraie solution (à moins de très rares chances que le RNG ne soit pas en votre faveur). Votre programme devrait donner la réponse dans un délai raisonnable (disons, moins de 10 minutes sur le matériel que vous possédez). Vous pouvez supposer que M et N sont raisonnablement petits et qu'une vérification des erreurs n'est pas requise.
Le jeu n'est pas cyclique, donc si la première carte est un 1 et la dernière carte est un 2 , cela ne répond pas aux exigences d'adjacence.
À titre de test, pour N = 4 et M = 13 (un jeu standard de 52 cartes), la solution attendue est de ~ 48,6%.
Voici un exemple d'implémentation sans golf en Python + NumPy utilisant des shuffles aléatoires:
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
La sortie peut être sous n'importe quelle forme que vous trouvez commode (valeur de retour de fonction, sortie de terminal, fichier, etc.), et l'entrée peut être sous n'importe quelle forme que vous trouvez commode (paramètre de fonction, entrée de terminal, arg de ligne de commande, etc.)
Des trous de boucle standard s'appliquent.
C'est le code golf, le code le plus court (en octets) l'emporte.