Como Halfling Luck (relançando meus Nat 1) afeta meus resultados de dados?

29

A característica racial de Halfling Luck permite rolar novamente os 1 naturais em testes de testes, salvamentos e ataques, mas você deve manter o segundo resultado. Com Advantage ou Disvantage, ele permite que você jogue novamente apenas um dos dados, se ambos forem do 1.

Como isso afeta o resultado estatístico esperado do rolo? Observe também considerar Vantagem e Desvantagem, pois a característica afeta esse rolamento também.

por doppelgreener 18.05.2017 / 16:59

5 respostas

Adiciona um + 0.5 a todos os rolos

O rolamento médio de um dado é 10.5, que é apenas o valor médio dos números 1-20.

Re-rolamos qualquer dado que aparece como 1 e, como mantemos o resultado, podemos substituir o 1 da lista pelo rolo médio novamente e recalcular a média, dando-nos um rolo médio de 10.975.

Portanto, a característica de sorte halfling é aproximadamente um + 0.5 em todos os testes do d20.

Essa é a distribuição, gerada a partir de um script matlab rápido e sujo que escrevi. Como você pode esperar, é bastante uniforme para todos os valores que não são 1 (observe que ainda há alguma variação, porque provém de números aleatórios reais e não de um cálculo analítico):

insira a descrição da imagem aqui

Vantagem e desvantagem

Modifiquei meu script para ver como isso afetaria as vantagens e as desvantagens.

Para desvantagem:

  • Média normal: 7.17
  • Com sorte de Halfling: 7.80

insira a descrição da imagem aqui

Para vantagem:

  • Média normal: 13.82
  • Com sorte de Halfling: 14.13

insira a descrição da imagem aqui

Podemos ver que há um bônus + 0.6 por desvantagem, enquanto que há apenas um bônus + 0.3 por vantagem. Obviamente, isso faz sentido, porque rolar um 1 é mais impactante por desvantagem do que por vantagem, como as plotagens deixam claro.

Também digno de nota é que o fato de você apenas rolar novamente um dado não parece realmente mudar o valor médio. Novamente, isso faz sentido, porque você só tem uma chance do 1 / 400 de rolar duas.

18.05.2017 / 17:36

Responda

Probabilidades para exato rolos

Os valores abaixo mostram as chances de cada rolagem ocorrer exatamente. Também adicionei cálculos de rolo direto para fornecer uma comparação e codifiquei por cores as colunas correspondentes.

A coluna que mostra as probabilidades simplesmente mostra uma razão de duas probabilidades. Nesse caso, a probabilidade de não-halfling dividida pela probabilidade de halfling mostra quanto mais provavelmente você rolar exatamente \ $ x \ $ quando não for um halfling.

Em geral, é mais provável que você role os valores mais baixos quando não é um halfling, mas não muito. As exceções são para rolar 1s (você é realmente provavelmente não os rolará) e rolando o 2 pelo 5, se houver vantagem. Mas, caso contrário, as probabilidades geralmente estão entre 0.9 e 1.1, portanto, não há um efeito muito grande.

PDF

Probabilidades para acumulativo rolos

Os valores abaixo mostram as chances de cada rolagem ocorrer cumulativamente - ou seja, a linha para Roll = 4 mostra as chances de obter pelo menos um 4 nos diferentes cenários. Também adicionei cálculos diretos para fornecer uma comparação e uma coluna sobre probabilidades.

CDF


Solução

Vamos calcular \ $ Pr (X = x) \ $ com uma rolagem direta, com vantagem e desvantagem.

Rolo reto

Se você rolar um \ $ 2 \ $ a \ $ 20 \ $, deverá mantê-lo. Mas se você rolar um \ $ 1 \ $, você o rotulará novamente e manterá o segundo resultado. O segundo rolo tem uma chance \ $ frac {1} {20} \ $ de acontecer, mas se ramifica para outras possibilidades igualmente prováveis ​​\ $ 20 \ $. Isso significa que, se queremos obter um rolo específico de \ $ x \ $, as chances são de:

