Contexte
J'ai une collection de "chaussettes de semaine", qui sont sept paires de chaussettes étiquetées par les jours de la semaine. Quand je lave mes chaussettes, elles finissent en tas, et je dois les disposer en paires correctes avant de les mettre dans le placard. Ma stratégie consiste à retirer une chaussette au hasard de la pile et à la mettre dans un tiroir. Chaque fois qu'il y a une paire de chaussettes assortie sur le tiroir, je les attache ensemble et les mets dans le placard. Votre tâche consiste à simuler ce processus aléatoire et à renvoyer le nombre de tirages requis pour trouver la première paire correspondante.
Contribution
Votre entrée est un entier N ≥ 1 . Il représente le "nombre de jours dans une semaine": il y a N paires de chaussettes dans la pile, et chaque paire a une étiquette distincte. Si nécessaire, vous pouvez également prendre une graine PRNG en entrée.
Production
Votre résultat est le nombre de chaussettes que je dois dessiner avant de trouver la première paire correspondante. Par exemple, si les deux premières chaussettes forment déjà une paire correspondante, la sortie est 2
.
Bien sûr, la sortie est aléatoire et dépend de l'ordre de dessin. Nous supposons que tous les ordres de dessin sont également probables , de sorte que chaque fois qu'une chaussette est tirée, le choix est uniforme et indépendant de tous les autres choix.
Exemple
Soit N = 3 , pour avoir au total 6 chaussettes, étiquetées AABBCC . Une exécution possible du «protocole de dessin de chaussettes» est la suivante:
| Pile | Drawer | Pairs
Begin | AABBCC | - | -
Draw B | AABCC | B | -
Draw C | AABC | BC | -
Draw B | AAC | C | BB
Draw A | AC | AC | BB
Draw A | C | C | AA BB
Draw C | - | - | AA BB CC
La première paire correspondante a été trouvée après avoir dessiné le deuxième B , qui était la troisième chaussette à tirer, donc la sortie correcte est 3
.
Règles et notation
Vous pouvez écrire un programme complet ou une fonction. Le nombre d'octets le plus bas l'emporte et les failles standard sont interdites. L'entrée et la sortie peuvent être dans n'importe quel format raisonnable, y compris unaire (chaîne de 1
s).
Vous pouvez supposer que le RNG intégré à votre langue est parfait. Vous n'avez pas besoin de simuler réellement le protocole de dessin de chaussettes, tant que vos sorties ont la distribution de probabilité correcte.
"Cas de test"
Voici les probabilités approximatives de toutes les sorties pour l'entrée N = 7 :
Output 2 3 4 5 6 7 8
Probability 0.077 0.154 0.210 0.224 0.186 0.112 0.037
Pour tester votre solution, vous pouvez l'exécuter, disons, 40 000 fois et voir si la distribution de sortie est raisonnablement proche de cela.
Draw all socks. End up with an odd number.