Voici une fonction qui met en œuvre cette mécanique :
function: edgesnag EDGE:s SNAG:s {
loop X over {1..#EDGE} {
if X@EDGE > X@SNAG { result: X@EDGE }
if X@EDGE < X@SNAG { result: #SNAG@SNAG }
}
result: [lowest of #EDGE@EDGE and #SNAG@SNAG]
}
Comme dans votre question précédente, nous avons défini une fonction edgesnag
qui s'attend à recevoir deux pools de dés pour les dés d'arête et les dés d'accrochage et qui les transformera en séquences (avec :s
) pour les fixer en vue d'une inspection à l'intérieur de la fonction. Par défaut, Anydice trie les pools de roulements dans l'ordre décroissant.
Nous bouclons ensuite sur les pools pour inspecter les dés, en commençant par le premier et donc le plus haut dé de chaque séquence. Si le dé d'arête est supérieur au dé d'accrochage, c'est notre résultat ; nous retournons la valeur de ce dé d'arête. Si le dé de l'arête est inférieur au dé de l'accroche, nous avons été "accrochés" (faute d'un meilleur terme) et notre résultat est le dé de l'accroche le plus bas. Si aucune de ces conditions n'est vraie, les dés doivent être à égalité et nous passons donc à la paire suivante.
Notez que si nous avions plus de dés d'arête que de dés d'accroche, nous pourrions finir par comparer un dé d'arête à un dé d'accroche qui n'existe pas. Dans anydice, si vous essayez d'accéder à une valeur inexistante dans une séquence - par exemple, 4@{3,2,1}
- la valeur est 0. Puisque la valeur du dé inexistant de l'accrochage serait 0, le dé de l'arête gagnera cette comparaison et ce sera notre valeur.
La boucle se termine lorsque nous avons comparé le dernier dé de bord - en supposant que nous n'ayons pas trouvé une paire où le dé de bord a gagné et que nous n'ayons pas été accrochés non plus. Dans ce cas, tous les dés d'avantage ont été annulés et nous prenons le plus petit jet disponible - trouvé dans ce cas en comparant le dernier dé de chaque séquence en utilisant la fonction [lowest of X and Y]
fonction intégrée.
Voici un programme Anydice qui utilise cette fonction et quelques exemples de sortie (y compris l'utilisation de vos exemples donnés pour démontrer qu'elle donne le bon résultat). Il se trouve qu'il est plus efficace de calculer cette version de votre mécanique que la précédente, ce qui nous permet de l'essayer avec des pools de dés légèrement plus importants que la dernière fois !
Cette version de votre mécanisme ne semble pas avoir de points contre-intuitifs où obtenir plus de dés d'accrochage est meilleur ou obtenir plus de dés d'arête est pire - à moins qu'il soit possible d'avoir zéro dés d'accrochage, auquel cas ajouter un seul dé d'accrochage augmente le résultat attendu (puisque c'est le seul dé d'accrochage, s'il est plus élevé que n'importe quel dé d'arête, il est choisi comme résultat, ce qui est mieux que les dés d'arête lancés !) Cependant, si vous supposez qu'il y a au moins un dé d'erreur sur tous les jets, ce n'est pas un problème, car ajouter des dés d'erreur rend toujours le résultat attendu plus mauvais.