\ begin {align *} Pr (X = x) = \ frac {1} {20} + (\ frac {1} {20} \ times \ frac {1} {20}) = \ frac {21} {400 } = 5.25 \% \ \ end {align *}

Mas, para rolar um \ $ 1 \ $, você deve rolar \ $ 1 \ $ nas duas vezes:

\ begin {align *} Pr (X = x) = \ frac {1} {20} \ times \ frac {1} {20} = \ frac {1} {400} = 0.25 \% \ \ end {align * }

Com vantagem

Existem muitos sub-casos aqui que precisamos revisar. Digamos que queríamos lançar um \ $ 10 \ $ exatamente:

  • Se você rolar um \ $ 10 \ $ no primeiro dado e não a \ $ 1 \ $ ou a \ $ 10 \ $ ou superior no segundo (e conte isso duas vezes, por simetria);

  • Se você rolar um \ $ 10 \ $ nos dois dados;

  • Se você rolar um \ $ 1 \ $ no primeiro dado e não a \ $ 1 \ $ ou a \ $ 10 \ $ ou superior no segundo, e você lança um \ $ 10 \ $ no relançamento (e conta isso duas vezes, por simetria);

  • Se você rolar um \ $ 1 \ $ nos dois dados e rolar um \ $ 10 \ $ no relançamento;

  • Se você rolar um \ $ 10 \ $ no primeiro dado, um \ $ 1 \ $ no segundo, e você rola um \ $ 10 \ $ ou menos no relançamento (e conta isso duas vezes, por simetria).

As probabilidades são (com os termos na ordem acima):

\ begin {align *} Pr (X = 10) = (2 \ times \ frac {1} {20} \ times \ frac {8} {20}) + (\ frac {1} {20} \ times \ frac {1} {20}) + (2 \ times \ frac {1} {20} \ times \ frac {8} {20} \ times \ frac {1} {20}) + (\ frac {1} {20 } \ times \ frac {1} {20} \ times \ frac {1} {20}) + (2 \ times \ frac {1} {20} \ times \ frac {1} {20} \ times \ frac { 10} {20}) \ end {align *} \ begin {align *} Pr (X = 10) = \ frac {377} {8000} = 4.7125 \% \ end {align *}

Se você pode identificar o padrão acima, podemos generalizá-lo como:

\ begin {align *} Pr (X = x) = (2 \ times \ frac {1} {20} \ times \ frac {x-2} {20}) + (\ frac {1} {20} \ times \ frac {1} {20}) + (2 \ times \ frac {1} {20} \ times \ frac {x-2} {20} \ times \ frac {1} {20}) + (\ frac { 1} {20} \ times \ frac {1} {20} \ times \ frac {1} {20}) + (2 \ times \ frac {1} {20} \ times \ frac {1} {20} \ times \ frac {x} {20}) \ end {align *} \ begin {align *} Pr (X = x) = \ frac {21 \ vezes (x-2)} {4000} + \ frac {x} {4000} + \ frac {21} {8000} \ end {align *}

Onde \ $ x \ $ é o número que queremos rolar exatamente.

Observe que a probabilidade de \ $ Pr (X = 1) \ $ é derivada aqui de maneira diferente. Você deve rolar um \ $ 1 \ $ nos três rolos para que isso ocorra ou:

\ begin {align *} Pr (X = 1) = \ frac {1} {20} \ times \ frac {1} {20} \ times \ frac {1} {20} = \ frac {1} {8000} = 0.0125 \% \ end {align *}

Com Desvantagem

