Aller au contenu

tilttek/dice-probability

✅ publié

Les probabilités exactes d'une expression de dés : chaque total sous forme de fraction, et la chance d'un double.

tilttek/dice-probability calcule ce qu'une expression de tilttek/dice peut donner et la probabilité de chaque valeur : 4d6kh3, 2d20kh1, 6d10>=7f1, (1d4)d6, 1d6!. Chaque probabilité est une fraction exacte sur le nombre de façons de lancer les dés (6/36 pour un 7 sur 2d6). Elle est accompagnée de la probabilité d'obtenir au moins et au plus chaque valeur, de la moyenne et de l'écart type. La bibliothèque donne aussi la probabilité d'événements sur les faces d'un ensemble de dés : au moins un 1, exactement deux six, un double, une suite, toutes les faces différentes, et leurs combinaisons. Elle compare aussi deux expressions, comme une attaque contre une défense. Les explosions sont suivies jusqu'à une profondeur, et la probabilité d'aller plus loin est indiquée. Au-delà d'une taille, ou pour les quelques constructions qu'elle ne suit pas, une estimation avec germe prend le relais. Elle est marquée comme estimée et donne sa marge.

Elle s'adresse à tout code PHP qui explique les dés à des personnes : une page de probabilités, un concepteur de jeux qui compare deux mécaniques, une fiche de personnage qui montre les chances d'un jet. tilttek/dice-probability-bundle l'intègre à Symfony, avec un tableau, un graphique et un Live Component.

C'est une bibliothèque PHP simple qui dépend seulement de tilttek/dice. Elle gère elle-même ses grands nombres, sans bcmath ni gmp. Les sommes de dés sont des convolutions : un dé simple est additionné par une fenêtre glissante. Les sélections (garder et retirer des dés) parcourent les multiensembles triés des dés, jamais chaque jet.

État

PartieÉtat
Distributions exactes : arithmétique, fonctions, dés, relances, explosions, planchers, transformations, filtres, garder et retirer, succès et échecs, jugements de l'ensemble, nombres de dés et de faces lancés d'abordImplémenté et testé
Au moins, au plus, moyenne, variance, écart type, probabilité d'un validateurImplémenté et testé
Événements : nombre d'une face ou d'un validateur, dés identiques, suites, toutes égales, toutes différentes, toutes conformes, composésImplémenté et testé
Comparaison de deux expressionsImplémenté et testé
Explosions jusqu'à une profondeur avec ce qui reste ; estimations avec germe et leur margeImplémenté et testé
Nombres exacts de toute tailleImplémenté et testé

Documentation

DocumentContenu
InstallationPrérequis, installation et une première distribution.
DistributionsProbabilities::distribution(), Distribution et ce qui est calculé exactement.
Événementschance(), les événements, l'exemple de référence et Faces.
Comparer deux expressionscompare() et Versus.
Explosions et estimationsSettings, la profondeur des explosions, les estimations et leur marge.
Nombres exactsNatural et Fraction.
ExceptionsProbabilityException, CannotCompute et les arguments invalides.
Points d'extensionLes événements et les dés de l'application.
TestsLes tests de la bibliothèque, et comment tester le code qui l'utilise.
RéférenceChaque type de la bibliothèque, avec son rôle.

Démarrage rapide

composer require tilttek/dice-probability
use Tilttek\Dice\DiceRoller;
use Tilttek\DiceProbability\Event\AnyOf;
use Tilttek\DiceProbability\Event\Count;
use Tilttek\DiceProbability\Event\OfAKind;
use Tilttek\DiceProbability\Probabilities;

$dice = new DiceRoller();
$probabilities = new Probabilities();

$distribution = $probabilities->distribution($dice->parse('2d6'));
(string) $distribution->probability(7);                // "6/36"
(string) $distribution->atLeast(10)->reduced();         // "1/6"

$oneOrDouble = new AnyOf(Count::atLeastOne(1), OfAKind::double());
(string) $probabilities->chance($oneOrDouble, $dice->parse('3d6'))->probability;   // "156/216"

(string) $probabilities->compare($dice->parse('1d20+5'), $dice->parse('2d10+4'))->first->reduced(); // "1/2"

Prérequis

PHP 8.5 ou plus récent, et tilttek/dice.

Contribuer

Les contributions sont les bienvenues sur le monodépôt de PHIL : lisez le guide de contribution et le code de conduite. Signalez une vulnérabilité en privé, comme l'explique la politique de sécurité, jamais dans un ticket public.

Licence

MIT, © Philippe Gamache, doing business as Le Gnome Archiviste; a Tilttek project. Voir LICENSE.