Alguns amigos e eu já jogamos DSA (um RPG de mesa principalmente alemão, como D&D). Eu queria saber qual é a chance de passar nos rolos, então você terá que escrever algum código para calculá-lo.
Seu personagem é definido por estatísticas (de 8 a 14) e valores de talento (TV) (0 a 21). Por enquanto, usaremos a escalada como exemplo.
Testes de talentos
Um talento (escalada) é assim: (Força da destreza da coragem) TV: 7. Para testar um personagem em um talento, você rola nessas estatísticas com dados de 20 lados e tenta ficar abaixo ou igual ao status, se você faz isso bem. Caso contrário, você pode usar seus pontos de TV para reduzir o rolo na proporção de 1: 1.
Exemplo
Um caçador com coragem 12, destreza 13 e força 14 está tentando subir em uma árvore, sua TV é 7.
Ele rola um 3, o valor está abaixo de 12, então ele passou nesse teste.
Então ele tira 17, 17 é 4 a mais que 13, então 4 TVs se acostumam com 3 restantes.
Para o último lançamento, você recebe 14 pontos no passe.
Todos os rolos são passados e o caçador conseguiu subir na árvore, restam 3 TVs.
Entrada
4 valores em qualquer formato que você escolher, extraído da entrada padrão do seu idioma. Mas tem que estar nessa ordem.
Por exemplo, 12 13 14 7
ou 12,13,14,7
ou como uma matriz {12,13,14,7} ou mista[12, 14, 8], 3
Resultado
A chance de quantas vezes os rolos passam.
Por exemplo (para valores acima)0.803
12,14,8,3 = 0.322
11,11,12,11 = 0.840
Para o bônus: Novamente, a formatação não é o problema aqui, produza como quiser, mas na seguinte ordem:
failed/with 0/with 1/with 2/with 3/with 4/with 5/with 6/with 7
e assim sucessivamente até que nenhuma TV seja deixada.
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
Desafio, regras e bônus
Você deve descobrir, dada a entrada, a chance de passar os rolos com uma precisão de + - 0,5%.
-20% se o seu programa também gerar chances de passar com a
n
TV (consulte a saída).Isso é código-golfe , então o código mais curto em bytes vence!
[12, 14, 8], 3
?