Como posso modelar as probabilidades para esse mecânico envolvendo o cancelamento de conjuntos de dados no AnyDice?

4

Então, eu estou lutando com as probabilidades de um mecânico de dados.

Você cria um pool d6 de dados Edge e Snag e rola todos eles.

Cada Snag morre cancela um dado de borda com um valor mais baixo.

Após o cancelamento, você escolhe o single mais Edge morre à esquerda.

Se nenhum dado do Edge for deixado, você escolhe o único menor Snag morre.

Se não houver mais dados, considere o resultado um 1.

Example 01: I roll 3 Edge dice {3, 5, 5} and 2 Snag dice {5, 6}. Result: 5


Example 02: I roll 2 Edge dice {3,4} and 4 Snag dice {2, 3, 5, 5}. Result: 2


Example 03: I roll 1 Edge die {3} and 1 Snag die {5}. Result: 1


Vocês poderiam me ajudar a modelá-lo no AnyDice?

por Cezar Capacle 08.07.2019 / 17:26

1 resposta

Anydice program

Escrevi a seguinte função anydice que, na minha opinião, implementa o mecanismo desejado, conforme descrito. Eu assumi que, ao cancelar, o dado mais alto cancela o dado mais alto que pode e, em seguida, desce daí.

function: edgesnag EDGE:s SNAG:s {
  loop X over {1..#EDGE} {
    if [email protected] >= [email protected] { result: [email protected] }
  }
  if #EDGE < #SNAG { result: #[email protected] }
  result: 1
}

Esta função espera ser invocada com dois conjuntos de dados, por exemplo [edgenag 2d6 3d6].

Portanto, a maneira como isso funciona é que lançamos os conjuntos de moldes em seqüências, para corrigi-los para inspeção, e então percorreremos essas seqüências para comparar os dados. Lembre-se de que, por padrão, portanto, anydice classifica o pool em ordem decrescente (um rolo como 3, 5, 3 se torna 5,3,3 {}) Assim, consideramos os dados nas duas sequências em pares.

Se o primeiro dado no BORDA sequência é maior ou igual ao primeiro dado no EMPECILHO, OBSTÁCULO, INCONVENIENTE Na sequência, já temos certeza de que esse dado de borda não será cancelado por nenhum dado, portanto ele permanecerá no final e, portanto, é o resultado. Caso contrário, o dado do obstáculo cancela o dado da aresta e passamos para o próximo par, comparando-os da mesma maneira.

Se ficarmos sem dados de snag para cancelar dados de aresta sem encontrar um goleiro, tomaremos o dado de aresta que estamos considerando atualmente como o resultado restante mais alto (o valor de um elemento inexistente em uma sequência é 0, portanto, a verificação será favorecer a matriz de borda). Caso contrário, o loop continuará até ficarmos sem dados de borda.

Se ficarmos sem dados de ponta, e houver mais dados de senão de dados de ponta, eles devem permanecer e, portanto, o resultado será o menor dado de senão. Caso contrário, deve haver o caso de nenhum dado permanecer e o resultado é 1.

É necessário otimizar a implementação algorítmica de seu mecânico dessa maneira, pois, caso contrário, qualquer dado engasgará rapidamente em conjuntos de dados relativamente pequenos. Mesmo assim, ele pode lidar com [edgenag 5d6 5d6]; além disso, as possíveis permutações de sequência são muito grandes e engasgam. (Algum especialista em anydice pode ser capaz de otimizá-lo além dessa limitação, mas isso é o que eu vejo.)

Observações

Algumas observações sobre o seu mecânico.

Em primeiro lugar, porque senão morrer apenas cancelar diminuir matriz de borda, uma matriz de borda do 6 nunca será cancelada, isso inclina seus resultados muito para seis - não importa o tamanho do conjunto de dados, ele não altera as chances de obter um resultado do 6, apenas altera o resto da distribuição.

Você também obtém alguns pontos de cruzamento descolados onde seu resultado médio melhora quando você tem mais dado de senão, porque você só pode acabar tendo o dado de senão mais baixo quando os dados de senão superam os dados de borda, e o dado de senão mais baixo pode ser maior que o 1. Por exemplo, se seu pool de borda for 1d6 e seu snag pool for 1d6, seu resultado médio será 2.94; mas se o seu conjunto de senhas for 2d6, você mede a média 3.66 ou 3.17 para 3d6. (link anydice)

09.07.2019 / 01:22