Mais uma vez, temos alguns sub-casos ao rodar com o Disvantage. Novamente, vamos rolar um \ $ 10 \ $ exatamente:

  • Se você rolar um \ $ 10 \ $ no primeiro dado e não a \ $ 10 \ $ ou menos no segundo (e conte isso duas vezes, por simetria);

  • Se você rolar um \ $ 10 \ $ nos dois dados;

  • Se você rolar um \ $ 1 \ $ no primeiro dado e não a \ $ 10 \ $ ou menos no segundo, e a \ $ 10 \ $ no relançamento (e conte isso duas vezes, por simetria);

  • Se você rolar um \ $ 1 \ $ no primeiro dado, um \ $ 10 \ $ no segundo e um \ $ 10 \ $ ou superior no relançamento (e conte isso duas vezes, por simetria);

As probabilidades são (com os termos na ordem acima):

\ begin {align *} Pr (X = 10) = (2 \ times \ frac {1} {20} \ times \ frac {10} {20}) + (\ frac {1} {20} \ times \ frac {1} {20}) + (2 \ times \ frac {1} {20} \ times \ frac {10} {20} \ times \ frac {1} {20}) + (2 \ times \ frac {1 } {20} \ times \ frac {1} {20} \ times \ frac {11} {20}) \ end {align *}

E mais uma vez, identificando o padrão, temos:

