Como posso calcular a diferença entre dois rolos no AnyDice?

5

Como faço para calcular o seguinte em AnyDice?

2d6, subtract lowest result from highest.

por Roelosaurus 15.07.2019 / 13:32

3 respostas

Sugiro subtrair sem levar em conta quais morrem mais alto, e então pegar o valor absoluto:

saída [d6 absoluto - d6]
15.07.2019 / 13:38

Você pode usar o seguindo o código anydice para fazer isso:

função: X: n odiff Y: n {se X> Y {resultado: XY} else {resultado: YX}} saída [d6 odiff d6] chamada "diferença entre 2d6"

Isso verifica qual dado é mais alto e subtrai de acordo, fornecendo os seguintes resultados:

gráfico de resultado

Observe que, depois de fazer isso e compará-lo com Resposta de Blckknght os resultados são os mesmos, mas a outra resposta tem um código mais simples, então deixarei isso aqui como um exercício de aprendizado.

15.07.2019 / 13:43

O geral A maneira de fazer isso no AnyDice é escrever uma função que usa uma sequência como parâmetro e passar o rolo de dados para a função, por exemplo como isso:

function: highest minus lowest of ROLL:s {
  result: [email protected] - #[email protected]
}

output [highest minus lowest of 2d6]
output [highest minus lowest of 3d6]

O elemento chave aqui é o :s após o nome do parâmetro. Isso é o que diz ao AnyDice que o ROLO O parâmetro deve ser uma sequência de números, em vez de um único número ou um (conjunto de) di (c) e.

O que o AnyDice realmente faz, quando você passa um pool de dados para uma função que espera uma sequência como essa, é que executa a função para cada possível lançamento dos dados, atribuindo os números rolados à sequência (classificados do maior para o menor por padrão). Em seguida, ele coleta os resultados retornados pela função em um único dado tendencioso, cujos resultados possíveis são ponderados de acordo com a probabilidade de obter cada um desses resultados do lançamento de dados.

Assim, dentro da função, os dados são efetivamente "congelados" em uma sequência de números fixos, e você pode fazer qualquer matemática ou outra manipulação nesses números que desejar.


Este é realmente um truque geral para fazer cálculos arbitrários nos resultados de uma rolagem de dados no AnyDice. Embora muito útil, possui duas desvantagens notáveis:

  1. Pode ser lento para um grande número de dados (e / ou um grande número de lados por dado), porque chama a função para cada resultado possível do lançamento. Em particular, se você tentar calcular algo como [maior menos menor de 100d6], certamente chegará ao tempo limite, porque o AnyDice não é inteligente o suficiente para perceber que apenas o número mais alto e o mais baixo importam e, em vez disso, tentará iterar por força bruta em todas as sequências possíveis de números que se poderia rolar com o 100d6 (de quais existem um pouco mais de 79 milhões).

  2. Como o AnyDice coleta os resultados da função em um dado tendencioso e, como não suporta dados com valor de sequência, você não pode retornar utilmente uma sequência de uma função chamada assim. Se você tentar, ele será resumido em um único número. (Você pode, no entanto, retorne um dado de tal função e ele se comportará exatamente como você esperaria.)

15.07.2019 / 23:14