Dans Dungeons & Dragons , presque tout est décidé en lançant un dé. En règle générale, si le résultat est supérieur ou égal à une valeur spécifiée, votre tentative de faire ce que vous vouliez faire réussit et échoue dans le cas contraire. Le plus souvent, un dé à 20 faces (alias d20) est utilisé pour lancer.
D'autres fois, le système de défi de compétence est utilisé. Il est similaire au système simple décrit ci-dessus, mais le succès est déterminé par le fait que le ou les joueurs réussissent des jets individuels un certain nombre de fois avant d'échouer un certain nombre de fois. Par exemple, le ou les joueurs peuvent essayer de choisir plusieurs serrures sur une porte avec un nombre limité de crochets. Les jets réussis individuels représentent la sélection réussie de l'un des verrous, et les jets échoués individuels représentent la rupture d'un crochet. Un succès global signifierait réussir à choisir toutes les serrures avant de casser toutes les crochets.
De plus, certains jets peuvent être des jets critiques. Sur un d20, lancer un 1 est un échec critique, entraînant l'échec immédiat de l'ensemble du défi (dans l'exemple ci-dessus, le ou les joueurs pourraient alerter accidentellement un garde). Rouler un 20 est un succès critique, résultant en la réussite immédiate de l'ensemble du défi (dans l'exemple ci-dessus, le ou les joueurs pourraient trouver un jeu de clés pour les serrures, supprimant la nécessité de les choisir). Dans le cas d'un jet critique, le défi est immédiatement terminé et le résultat est décidé, quel que soit le nombre de succès et d'échecs précédents.
Dans ce défi, vous aurez une difficulté, le nombre de succès nécessaires et le nombre d'échecs auxquels le défi a échoué. Vous devez simuler un joueur tentant le défi et produire le résultat.
Contribution
3 entiers, représentant la valeur qui doit être atteinte ou dépassée pour réussir un jet individuel, le nombre de succès nécessaires pour réussir le défi et le nombre d'échecs auxquels le défi a échoué. L'ordre et le format des entrées n'ont pas d'importance, tant que vous spécifiez l'ordre que vous utiliserez. La difficulté sera comprise entre 1 et 20 inclus et le nombre de succès et d'échecs sera compris entre 1 et 100 inclus.
Production
Les résultats de chacun des jets d20 (entiers, dans l'ordre), et le résultat global du défi (une valeur véridique / falsey). Le format n'a pas d'importance, tant que les résultats individuels sont en ordre, le résultat global vient avant ou après tous les rouleaux individuels (vous ne pouvez pas sortir le résultat global au milieu des rouleaux, par exemple), et vous spécifiez le format de sortie que vous utilisez et l'utilisez de manière cohérente.
Exemples (les valeurs entre parenthèses sont pour explication et ne doivent pas être incluses):
Contribution:
12 5 3 (difficulty successes failures)
Production:
15 (success, 1-0)
10 (failure, 1-1)
5 (failure, 1-2)
16 (success, 2-2)
12 (success, 3-2)
15 (success, 4-2)
19 (success, 5-2)
True (overall success)
Contribution:
15 2 3 (difficulty failures successes)
Production:
0 (overall failure)
15 (success, 1-0)
12 (failure, 1-1)
13 (failure, 1-2)
Contribution:
5 5 10 (successes failures difficulty)
Production:
11 (success, 1-0)
5 (failure, 1-1)
20 (critical success)
1 (overall success)
Contribution:
3 10 3 (failures difficulty successes)
Production:
12 (success, 1-0)
11 (success, 2-0)
1 (critical failure)
False (overall failure)
Règles
- C'est le code-golf , donc le code le plus court en octets gagne
- Vous devez choisir au hasard une valeur entière entre 1 et 20 (inclus) pour chaque lancer. Chaque valeur doit avoir une probabilité égale d'être choisie (ou aussi proche que possible de l'égalité).
the number of successes and failures will both be between 1 and 100, inclusive.
Donc, oui, il y a la possibilité qu'un seul échec entraîne l'échec de tout le défi.Réponses:
JavaScript,
83787675 octetsCe code décompte récursivement les succès et les échecs à mesure qu'ils se produisent. Lorsque les succès (
s
) ou les échecs (f
) ont décompté jusqu'à0
, nous terminons avec latrue
valeur!s
quands
est0
ou avec la valeur fausse def
quandf
est0
.La sortie est de la forme d'expression régulière
/^(-\d{1,2})+(0|true)$/
(ou, plus strictement,/^(-[1-9]|-1[0-9]|-20)+(0|true)$/
). C'est-à-dire que l'entrée a un trait d'union, puis des valeurs de rouleau délimitées par des tirets, et enfin le résultat final (0
outrue
), qui n'est pas délimité du rouleau final. Cependant, c'est toujours une grammaire sans ambiguïté car le résultat utilmate et le rouleau final peuvent toujours être distingués: le dernier caractère de la sortie (soit0
oue
) est toujours indicatif du résultat, et une finale0
est toujours lue séparément du nombre (s) du rôle final.Exemples de sorties pour
F(11,3,4)
:Explication:
Ce code fonctionne en roulant un d20 négatif et (ab) en utilisant les signes négatifs comme délimiteurs.
Les expressions nombre-moins-booléennes fonctionnent car
true
etfalse
sont transtypées vers1
et0
dans un contexte numérique. Dans ce cas, ced>-r
sera1
si le jet est un échec et0
si c'était un succès.la source
Python, 134 octets
Merci Pietu1998 pour les octets enregistrés
Assez simple, on peut probablement jouer un peu plus au golf, mais nous avions besoin de quelque chose pour démarrer. Essayez-le en ligne .
la source
from random import*
et supprimezrandom.
, utilisezrandint(1,20)
plutôt querandrange(20)+1
, remplacezand
par*
. Vous êtes également autorisé à mettre le résultat final au début de la sortie, en économisant de l'espace.Python 2,
123121 octets(Cette réponse mélange les espaces et les tabulations , donc le premier niveau d'indentation est un seul espace, tandis que le second est un seul onglet.)
La fonction
f
prend les arguments suivants:a
, le seuil de réussite d'un jet de dé individuel,b
, le nombre de succès nécessaires au succès global,c
, le nombre d'échecs nécessaires pour l'échec global.Sur chaque jet de dé soit
b
ouc
est décrémenté (mais pas les deux). Tant que les deux sont positifs, il boucle à nouveau, sauf en cas d'échec critique ou de succès critique.En supposant qu'aucun succès ou échec critique, lorsque la boucle se termine
b
ouc
sera nul, mais pas les deux. Dans ce cas, la fonction renvoie simplement la valeur actuelle dec
, qui est zéro (Falsey) si nous avons épuisé tous nos échecs, et positive (Truthy) si nous avons réussi.En bonus, la sortie vous indique le nombre d'échecs qu'il vous restait, ce qui est bien s'il y a (disons) plus de verrous à choisir plus tard. (À moins qu'il ne se termine par un échec ou un succès critique, auquel cas la sortie sera un booléen au lieu d'un int.)
la source
Pip , 39 octets
Quelqu'un a dit qu'il voulait voir une solution dans une langue de golf.
Je suis sûr que cela n'utilise pas de fonctionnalités de langage plus récentes que la question. Prend les entrées sous forme d'arguments de ligne de commande dans cet ordre: difficulté, succès requis, échecs requis. Sorties 0 pour l'échec global ou différent de zéro pour le succès global.Essayez-le en ligne!
L'approche est une stratégie tout en boucle assez simple, avec une ou deux astuces tirées d'autres solutions. Voici une version avec des commentaires, des espaces et des sorties supplémentaires:
la source
Ruby 2.2, 75 octets
Solution itérative de base. Exemple d'exécution:
Peut produire:
Vous pouvez le voir fonctionner sur IDEONE ici .
la source
VBA 180 octets
Exemple de sortie
Le dernier chiffre de sortie sera un
0
pourFalse
ou un1
pourTrue
. Chaque rouleau est séparé par une nouvelle ligne. Cela utilise VBA construit en RNGrnd()
qui est connu pour être pas si aléatoire , mais cela devrait répondre au mieux aux exigences.la source
SpecBAS - 165 octets
L'entrée doit être entrée dans l'ordre des difficultés, des succès et des échecs.
La nouvelle version de SpecBAS permet désormais "?" au lieu de
PRINT
et supprime le besoin deLET
devant les affectations de variables, donc c'était une bonne façon de les essayer.Comme les tableaux sont basés sur 1 par défaut, la ligne 6 renvoie 0/1 si le roulement bat en difficulté et ajoute 1 pour mettre à jour le bon index.
la source
Perl 6 ,
10199 octetsL'entrée est un tableau mutable contenant des difficultés, des succès, des échecs
La sortie est une liste à deux éléments, le premier élément est une liste des valeurs cumulées, le deuxième élément est le nombre d'échecs restants.
Usage:
la source