генератор цепочек неповторяющий подряд и равномерного распределения для любого количества элементов >=3.
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
</head>
<body>
<script>
function rund(e) {
function d(b) {
for (var a = b.length - 1; 0 < a; a--) {
var c = Math.floor(Math.random() * (a + 1)),
d = b[c];
b[c] = b[a];
b[a] = d
}
return b
}
var a = [],
c = [];
for (i = 0; i < e;) a[i] = ++i;
d(a);
return function () {
var b = a.shift();
c.push(b);
1 == a.length && (d(c), a = a.concat(c), c = []);
return b
}
};
var N = 40000,
a = [],
e = 4,
z = rund(e),
i;
for (i = 0; i < e + 1; i++) {
a[i] = 0;
}
for (i = 0; i < N; i++) {
a[z()]++;
}
alert(a); //проверка равномерности ноль неучитывается
for (i = 0; i < 40; i++) {
document.write(z()+' '); //для примера
}
</script>
</body>
</html>