Talent roule dans DSA

9

Des amis et moi avons joué à du DSA (un RPG de table principalement allemand comme D&D). Je me demandais quelles sont les chances de passer des rouleaux, vous devrez donc écrire du code pour le calculer.

Votre personnage est défini par des statistiques (de 8 à 14) et des valeurs de talent (TV) (0 à 21). Pour l'instant, nous utiliserons l'escalade comme exemple.

Tests de talents

Un talent (escalade) ressemble à ceci: (Courage-Dextérité-Force) TV: 7. Pour tester un personnage sur un talent, vous lancez sur ces statistiques avec un dé à 20 faces et essayez d'obtenir en dessous ou égal à la statistique, si tu le fais bien. Sinon, vous pouvez utiliser vos points TV pour réduire le roulement avec un rapport de 1: 1.

Exemple

Un chasseur avec courage 12, dextérité 13 et force 14 essaie de grimper à un arbre, sa télé est 7.

Il obtient un 3, la valeur est inférieure à 12, il a donc réussi ce jet.

Puis il lance un 17, 17 est 4 de plus que 13, donc 4 TV s'épuisent avec 3 à gauche.

Pour le dernier lancer, vous obtenez un 14, place sur passé.

Tous les rouleaux sont passés et le chasseur a réussi à grimper à l'arbre, il reste 3 TV.

Contribution

4 valeurs dans n'importe quel format que vous choisissez, prises à partir de l'entrée standard de votre langue. Il doit cependant être dans cet ordre.

Par exemple 12 13 14 7ou 12,13,14,7ou sous forme de tableau {12,13,14,7} ou mixte[12, 14, 8], 3

Production

La chance de la fréquence à laquelle les rouleaux passent.

Par exemple (pour les valeurs ci-dessus)0.803

12,14,8,3 = 0.322

11,11,12,11 = 0.840

Pour le bonus: encore une fois le formatage n'est pas le problème ici, sortez-le comme vous le souhaitez mais dans l'ordre suivant:

failed/with 0/with 1/with 2/with 3/with 4/with 5/with 6/with 7 

et ainsi de suite jusqu'à ce qu'il ne reste plus de téléviseur.

12,13,14,7 = 0.197/0.075/0.089/0.084/0.078/0.073/0.068/0.063/0.273

12,14,8,3 = 0.678/0.056/0.051/0.047/0.168

Défi et règles et bonus

  • Vous le saurez, étant donné l'entrée, la chance de passer les rouleaux avec une précision de + - 0,5%.

  • -20% si votre programme sort également les chances de passer avec la nTV (voir sortie).

  • C'est le , donc le code le plus court en octets gagne!

Eumel
la source
1
Est-ce que «4 valeurs dans le format que vous choisissez» inclut de les prendre dans un ordre différent?
Martin Ender
1
Ou quelque chose comme ça [12, 14, 8], 3?
Martin Ender
Je pensais que j'avais la commande incluse, c'est maintenant. Les entrées mixtes sont également autorisées.
Eumel

Réponses:

2

Pyth - 21 20 19 octets

1 octets enregistrés grâce à @ThomasKwa

.Omgvzsg#0-VdQ^SyT3

Suite de tests .

Maltysen
la source
Pyth est si bon ... C'est le type de question d'APL, et je n'en ai que 27 en APL.
lirtosiast
l'ordre de l'entrée a été supposé être stat,stat,stat,TVje ne l'ai spécifié que maintenant. Cependant, si vous pouvez le modifier facilement, ce serait bien. Pourriez-vous fournir une explication?
Eumel
@Eumel bien sûr, changer la commande ne devrait pas être aussi problématique, je suis en ce moment au téléphone, je le ferai quand je rentrerai.
Maltysen
1

Dyalog APL, 28 octets

{(+/÷⍴)⍵≥∊+/¨0⌈(⊂⍺)-⍨¨⍳3⍴20}

Cette approche est la même que celle de @ Maltysen. Nous ne pouvons pas être sûrs d'une précision de 0,5% si nous tirons simplement quelques milliers de lancers de dés aléatoires, nous prenons donc la moyenne sur tous les lancers possibles. Cela prend les trois statistiques comme argument de gauche et la valeur du talent à droite.

Essayez-le ici !

lirtosiast
la source