Randomizador //Repositório JavaScript

Descrição

Container capaz de retornar items randomizados, baseados em probabilidade e sequencialmente.
Criado: 2005.08.08

Código (Download)

//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com/classes/randomizer [rev. #1]

Randomizer = function(type){
    var o = this;
    (o.d = [], o.t = type || Randomizer.RANDOMIZED, o.x = -1, o.u = 0);
};
with({o: Randomizer, p: Randomizer.prototype}){
    o.SEQUENCED = (o.PROBABILITY = (o.RANDOMIZED = 0) + 1) + 1;
    p.add = function(object, probability){
        this.u += (this.d[ this.d.length ] = {o: object, p: Math.abs(probability || 1)}).p;
    };
    p.remove = function(index){
        index > -1 && index < this.d.length && (this.u -= this.d.splice(index, 1).p);
    };
    p.next = function(){
        if(!this.u)
            return null;
        var i = 0, m = 0, x = this.t == Randomizer.SEQUENCED ?
            (this.x = (this.x + 1) % this.d.length)
            : Math.round(Math.random() * (this.t == Randomizer.PROBABILITY ? this.u
            : this.d.length - 1));
        if(this.t == Randomizer.PROBABILITY)
            do m += this.d[ i++ ].p;
            while(x > m || !((x = --i) + 1));
        return this.d[ x ].o;
    };
}

Exemplo (Exemplo)

<script type="text/javascript">
//<![CDATA[

var probability = new Randomizer(Randomizer.PROBABILITY);
probability.add("A", 20);
probability.add("B", 10);
probability.add("C", 2);

document.write("<h2>Randomizer.PROBABILITY = A: 20, B: 10, C: 2</h2>");
for(var i = 20; i--; document.write(probability.next(), ", "));

var random = new Randomizer(Randomizer.RANDOMIZED);
random.add("A");
random.add("B");
random.add("C");

document.write("<h2>Randomizer.RANDOMIZED = A, B, C</h2>");
for(var i = 20; i--; document.write(random.next(), ", "));


var sequenced = new Randomizer(Randomizer.SEQUENCED);
sequenced.add("A");
sequenced.add("B");
sequenced.add("C");

document.write("<h2>Randomizer.SEQUENCED = A, B, C</h2>");
for(var i = 20; i--; document.write(sequenced.next(), ", "));

//]]>
</script>

Ajuda

Construtor

Randomizer(type: RandomizerType)
Gera uma instância de Randomizer.
type
ajusta o comportamento do container, os possíveis valores são: Randomizer.SEQUENCED (retorna os items na mesma ordem em que foram inseridos), Randomizer.PROBABILITY (retorna items randomicamente, mas levando em consideração a probabilidade definida para cada um deles) e Randomizer.RANDOMIZED (retorna items randomicamente)

Métodos

Randomizer.add(object: Object, probability: Integer): void
Adiciona um item ao container.
object
objeto a ser adicionado
probability
útil apenas quando o tipo do container é "Randomizer.PROBABILITY", onde probability deve ser é um número inteiro positivo e maior que 1
Randomizer.remove(index: Integer): void
Remove um elemento do container.
index
índice do elemento a ser removido
Randomizer.next(void): Object
Retorna um item de acordo com o tipo do container.

Ranque (Votos: 11)

3.73