2 votes

Comment compter le plus grand nombre de résultats correspondants ?

Pour un jeu de dés Xd6, je veux connaître les probabilités d'obtenir un nombre spécifique de résultats identiques, pour tous les nombres de 2 à X.

Par exemple, je lance 5d6 et j'obtiens 2, 3, 2, 2, 4 - le résultat est "3" car il y a trois 2. Mais quelle était la chance d'obtenir "3" pour la réserve de 5d6 ?

Pour 1, 6, 1, 6, 1 - deux 6, trois 1 - le résultat devrait être "3", car 3 est le plus élevé.

Pour 2, 2, 3, 3, 6, le résultat devrait être "2", et ainsi de suite.

Le résultat de la correspondance en lui-même n'est pas pertinent, tout ce que je veux savoir c'est le nombre de doublons le plus élevé. J'ai trouvé cette question - Comment compter le nombre de doublons dans anydice ? - mais il compte tous les doublons, et non le plus grand nombre d'entre eux.

2voto

trjh Points 11

J'ai l'étrange impression que cette question a déjà été posée, mais je n'ai pas trouvé de doublon, voici donc une réponse :

function: highest number of matches in ROLL:s {
  MAX: 0
  loop I over ROLL {
    COUNT: ROLL = I
    if MAX < COUNT { MAX: COUNT }
  }
  result: MAX
}

output [highest number of matches in 5d6]

2 votes

Et j'étais en train de rédiger ma réponse, en me disant "Je suis arrivé avant Ilmari..."

0 votes

BTW, je pense que cette est la question (presque) dupliquée à laquelle je pensais, mais ce n'est pas vraiment la même question ; il s'agit d'obtenir le plus grand nombre de somme de résultats concordants dans un jet, et non le résultat le plus élevé nombre de résultats correspondants. La solution est cependant presque la même.

2voto

Carcer Points 60981

Voici une fonction pour compter les doublons dans un rouleau :

function: count highest dupes in DICE:s {
  MAX: 0
  loop X over {1..1@DICE} {
    COUNT: X = DICE
    if COUNT > 1 & COUNT > MAX { MAX: COUNT }
  }
  result: MAX
}

Passons à la fonction.

function: count highest dupes in DICE:s {

La déclaration de fonction prend un paramètre, le nombre de dés lancés, et le transmet à une séquence fixe pour inspection.

  MAX: 0

Initialise une variable de compteur, MAX pour se rappeler quel est le nombre maximum de doublons.

  loop X over {1..1@DICE} {

Boucle une variable X sur la séquence de valeurs allant de 1 au résultat le plus élevé du dé individuel dans le pool. Grâce au tri automatique des dés lancés selon une séquence, nous savons que le premier chiffre de la séquence ( 1@DICE ) sera le dé le plus élevé, et nous n'avons pas besoin de vérifier les nombres plus élevés que cela.

    COUNT: X = DICE
    if COUNT > 1 & COUNT > MAX { MAX: COUNT }

Pour chaque valeur de X, comptez le nombre de correspondances dans la réserve. S'il y a plus d'une correspondance et que le nombre de correspondances est supérieur au maximum actuellement connu, définissez-le comme le nouveau maximum.

  }
  result: MAX
}

Lorsque la boucle se termine, le résultat est le nombre maximum de doublons.

Votre cas spécifique de lancer 5d6 serait invoqué par :

output [count highest dupes in 5d6]

0 votes

Vous pourriez optimiser légèrement votre code en commençant la plage à (#DICE)@DICE et l'abandon de la redondance COUNT > 1 (qui sera toujours vraie si COUNT > MAX Quoi qu'il en soit). Avec ces optimisations, la principale différence entre nos réponses est que je boucle sur tous les nombres réellement obtenus (même si certains sont des doublons) alors que vous bouclez sur tous les nombres, du plus petit (ou 1, dans votre code actuel) au plus grand, même si certains n'apparaissent sur aucun dé.

0 votes

Lequel est le plus rapide dépend du nombre de dés lancés et de leur nombre de faces ; le mien sera en général plus rapide pour les petits nombres de dés avec beaucoup de faces, tandis que le vôtre sera plus rapide pour les grands nombres de dés avec peu de faces. Pour quelque chose comme 5d6, ils devraient être assez proches.

0 votes

(Hum, attendez, laissez-moi modifier mon commentaire ci-dessus : COUNT > 1 n'est pas strictement redondant dans votre code, puisque vous commencez par MAX Cependant, le seul effet de l'inclure est que le résultat pour les pools de dés non vides avec tous les jets distincts sera 0 au lieu de 1. Bien qu'il y ait en fait un argument pour dire que de tels jets n'ont pas de "résultats correspondants", je considérerais toujours que 1 est un résultat plus logique que 0 dans ce cas. Quoi qu'il en soit, les graphiques produits par votre code et le mien se ressemblent : la seule différence réside dans le fait que la barre la plus basse est étiquetée 0 ou 1).

AlleGamers.com

AlleGamers est une communauté de gamers qui cherche à élargir la connaissance des jeux vidéo.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X