\ begin {align *} Pr (X = x) = (2 \ times \ frac {1} {20} \ times \ frac {20-x} {20}) + (\ frac {1} {20} \ times \ frac {1} {20}) + (2 \ times \ frac {1} {20} \ times \ frac {20-x} {20} \ times \ frac {1} {20}) + (2 \ vezes \ frac {1} {20} \ times \ frac {1} {20} \ times \ frac {21-x} {20}) \ end {align *

E simplificado:

\ begin {align *} Pr (X = x) = \ frac {21 \ times (20-x)} {4000} + \ frac {21-x} {4000} + \ frac {1} {400} \ end {alinhar*}

Onde \ $ x \ $ é o número que queremos rolar exatamente.

Mais uma vez, a probabilidade de rolar um \ $ 1 \ $ é diferente. Você recebe um \ $ 1 \ $:

  • Se o primeiro e o segundo dados aparecerem como \ $ 1 \ $;

  • Se o primeiro dado aparecer como \ $ 1 \ $, e não o segundo dado e o relançamento aparece como \ $ 1 \ $ (e conte isso duas vezes, por simetria).

Isso funciona para ser:

\ begin {align *} Pr (X = 1) = (\ frac {1} {20} \ times \ frac {1} {20}) + (2 \ times \ frac {1} {20} \ times \ frac {19} {20} \ times \ frac {1} {20}) = \ frac {29} {4000} = 0.725 \% \ end {align *


Agora que temos todas as fórmulas de \ $ x \ $ para qualquer valor do d20, podemos tabulá-las. Todos os valores abaixo são valores exatos.

\ begin {array} {| c | c |} \ hline \ text {Roll} e \ text {Advantage} & \ text {Straight Roll} & \ text {Disvantage} \\ \ hline 1 & 0.0125 \% & 0.25 \ % & 0.725 \% \\ \ hline 2 & 0.3125 \% & 5.25 \% & 10.175 \% \\ \ hline 3 e 0.8625 \% & 5.25 \% & 9.625 \% \\ \ hline 4 e 1.4125 \% & 5.25 \% & 9.075 \% \\ \ hline 5 & 1.9625 \% & 5.25 \% & 8.525 \% \\ \ hline 6 & 2.5125 \% & 5.25 \% & 7.975 \% \\ \ hline 7 & 3.0625 \% & 5.25 \% & 7.425 \% \\ \ hline 8 & 3.6125 \% & 5.25 \% & 6.875 \% \\ \ hline 9 & 4.1625 \% & 5.25 \% & 6.325 \% \\ \ hline 10 & 4.7125 \% & 5.25 \% & 5.775 \% \\ \ hline 11 & 5.2625 \% & 5.25 \% & 5.225 \% \\ \ hline 12 & 5.8125 \% & 5.25 \% & 4.675 \% \\ \ hline 13 & 6.3625 \ % & 5.25 \% & 4.125 \% \\ \ hline 14 & 6.9125 \% & 5.25 \% & 3.575 \% \\ \ hline 15 & 7.4625 \% & 5.25 \% & 3.025 \% \\ \ hline 16 & 8.0125 \% & 5.25 \% & 2.475 \% \\ \ hline 17 & 8.5625 \% & 5.25 \% & 1.925 \% \\ \ hline 18 & 9.1125 \% & 5.25 \% & 1.375 \% \\ \ hline 19 & 9.6625 \% & 5.25 \% & 0.825 \% \\ \ hline 20 & XNUM X \% & 10.2125 \% & 5.25 \% \\ \ hline \ end {array}

E a distribuição cumulativa para rolar pelo menos \ $ x \ $. Todos os valores abaixo são valores exatos.

\ begin {array} {| c | c |} \ hline & \ text {Advantage} & \ text {Straight Roll} & \ text {Desvantagem} \\ \ hline 1 & 1 & 1 & 1 \\ \ hline 2 & 0.999875 & 0.9975 & 0.99275 \\ \ hline 3 & 0.99675 & 0.945 & 0.891 \\ \ hline 4 & 0.988125 & 0.8925 & 0.79475 \\ \ hline 5 & 0.974 & 0.84 & 0.704 \\ \ hine 6 & 0.954375 & 0.7875 & 0.61875 \ \ \ hline 7 e 0.92925 e 0.735 e 0.539 \\ \ hline 8 e 0.898625 e 0.6825 e 0.46475 \\ \ hline 9 e 0.8625 e 0.63 e 0.396 \\ \ hline 10 e 0.820875 e 0.5775 e 0.33275 \\ \ hline 11 e 0.77375 \\ & 0.525 & 0.275 \\ \ hline 12 & 0.721125 & 0.4725 \\ \ hline 0.22275 & 13 & 0.663 & 0.42 \\ \ hline 0.176 & 14 & 0.599375 & 0.3675 \\ \ hline 0.13475 & 15 & 0.53025 & 0.315 \\ \ hline 0.099 e 16 e 0.455625 e 0.2625 \\ \ hline 0.06875 e 17 e 0.3755 e 0.21 \\ \ hline 0.044 e 18 e 0.289875 e 0.1575 \\ \ hline 0.02475 e 19 e 0.19875 e 0.105 \\ \ hline 0.011 e 20 e 0.102125 e 0.0525 \\ \ hline \ end {array}

18.05.2017 / 19:43

utilização este programa Anydice, os cálculos estatísticos de anydice mostram que sua chance de rolar um 1 em um d20 (já que você pode rolar novamente um 1 em a maioria cheques) é reduzido para 0.25% e sua chance de rolar qualquer outro número nesse rolo aumenta em 0.25%, passando de 5% para 5.25% (a chance de 5% de rolar um 1 é distribuída igualmente por todos os números 20 na nova rolagem).

Com vantagem, você quase não tem chance de rolar o 1 como seu número mais alto e, com desvantagem, sua chance de rolar o 1 como seu número mais baixo é bastante reduzido. A vantagem é alterada de 0.25% para chance de 0.0125% de um resultado de 1 e a chance de desvantagem de um 1 é reduzida de 9.75% para 0.725%.

Obter outros resultados com vantagens e desvantagens também muda. De Painel de exportação da leitura Normal do programa Anydice, essas são as chances de obter cada resultado possível:

Vantagem

\ begin {array} {| c | c |} \ hline \ & \ text {Normal} & \ text {Lucky} & \\ \ \ text {Result} & \ text {% Chance} & \ text {% Chance} & \ text {Difference} \\ \ hline 1 & 0.25 & 0.0125 & -0.2375 \\ \ hline 2 & 0.75 & 0.3125 & -0.4375 \\ \ hline 3 & 1.25 & 0.8625 & -0.3875 \\ \ hline 4 & 1.75 & 1.4125 e -0.3375 \\ \ hline 5 e 2.25 e XNX e -1.9625 \\ \ hline 0.2875 e 6 e 2.75 e -2.5125 \\ \ hline 0.2375 e 7 e 3.25 e -3.0625 \\ \ hine 0.1875 e 8 e 3.75 e -3.6125 \\ \ hline 0.1375 & 9 & 4.25 & -4.1625 \\ \ hline 0.0875 & 10 & 4.75 & -4.7125 \\ \ hline 0.0375 & 11 & 5.25 & 5.2625 \\ \ hline 0.0125 & 12 & 5.75 & 5.8125 \\ \ hline 0.0625 e 13 e 6.25 e 6.3625 \\ \ hline 0.1125 e 14 e 6.75 e 6.9125 \\ \ hline 0.1625 e 15 e 7.25 e 7.4625 \\ \ hline 0.2125 e 16 e 7.75 e 8.0125 \\ \ hline 0.2625 e 17 e 8.25 e 8.5625 \\ \ hline 0.3125 e 18 e 8.75 e 9.1125 \\ \ hline 0.3625 e 19 e 9.25 e 9.6625 \\ \ hline 0.4125 e 20 e 9.75 e 10.2125 \\ \ hline \ end {array}

Desvantagem

\ begin {array} {| c | c |} \ hline \ & \ text {Normal} & \ text {Lucky} & \\ \ \ text {Result} & \ text {% Chance} & \ text {% Chance} & \ text {Difference} \\ \ hline 1 & 9.75 & 0.725 & -9.025 \\ \ hline 2 & 9.25 & 10.175 & 0.925 \\ \ hline 3 & 8.75 & 9.625 & 0.875 \\ \ hline 4 & 8.25 & 9.075 & 0.825 \\ \ hline 5 & 7.75 & 8.525 & 0.775 \\ \ hline 6 & 7.25 & 7.975 & 0.725 \\ \ hline 7 & 6.75 & 7.425 & 0.675 \\ \ hline 8 & 6.25 & 6.875 & 0.625 \\ \ hline 9 & 5.75 & 6.325 & 0.575 \\ \ hline 10 & 5.25 & 5.775 & 0.525 \\ \ hline 11 & 4.75 & 5.225 & 0.475 \\ \ hline 12 & 4.25 & 4.675 & 0.425 \\ \ hine 13 & 3.75 & 4.125 & 0.375 \\ \ hline 14 & 3.25 & 3.575 & 0.325 \\ \ hline 15 & 2.75 & 3.025 & 0.275 \\ \ hline 16 & 2.25 & 2.475 & 0.225 \\ \ hline 17 & 1.75 & 1.925 & 0.175 \\ \ hline 18 & 1.25 e 1.375 e 0.125 \\ \ hline 19 e 0.75 e 0.825 e 0.075 \\ \ hline 20 e 0.25 e 0.275 e 0.025 \\ \ hline \ end {array}

Como você pode ver, as chances de ficar abaixo do 11 diminuem um pouco com o Lucky Advantage, e enquanto os baixos resultados individuais aumentam com a desvantagem, até a chance de um 20 é marginalmente aumentada pelo Lucky Disvantage.


Programa utilizado:

função: reroll R: n sob N: n {se R <N {resultado: 1d20} else {resultado: R}} função: rerolladv ONE: ne DUAS: n sob N: n {se ONE <N {resultado: [ maior de 1d20 e DOIS]} else se DOIS <N {resultado: [maior de UM e 1d20]} else {resultado: [maior de UM e DOIS]}} função: rerolldis ONE: ne TWO: n sob N: n {if ONE <N {result: [menor de 1d20 e DOIS]} else if DOIS <N {result: [menor de ONE e 1d20]} else {result: [menor de ONE e DOIS]}} SORTE: [rolar novamente 1d20 em 2] LUCKY_ADV: [rerolladv 1d20 e 1d20 em 2] LUCKY_DIS: [rerolldis 1d20 e 1d20 na saída de 2] saída 1dUMNUMX "" "" Normal " LUCKY_ADV chamado saída "Lucky Advantage" [menor 20 de 1d20] chamado saída "Normal Desvantage" LUCKY_DIS chamado "Lucky Disvantage"
18.05.2017 / 17:41

Boas respostas: pergunta errada

Muitas respostas boas aqui, mas elas perdem o objetivo de Halfling Luck. A verdadeira questão não é como isso afeta a distribuição do dado, mas com que frequência ele transforma um fracasso em sucesso. Realmente não importa se a sorte de Halfling transformar seu 1 em um 7 se um 7 ainda falhar.

Metodologia

O que é crítico é o número de destino - o número real que você precisa rolar igual ou acima no dado ter sucesso. Isso pode ser calculado a partir de CA ou CC, subtraindo seu bônus desse número porque + 7 para acessar o AC 17 é o mesmo que + 0 para acessar o AC 10.

utilização esta técnica muito elegante de Ilmari Karonen podemos construir um dado de sucesso em qualquer dado para cada número de destino, do 1 ao 20, tanto para verificações de salvar / habilidade quanto para ataques (já que os ataques têm autofail e sucesso crítico, eles devem ser tratados de maneira diferente).

Verificações de economia e capacidade

loop TARGET sobre {1..20} {FAIL: [mais baixo de 20 e [mais alto de 0 e TARGET-1]] SUCESSO: [mais baixo de 20 e [mais alto de 0 e 21-TARGET]] SALVAR: {0: FAIL , 1: SUCCESS} HALFLINGSAVE: {SAVE, 0: 20 * (FAIL-1), saída 1: 20 * SUCCESS} dSAVE chamada "Normal: [TARGET]" output dHALFLINGSAVE chamado "Halfling: [TARGET]"}

Implementado aqui.

O que isso faz é criar para o normal salvar um dado do lado do 20 que não tenha os números 1 e 20, mas que possui vários números do 0 e 1 (falhas e sucessos) em relação a cada número de destino. O salvamento halfling usa esse dado para criar um dado com o lado 400 (\ $ 20 \ times20 \ $) para representar a nova rolagem.

Existe uma relação linear muito simples em absoluto termos entre a chance aumentada A sorte de Halfling dá a você o intervalo 2-20 (no 1, não faz diferença, pois você sempre passa):

$$ \ text {Aumento} = 0.0525-0.0025 \ times \ text {Target} $$

Ou seja, quanto mais difícil a tarefa, menos benefícios ela oferece. Este é o aumento direto na sua chance de ter sucesso.

No entanto, em relativo termos que um Halfling tem 1.05 vezes a chance de qualquer outra pessoa.

Ataques

loop TARGET sobre {1..20} {FAIL: [mais baixo de 19 e [mais alto de 0 e TARGET-1]] SUCESSO: [mais baixo de 19 e [mais alto de 0 e 21-TARGET]] ATAQUE: {0, 0 : [mais alto de 0 e FAIL-1], 1: [mais alto de 0 e SUCESSO-1], 2} HALFLINGATTACK: {ATAQUE, 0: 20 * [o mais alto de 0 e FAIL-1], 1: 20 * [o mais alto de 0 e SUCCESS-1], 2: 20} produzem dATTACK chamado "Normal: [TARGET]" produzem dHALFLINGATTACK chamado "Halfling: [TARGET]"}

Implementado aqui.

Semelhante ao acima, exceto que garantimos que sempre haja uma falha (representando um 1) e introduzimos um 2 para representar um acerto crítico.

Sem surpresa, os resultados são muito semelhantes. Há um aumento direto de \ $ 0.0025 \ $ na chance de acerto crítico (de 0.05 para 0.0525) e a fórmula do intervalo 2-20 para acertos regulares é:

$$ \ text {Aumento} = 0.05-0.0025 \ times \ text {Target} $$

Se você adicionar novamente os acertos críticos, a fórmula será exatamente a mesma das verificações de salvamento / habilidade.

A melhoria relativa ainda é 1.05 (para ocorrências normais e críticas).

26.05.2017 / 07:05

Halfling Luck, em média, aumenta seu rolo d20 em 0.47 em rolos normais, 0.620 em rolos de desvantagem e 0.308 em rolos de vantagem.

Isenção de responsabilidade: Embora nunca tenha jogado D&D, espreito muito no rpg.se porque o jogo em si me interessa, embora nunca tenha tido a chance de jogá-lo ainda ... Obrigado markovchain por me ajudar a entender melhor as regras básicas .

Usando um script Python rápido e sujo que eu criei, aqui estão meus resultados:

~~~~~ Rolagens normais ~~~~~ Número total de rolagens: 1000000 Número total de rerolls: 50201 Porcentagem de rerolls em comparação com o número total de rolagens: 0.050201 Valor médio de um dado em todos os testes sem Halfling Luck: 10.505604 Valor médio de um dado em todos os rolos com Halfling Luck: 10.983658 Diferença de valores: 0.478054 ~~~~~ Rolos de vantagem / desvantagem ~~~~~ Número total de pares rolados: 1000000 Número total de rerolls: 97346 Número total de rolos (pares) mais rerolls): 1097346 Percentual de rerolls comparado ao número total de pares rolados: 0.097346 O valor médio de uma desvantagem morre em todos os pares rolados sem Halfling Luck: 7.181028 O valor médio de uma desvantagem morre em todos os pares rolados com Halfling Luck: 7.801206 Valor médio de um dado de vantagem em todos os pares rolados sem Halfling Luck: 13.831522 Valor médio de um dado de vantagem em todos os pares rolados com Halfling Luck: 14.139669 Diferença de valores entre os dados de desvantagem com Halfling Luck devido a [1] [1] vs sem Halfling Sorte: 0.620178 Diferença de valores entre os dados dos dados de vantagem com Halfling Luck devido a [1] [1] vs sem Halfling Luck: 0.308147

Aqui está o meu roteiro. Peço desculpas pelos meus nomes de variáveis:

from random import randint
import numpy as np

end = 1000000

# Normal rolls

a = np.zeros(20)
areroll = np.zeros(20)
average = 0
averagereroll = 0
numberofrerolls = 0

for i in range(0, end):
    x = randint(1, 20)
    a[x - 1] = a[x - 1] + 1
    if x is 1:
        x = randint(1, 20)
        numberofrerolls = numberofrerolls + 1
    areroll[x - 1] = areroll[x - 1] + 1

for q in range(1, 21):
    average = average + (q * a[q - 1])

for q in range(1, 21):
    averagereroll = averagereroll + (q * areroll[q - 1])

print("~~~~~Normal Rolls~~~~~")
print()
print("Total number of rolls: %d" % end)
print("Total number of rerolls: %d" % numberofrerolls)
print("Percentage of rerolls compared to total number of rolls:")
print(numberofrerolls / end)
print("Average value of a die across all rolls without Halfling Luck:")
print(average / end)
print("Average value of a die across all rolls with Halfling Luck:")
print(averagereroll / end)
print("Difference of values: ")
print((averagereroll / end) - (average / end))

# Advantage/Disadvantage rolls

disadvantage = np.zeros(20)
advantage = np.zeros(20)
disadvantagewithrerolls = np.zeros(20)
advantagewithrerolls = np.zeros(20)
numberofrerolls = 0
averagea = 0
averaged = 0
averagear = 0
averagedr = 0

for i in range(0, end):
    x = randint(1, 20)
    y = randint(1, 20)
    if x is 1 and y is 1:
        z = randint(1, 20)
        numberofrerolls = numberofrerolls + 1
        disadvantagewithrerolls[x - 1] = disadvantagewithrerolls[x - 1] + 1
        advantagewithrerolls[z - 1] = advantagewithrerolls[z - 1] + 1
        disadvantage[x - 1] = disadvantage[x - 1] + 1
        advantage[x - 1] = advantage[x - 1] + 1
    else:
        if x is y:
            disadvantage[x - 1] = disadvantage[x - 1] + 1
            advantage[x - 1] = advantage[x - 1] + 1
            disadvantagewithrerolls[x - 1] = disadvantagewithrerolls[x - 1] + 1
            advantagewithrerolls[x - 1] = advantagewithrerolls[x - 1] + 1
        elif x is 1:
            z = randint(1, 20)
            numberofrerolls = numberofrerolls + 1
            if z > y:
                advantagewithrerolls[z - 1] = advantagewithrerolls[z - 1] + 1
                disadvantagewithrerolls[y - 1] = disadvantagewithrerolls[y - 1] + 1
            else:
                advantagewithrerolls[y - 1] = advantagewithrerolls[y - 1] + 1
                disadvantagewithrerolls[z - 1] = disadvantagewithrerolls[z - 1] + 1
            disadvantage[x - 1] = disadvantage[x - 1] + 1
            advantage[y - 1] = advantage[y - 1] + 1
        elif y is 1:
            z = randint(1, 20)
            numberofrerolls = numberofrerolls + 1
            if z > x:
                advantagewithrerolls[z - 1] = advantagewithrerolls[z - 1] + 1
                disadvantagewithrerolls[x - 1] = disadvantagewithrerolls[x - 1] + 1
            else:
                advantagewithrerolls[x - 1] = advantagewithrerolls[x - 1] + 1
                disadvantagewithrerolls[z - 1] = disadvantagewithrerolls[z - 1] + 1
            disadvantage[y - 1] = disadvantage[y - 1] + 1
            advantage[x - 1] = advantage[x - 1] + 1
        elif x < y:
            disadvantage[x - 1] = disadvantage[x - 1] + 1
            advantage[y - 1] = advantage[y - 1] + 1
            disadvantagewithrerolls[x - 1] = disadvantagewithrerolls[x - 1] + 1
            advantagewithrerolls[y - 1] = advantagewithrerolls[y - 1] + 1
        else:
            disadvantage[y - 1] = disadvantage[y - 1] + 1
            advantage[x - 1] = advantage[x - 1] + 1
            disadvantagewithrerolls[y - 1] = disadvantagewithrerolls[y - 1] + 1
            advantagewithrerolls[x - 1] = advantagewithrerolls[x - 1] + 1

for q in range(1, 21):
    averaged = averaged + (q * disadvantage[q - 1])
    averagea = averagea + (q * advantage[q - 1])
    averagedr = averagedr + (q * disadvantagewithrerolls[q - 1])
    averagear = averagear + (q * advantagewithrerolls[q - 1])

d = averaged / end
dr = averagedr / end
a = averagea / end
ar = averagear / end

print()
print("~~~~~Advantage/Disadvantage Rolls~~~~~")
print()
print("Total number of pairs rolled: %d" % end)
print("Total number of rerolls: %d" % numberofrerolls)
print("Total number of die rolls (pairs plus rerolls): %d" % (numberofrerolls + end))
print("Percentage of rerolls compared to total number of pairs rolled:")
print(numberofrerolls / end)
print("Average value of a disadvantage die across all pairs rolled without Halfling Luck:")
print(d)
print("Average value of a disadvantage die across all pairs rolled with Halfling Luck:")
print(dr)
print("Average value of an advantage die across all pairs rolled without Halfling Luck:")
print(a)
print("Average value of an advantage die across all pairs rolled with Halfling Luck:")
print(ar)
print("Difference of values between disadvantage dice values with Halfling Luck vs without Halfling Luck: ")
print(dr - d)
print("Difference of values between advantage dice values with Halfling Luck vs without Halfling Luck: ")
print(ar - a)

Uma característica que permite que você rolar novamente um dado, pelo menos uma parte do tempo, é, na minha opinião, sempre uma coisa boa de se ter, embora, em média, os resultados não sejam drásticos. No entanto, reler uma falha garantida e obter um resultado bem-sucedido resultam em ótimas interpretações.

26.05.2017 / 19:19