É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.
Classement
la source
Réponses:
Pyth,
2322 octetsExécute 10000 itérations. Le nombre peut être modifié sans frais d'octet. L'entrée est séparée de la nouvelle ligne. Prend environ 9 secondes sur mon ordinateur.
Manifestation
la source
MATL , 44
46octetsCela utilise la version 3.1.0 du langage, qui est antérieure à ce défi.
Le calcul se fait avec une boucle qui dessine 1000 réalisations aléatoires. Cela prend quelques secondes pour fonctionner. Cela pourrait être fait plus rapidement de manière vectorisée. L'entrée est de la forme
[N M]
.Ancienne version : génère un jeu de cartes aléatoire et le vérifie deux fois: d'abord vers l'avant puis vers l'arrière.
Nouvelle version : génère un jeu de cartes aléatoire, puis en ajoute une version inversée avec un
0
entre les deux. De cette façon, la vérification peut être effectuée une seule fois, dans le sens direct. Cela économise deux octets.Exemple
Explication
la source
LabVIEW, 58 primitives LabVIEW
crée des tableaux de cartes puis les mélange. Recherchez 1s puis vérifiez les cartes adjacentes pour 2s.
la source
Pyth, 16 octets
Manifestation.
Cela suit la
stratégie de programmation. La supposition éclairée gagnante dans ce cas est
ce qui indique à peu près qu'il y a des
N
chances de tomber dans des seaux, et une fraction de seaux valides l'est2 / M
. Les seaux étant des emplacements situés à côté de0
s, et les chances sont1
s.L'erreur ne semble jamais dépasser 3% (de manière surprenante) et semble converger vers 0% à mesure que les paramètres augmentent (comme je m'y attendais).
L'entrée est séparée de la nouvelle ligne.
Vous pouvez enregistrer un personnage si vous acceptez le fait clairement évident
False == 0
et faites-le à laJE&>J1-1^-1c2JQ
place.la source
MATL ,
4438 octetsCela utilise également MATL version 3.1.0 , qui est antérieure à ce défi.
Nouvelle version, merci à Luis Mendo pour avoir économisé 4 octets!
Ancienne version (44 octets):
Explication
Par exemple,
Remarque (21/5/16): à partir de la version 18.0.0 de MATL,
X+
a été supprimée, maisY+
peut être utilisée à sa place. Les modifications de la version 3.1.0 à MATL 18.0.0 signifient que cette réponse peut maintenant être écrite en seulement 31 octets,*xO1e4:"2:Gtb*Z@w\TT2&Y+1=ah]Ym
.la source
[1 1]
enTTo
. De plus, vous n'avez pas besoin de la virguleMathematica,
939291 octetsToujours à la recherche d'un formulaire fermé ...
la source