<html>
<head>
</head>
<body>
<table id="HanoiTable">
<tr><td align="center" width="150"> </td><td align="center" width="150"> </td><td align="center" width="150"> </td></tr>
<tr><td align="center"> </td><td align="center"> </td><td align="center"> </td></tr>
<tr><td align="center"> </td><td align="center"> </td><td align="center"> </td></tr>
<tr><td align="center"> </td><td align="center"> </td><td align="center"> </td></tr>
<tr><td align="center"> </td><td align="center"> </td><td align="center"> </td></tr>
<tr><td align="center"> </td><td align="center"> </td><td align="center"> </td></tr>
<tr><td align="center"> </td><td align="center"> </td><td align="center"> </td></tr>
<tr><td align="center"> </td><td align="center"> </td><td align="center"> </td></tr>
<tr><td align="center"> </td><td align="center"> </td><td align="center"> </td></tr>
<tr><td bgcolor="black" colspan=3> </td></tr>
</table>
<script>
var HanoiTable = document.getElementById("HanoiTable");
var HanoiDrawIndex = 0;
var HanoiDrawCount = 0;
var HanoiDrawList = Array();
var HanoiRings=9;
var Towers=[
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0]
];
function HanoiTriples(n3Power,a,b,c)
{
if(n3Power<1) {
HanoiMove(a,b);
} else {
HanoiTriples(n3Power-1,a,b,c);
HanoiTriples(n3Power-1,a,c,b);
HanoiTriples(n3Power-1,b,c,a);
HanoiTriples(n3Power-1,a,b,c);
HanoiTriples(n3Power-1,c,a,b);
HanoiTriples(n3Power-1,c,b,a);
HanoiTriples(n3Power-1,a,b,c);
}
}
/*
function Hanoi(n,a,b,c)
{
if(n>0) {
Hanoi(n-1,a,c,b);
HanoiMove(a,b);
Hanoi(n-1,c,b,a);
}
}
*/
function HanoiMove(a,b)
{
nA = a-1;
nB = b-1;
var nRing=0;
//
// Remove top ring from tower a.
nRing = 0;
nASize = Towers[nA][0];
if(nASize>0) {
nRing = Towers[nA][nASize];
Towers[nA][nASize] = 0;
Towers[nA][0] = nASize-1;
HanoiSetDraw(a,nASize,0,false);
}
//
// Place it onto tower b.
if(nRing>0) {
nBSize = Towers[nB][0]+1;
Towers[nB][0] = nBSize;
Towers[nB][nBSize] = nRing;
HanoiSetDraw(b,nBSize,nRing,true);
}
}
function HanoiSetDraw(tower,level,ringsize,delay)
{
var Move=Array();
Move.tower=tower;
Move.level=level;
Move.ringsize=ringsize;
Move.delay=delay;
HanoiDrawList[HanoiDrawCount] = Move;
HanoiDrawCount++;
}
function HanoiDraw()
{
while(HanoiDrawIndex<HanoiDrawCount) {
Move = HanoiDrawList[HanoiDrawIndex];
HanoiDrawIndex++;
HanoiCell = HanoiTable.rows[9-Move.level].cells[Move.tower-1];
HanoiCell.innerHTML = " "+(Array(Move.ringsize+1).join("="));
if(Move.delay) break;
}
}Towers[0][0]=HanoiRings;
for(n=1;n<=HanoiRings;n++) {
Towers[0][n] = HanoiRings-n+1;
HanoiSetDraw(1,n,Towers[0][n],false);
}setInterval(HanoiDraw,250);
HanoiTriples(2,1,2,3);
</script>
</body>
</html>