Método geral para gerar d {d1, d2, d3… dn} no AnyDice

7

Estou tentando encontrar um método mais geral para criar determinadas distribuições unilaterais usando anydice.com, de modo que os valores menores ou iguais a 0 sejam exibidos como 0 e o restante seja normalmente de um rolo de dados 2dy-8.

Como exemplo, para um 2d6-8, inserirei o seguinte:

output (2d6-8>0)*d{d1,d2,d3,d4},

enquanto que para o 2d7-8, inserirei o seguinte:

output (2d7-8>0)*d{d1,d2,d3,d4,d5,d6}.

Isso me dá exatamente o que eu quero, mas, para valores mais altos de y (2d12, por exemplo), isso se torna cada vez mais complicado, então estou me perguntando se existe uma maneira mais geral (compacta) de escrever isso. Além disso, não quero ter que criar uma função personalizada, mas usar apenas o idioma geral "saída xxx" de linha única que qualquer dado empregar.

Qualquer ajuda ou sugestão é muito apreciada.

por Russ 26.09.2019 / 01:37

2 respostas

Você quer usar o mais alto de NUMBER e NUMBER em AnyDice, para que você não precise especificar manualmente o resultado com base no seu conhecimento prévio de como esse rolo deve se comportar.

saída [mais alta de 2d6-8 e 0] saída [mais alta de 2d7-8 e 0] saída [mais alta de 2d12-8 e 0]

Cada um deles tratará todos os resultados negativos do 2dX-Y role como sendo igual a 0.

26.09.2019 / 05:01

Em geral, se o AnyDice não tiver uma função adequada incorporada (como observado em Resposta de Xirema), a resposta seria seja para criar uma função personalizada. Assim, por exemplo:

função: ROLL: n mas não menor que zero {se ROLL <0 {resultado: 0} else {resultado: ROLL}} saída [2d12 - 8, mas não menor que zero]

A razão pela qual você precisa de uma função (personalizada ou embutida) é que se você tentar usar um rolo de morrer em um if afirmação lado de fora de uma função, o AnyDice se recusará a executar o código e imprimirá uma mensagem de erro:

calculation error

Boolean values can only be numbers, but you provided "d{?}".
Depending on what you want, you might need to create a function.

No entanto, se você passar o mesmo dado para uma função que espera um número (ou seja, tem :n após o nome do parâmetro), o AnyDice chamará automaticamente a função para todo valor possível do rolo e colete os resultados novamente em um dado personalizado. Dentro da função, o parâmetro (por exemplo, ROLO acima) será um número fixo e, portanto, as expressões que o envolvem (como ROLO <0) terá um valor fixo definido que pode ser usado com segurança em um if declaração.

(Se você quiser olhar para os dados individuais em um conjunto rolado de dois ou mais, também poderá fazer com que a função espere uma sequência, substituindo o :n com :s. Nesse caso em particular, no entanto, não faria diferença, já que a aplicação de operações matemáticas como - 8 para um pool de dados no AnyDice adicionará automaticamente todos os dados antes de fazer as contas. Portanto, não há como obter o indivíduo d12está de volta 2d12 - 8.)

26.09.2019 / 14:30

Tags