Eu não posso fazer isso no AnyDice, mas não é tão difícil de codificar em Python ...
Em Python
# OREishOdds.py
# ©2015 William F. Hostman. CC by attribution
# res is output results array - a place to store our output.
res = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,00,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
# num is our running total of iterations
num = 0
# work is the array we do the math work upon.
work = [0,0,0,0]
# we now tell it what the die looks like...
diedef = [1,2,3,4,5,6]
# dice: for die in [array of faces]
for a in diedef:
for b in diedef:
for c in diedef:
for d in diedef:
# work
work[0] = a
work[1] = b
work[2] = c
work[3] = d
# insert additional dice above
work.sort()
# counting
score = 0
for z in diedef:
tempscore = 0
for y in work:
if y == z:
tempscore += y
if tempscore > score:
score = tempscore
res[score] +=1
num += 1
# end of work
# output
temp = 0
for score in res:
temp += 1
print temp, score, (1000*score/num)
Estendendo isso
res
precisa ter pelo menos tantos valores 0 quanto 1+ (lado * número).
Cada dado recebe um valor separado, mas você pode fazer um atalho definindo um dado como uma variável e substituindo os arrays de dados individuais por instruções com aquele array definido.
O bloco work
precisa ser recuado. O Python depende do espaço em branco.
Para adicionar um dado: adicione outra linha for
com outra letra, adicione outro 0 ao array work
, adicione outra linha work[ ] =
com o próximo número sequencial e a nova variável do dado.
Você não pode usar atalhos e simplesmente carregar work
diretamente nas instruções for
, porque a rotina de classificação estragaria a contabilidade.
A saída está no valor do resultado, no número de ocorrências e no resultado da permilação (porcentagem * 10). Se você quiser mais lugares, aumente o multiplicador na linha print
.
Ajustando os valores dos dados
Se você quiser brincar com alguns resultados funky, por exemplo, substituindo rolls de 1 por 0 (então 1's count como nothing), basta substituir os 1's nas matrizes nas linhas for. Então os arrays seriam [0,2,3,4,5,6] .
Você muda para d8 usando [1,2,3,4,5,6,7,8] .
É um pouco mais feio codificar os resultados 2-d do ORE (largura e altura), mas já que você não estava perguntando sobre isso ... ahn, heck, eu vou discutir isso também.
E isso porque qualquer teste ORE verdadeiro tem a questão se a altura de priorização de uma pessoa (valor do número contado) ou largura (número de replicações no rolo).
Se alguém prioriza um ou outro, é fácil grampear. Caso contrário, é preciso marcar os vários locais da matriz em uma grade 2d. A soma das entradas seria, portanto, maior que a contagem de iterações.
Este não é um código particularmente rápido. (O Python não é particularmente rápido, e isso não é um código otimizado.) Mas é bom o suficiente desde que você o mantenha abaixo de 8 dados ou mais, e esses dados estão todos abaixo do d12.
Acima do código © 2015 William F. Hostman. Permissão para duplicar e usar para qualquer finalidade legal concedida, incluindo a inclusão em textos, desde que a atribuição seja dada.
Código levou 10 minutos para escrever. Demorou mais ou mais para comentar.