Bem, vamos escrever sua função para você :
function: compare highest N:n of ROLL:s and SEQ:s {
loop I over {1..N} {
if I@ROLL != I@SEQ { result: 0 }
}
result: 1
}
Esta função apenas compara os primeiros N
elementos das seqüências ROLL
e SEQ
um por um. (Se as sequências forem classificadas em ordem numérica decrescente, como AnyDice classifica os rolos de dados por padrão, esses serão os elementos N
highest.) Se algum deles for diferente, ele para e retorna 0; se todos corresponderem, ele retorna 1.
Quando um pool de dados é passado como um (ou até mesmo ambos) dos parâmetros para essa função, AnyDice chama automaticamente a função para cada uma das possíveis seqüências de dados produzidos pelo roll (s) e coleta os resultados em uma polarização dado representando a probabilidade da função retornar cada um dos seus possíveis valores de resultado.
O ponto chave para perceber aqui é que, ao passar um conjunto de dados para uma função esperando uma sequência como essa, o AnyDice não fornece nenhuma maneira prática de obter as seqüências individuais de dados rolados para fora. > da função. Tudo o que podemos conseguir é um único dado inclinado. Isso significa que, qualquer que seja a manipulação que queremos fazer com as sequências, teremos que fazer dentro da função. Como alternativa, eu poderia ter usado a função highest NUMBER of sequence SEQUENCE
de
function: compare highest N:n of ROLL:s and SEQ:s {
result: [highest N of sequence ROLL] = [highest N of sequence SEQ]
}
Mas, além de requerer outra função customizada como um auxiliar, esta versão também é provavelmente um pouco menos eficiente, já que ela precisa fazer um loop em ambas as seqüências de entrada para fazer cópias parciais delas. A primeira versão acima faz a mesma coisa com apenas um único loop e nenhuma cópia de sequência.