Last Update: Mar.13,2014

JavaScript Sample

動作確認: ○IE6SP3(WinXP) ○Firefox27(WinXP) ○Chrome33(WinXP)

■ Tower of Hanoi

[1,2,3,4]:[]:[]
[2,3,4]:[1]:[]
[3,4]:[1]:[2]
[3,4]:[]:[1,2]
[4]:[3]:[1,2]
[1,4]:[3]:[2]
[1,4]:[2,3]:[]
[4]:[1,2,3]:[]
[]:[1,2,3]:[4]
[]:[2,3]:[1,4]
[2]:[3]:[1,4]
[1,2]:[3]:[4]
[1,2]:[]:[3,4]
[2]:[1]:[3,4]
[]:[1]:[2,3,4]
[]:[]:[1,2,3,4]

■ ソース

jQuery(function($) {

var concat_deep = function(arr) {
  var temp = [];
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] instanceof Array)
      temp.push(concat_deep(arr[i]));
    else
      temp.push(arr[i]);
  }
  return temp;
};

var hanoi = function(n) {
  var q = [[],[],[]], h = [];
  for (var i = 0; i < n; i++) {
    q[0].push(i+1);
  }
  h.push(concat_deep(q));
  (function(n, f, w, d) {
    if (n >= 2) arguments.callee(n-1, f, d, w);
    q[d].unshift(q[f].shift());
    h.push(concat_deep(q));
    if (n >= 2) arguments.callee(n-1, w, f, d);
  })(n,0,1,2);
  return h;
};

var print = function(a) {
  var s = '';
  for (var i = 0; i < a.length; i++) {
    var b = a[i];
    s += '['+b[0]+']:['+b[1]+']:['+b[2]+']<br />';
  }
  return s;
};

$('#B1').click(function() {
  var v = $('#S1').val();
  $('#game').html(print(hanoi(v)));
}).click();

});