久々の回答

0だけは5回中1回表示し、他は条件なしのランダムで
http://oshiete.goo.ne.jp/qa/7666439.html

久々に回答!
普通なら

<!DOCTYPE html>
<meta charset="UTF-8">
<title></title>

<script>

function random () {
  var ary = [];

  function range (a, b) {
    var ary =[];
    var i;
    
    for (i = a; i <= b; i++) {
      ary.push (i);
    }
    return ary;
  }
  

  function randomInt (n) {
    return Math.floor (Math.random () * n);
  }
  

  function shuffle (ary) {
    var len = ary.length;
    var i, n, m;
    
    for (i = len; i; ) {
      n = randomInt (i--);
      m = ary[i];
      ary[i] = ary[n];
      ary[n] = m;
    }

    return ary;
  }
  

  function ikasama (ary) {
    var insertAry = [0,0,0,0];
    var len = insertAry.length;
    var span = 5;
    var i;
    
    for (i = 0; i < len; i++) {
      ary.splice (i * span + randomInt (span), 1, insertAry[i]);
    }
    
    return ary;
  }


  function reset () {
    ary = ikasama (shuffle (range (1, 20)));
    alert(ary);
  }

  
  return function () {
    if (0 === ary.length) {
      reset ();
    }
    
    return ary.shift ();
  };
}

var next = random ();

setInterval (function () { alert (next ()); }, 1000);
</script>

yield を使うなら

<!DOCTYPE html>
<meta charset="UTF-8">
<title></title>
<script type="application/javascript; version=1.8">

var random = (function ikasama () {
  function randomInt (n) Math.random () * n | 0
  function range (a, b) { for (; a <= b;) yield a++ }
  function shuffle (ary) { let n; while (0 < (n = ary.length)) yield ary.splice (randomInt (n), 1) }
  function ikasama (a,b) this.ary.splice (this.span * b + randomInt (this.span), 1, a)
  
  var r;
  var ary = [x for each (x in range (1, 20)) ];
  var buf = [];
  var insertAry = [0,0,0,0];
  
  while (true) {
    if (buf.length < 1) {
      buf = [x for each (x in shuffle (ary)) ];
      insertAry.forEach (ikasama, { ary: buf, span: 5 }); // ここがいけてない
    }
  
    yield buf.shift ();
  }
}) ();

setInterval (function () { alert (random.next ()); }, 1000);
</script>

期日に応じてチェックボックスを有効にしたり無効に
http://oshiete.goo.ne.jp/qa/7666345.html

おまけで回答。

<!DOCTYPE html>
<meta charset="UTF-8">
<title></title>

<style>
input[type="checkbox"]:disabled + label {
 color: #aaf;
}
input[type="checkbox"]:checked + label {
 border-bottom: 2px red solid;
}
</style>

<form>
 <input name="希望区域" type="checkbox" value="末広町"><label>末広町</label>
 <input name="希望区域" type="checkbox" value="緑町"><label>緑町</label>
 <input name="希望区域" type="checkbox" value="新田町"><label>新田町</label>
 <input name="希望区域" type="checkbox" value="洋野町"><label>洋野町</label>
</form>

<script type="application/javascript; version=1.8">


function hashDictionary (a,b) { return b.value ? ((a[b.value] = b), a): a }
function toElement (a) { return this.dic[a] } 
function setDisabled (a) { a.disabled = !!this.disabled }

function setState (condition) {
 var a = condition.date.match (/\d+/g);
 if (! a) throw new Error;

 var sDate = +(new Date (a[0], a[1]-1, a[2]));
 var eDate = +(new Date (a[3], a[4]-1, a[5]));
 var ary = [];

 if (sDate <= this.target) {
  if (this.target <= eDate) {
   ((condition.item instanceof Array) ? condition.item: [condition.item])
     .map (toElement, this)
     .forEach (setDisabled, condition);
  }
 } 
}


var ConditionList = [
 { date: '2012-08-05/2012-08-31', item: ['洋野町', '緑町'], disabled: true },
 { date: '2012年08月05日/2012年08月31日', item: ['末広町', '新田町'], disabled: false }
];

var checkbox = document.querySelectorAll ('form input[type="checkbox"][name="希望区域"]');
var hash = Array.prototype.reduce.call (checkbox, hashDictionary, new Object);

ConditionList.forEach (setState, {dic: hash, target: +(new Date)});
//_________________

document.addEventListener ('click', function (event) {
 var e = event.target;
 if ('checkbox' === e.type)
  alert (e.value + 'を押したね');
}, false);

</script>

夏風邪で、咳が続く。


大口の仕事をこなすも、売上にはつながらず疲れだけが増す。

この業界、「先生」と呼ばれる名家からの仕事は、面倒だというが…。
(代議士、医者、弁護士、学校の先生などなど・・・)それじゃなくても疲れることもあるね〜。