Last Update: Sep.27,2013

JavaScript Sample

動作確認:○IE8(WinXP) ○Firefox24

■ 問題(3組の夫婦の問題)

ここに3組の夫婦がいて、川を向こう岸へ渡ろうとしている。舟は2人乗りの小舟が一隻だけである。ところが、夫人は夫がいないときに他の男と一緒にいる事は許されない。この3組の夫婦が無事に渡るためにはどのようにすればよいか。

■ 解答

(0) ABCABC
(1) BCBC→AA
(2) ABCBCA
(3) ABC→ABC
(4) ABCABC
(5) AA→BCBC
(6) ABAB←CC
(7) AB→ABCC
(8) ABC←ABC
(9) C→ABCAB
(10) CC←ABAB
(11) →ABCABC
(0) ABCABC
(1) BCBC→AA
(2) ABCBCA
(3) ABC→ABC
(4) ABCABC
(5) AA→BCBC
(6) ABAB←CC
(7) AB→ABCC
(8) ABC←ABC
(9) C→ABCAB
(10) AC←ABCB
(11) →ABCABC
(0) ABCABC
(1) ABCCAB
(2) ABCACB
(3) ABC→ABC
(4) ABCABC
(5) AA→BCBC
(6) ABAB←CC
(7) AB→ABCC
(8) ABC←ABC
(9) C→ABCAB
(10) CC←ABAB
(11) →ABCABC
(0) ABCABC
(1) ABCCAB
(2) ABCACB
(3) ABC→ABC
(4) ABCABC
(5) AA→BCBC
(6) ABAB←CC
(7) AB→ABCC
(8) ABC←ABC
(9) C→ABCAB
(10) AC←ABCB
(11) →ABCABC

■ ソース

window.onload = function() {
/*
 *  Jealous Husbands Problem
 *
 *  use river_crossing_puzzle.dfs.js
 *
 */
var AM = 2, BM = 3, CM = 5, AF = 7, BF = 11, CF = 13, SH = 17;

var mem = {
  AM:AM,
  BM:BM,
  CM:CM,
  AF:AF,
  BF:BF,
  CF:CF,
  SH:SH
};

var disp = {
  AM:'A',
  BM:'B',
  CM:'C',
  AF:'<span>A</span>',
  BF:'<span>B</span>',
  CF:'<span>C</span>',
  SH:''
};

var ship = [
  AM*SH,
  BM*SH,
  CM*SH,
  AF*SH,
  BF*SH,
  CF*SH,
  AM*BM*SH,
  AM*CM*SH,
  BM*CM*SH,
  AM*AF*SH,
  BM*BF*SH,
  CM*CF*SH,
  AF*BF*SH,
  AF*CF*SH,
  BF*CF*SH
];


var ok = function(r) {
  if (r.AF == 1 && r.AM == 0 && r.BM+r.CM > 0)
    return false;
  if (r.BF == 1 && r.BM == 0 && r.AM+r.CM > 0)
    return false;
  if (r.CF == 1 && r.CM == 0 && r.AM+r.BM > 0)
    return false;
  return true;
};

var q = new RiverCrossingPuzzle(mem, null, ship, ok, disp);
q.compact(function(a, b) {
  for (var i in a) {
    var ar = Rcp.count(a[i][0], mem);
    var br = Rcp.count(b[i][0], mem);
    if (ar.AM+ar.BM+ar.CM != br.AM+br.BM+br.CM ||
        ar.AF+ar.BF+ar.CF != br.AF+br.BF+br.CF)
      return false;
  }
  return true;
});
document.getElementById('answer').innerHTML = q;

/* ソース表示用 */
var jsparser_obj = new JSParser();
var ro = document.getElementById('ro_script');
var src = ro.text || ro.innerHTML;
document.getElementById('viewsrc').innerHTML = jsparser_obj.parse(src);
};