I’d like to create a random boolean in JavaScript, but I want to take the previous value into account. If the previous value was true, I want it to be more likely for the next value to be true. At the moment I’ve got this (this is in the context of a closure – goUp and lastGoUp are locals to the containing scope):
function setGoUp() {
goUp = getRandomBoolean();
if(lastGoUp) {
goUp = getRandomBoolean() || goUp;
}
else {
goUp = getRandomBoolean() && goUp;
}
lastGoUp = goUp;
}
So, the algorithm goes:
- Get a random boolean
-
If the random boolean from the previous call was True:
a) get another random boolean, and
orthese two togetherb) else get another random boolean and
andthese together.
I’m sure this algorithm could be simplified. I wondered about doing:
if(lastGoUp && goUp) {
goUp = goUp * (getRandomBoolean() || goUp);
}
but that seems really dirty.
There’s also a problem with this algorithm which means that I can only double the chance of getting the same boolean again – I can’t tweak it easily. Any ideas?
You should define the distribution you want, but maybe you are looking for the following?