Элегантный способ смещения случайного логического значения

Я хотел бы создать случайное логическое значение в JavaScript, но я хочу принять во внимание предыдущее значение. Если предыдущее значение было истинным, я хочу, чтобы следующее значение было более вероятным. На данный момент у меня есть это (это в контексте замыкания - goUp и lastGoUp являются локальными для вмещающей области):

function setGoUp() {
    goUp = getRandomBoolean();

    if(lastGoUp) {
        goUp = getRandomBoolean() || goUp;
    }
    else {
        goUp = getRandomBoolean() && goUp;
    }
    lastGoUp = goUp;
}

Итак, алгоритм идет:

  1. Получить случайное логическое значение
  2. Если случайное логическое значение из предыдущего вызова было True:

    a) получить другое случайное логическое значение, и или эти два вместе

    b) еще получают другое случайное логическое значение и и это вместе.

Я уверен, что этот алгоритм можно упростить. Я задавался вопросом:

if(lastGoUp && goUp) {
    goUp = goUp * (getRandomBoolean() || goUp);
}

, но это кажется очень грязным.

Есть также проблема с этим алгоритмом, который означает, что я могу только удвоить шанс получить тот же логический код снова - я не могу легко его настроить. Есть идеи?

5
задан alain.janinm 30 April 2012 в 20:17
поделиться