<script
language="javascript"
type="text/javascript">
var
MAXHEIGHT =
8;
var
ndisk;
var
timer =
null;
var
mvfrom =
new
Array(255);
var
mvto =
new
Array(255);
var
mv,
imv;
var
tower =
new
Array(3);
var
h =
new
Array(3);
var
spc =
" ";
var
dname =
new
Array(
"|",
"111",
"22222",
"3333333",
"444444444",
"55555555555",
"6666666666666",
"777777777777777",
"88888888888888888");
function
init()
{
if
(!timer)
{
s
=
document.formHanoi.disk.options[document.formHanoi.disk.selectedIndex].value;
if
(s
==
"random")
{
now
=
new
Date();
ndisk
=
parseInt(now.getTime()
/
1000)
%
8
+
1;
delete
now;
}
else
ndisk =
s;
mv
=
0;
hanoi(0,
2,
1,
ndisk);
for
(i
=
0;
i <
3;
i++)
tower[i]
=
new
Array(MAXHEIGHT);
for
(i
=
0;
i <
ndisk;
i++)
tower[0][i]
=
ndisk -
i;
h[0]
=
ndisk;
h[1]
=
h[2]
=
0;
imv
=
0;
document.formHanoi.display.value
=
gentower();
timer
=
window.setTimeout("gennexttower()",
document.formHanoi.delay.options[document.formHanoi.delay.selectedIndex].value);
}
}
function
stop()
{
if
(timer)
{
window.clearTimeout(timer);
timer
=
null;
}
}
function
hanoi(from,to,buf,nmv)
{
if
(nmv
>
1)
{
hanoi(from,
buf,
to,
nmv -
1);
mvfrom[mv]
=
from;
mvto[mv++]
=
to;
hanoi(buf,
to,
from,
nmv -
1);
}
else
{
mvfrom[mv]
=
from;
mvto[mv++]
=
to;
}
}
function
gennexttower()
{
tower[mvto[imv]][h[mvto[imv]]++]
=
tower[mvfrom[imv]][--h[mvfrom[imv]]];
document.formHanoi.display.value
=
gentower();
if
(++imv
<
mv)
timer
=
window.setTimeout("gennexttower()",
document.formHanoi.delay.options[document.formHanoi.delay.selectedIndex].value);
else
{
for
(i
=
0;
i <
3;
i++)
delete
tower[i];
timer
=
null;
}
}
function
gentower()
{
s
=
" \n";
for
(i
=
MAXHEIGHT -
1;
i >=
0;
i--)
{
for
(j
=
0;
j <
tower.length;
j++)
{
len
=
i <
h[j]
?
tower[j][i]
:
0;
width
=
MAXHEIGHT -
len;
s
+=
" "
+
spc.substring(0,
width)
+
dname[len]
+
spc.substring(0,
width);
}
s
+=
"\n";
}
return
s+"=======================================================";
}
</script>
<form
name=formHanoi>
<textarea
name=display
rows=10
cols=56></textarea><br>
<table
border=0
cellspacing=10
cellpadding=0>
<tr>
<td>Number of disks</td>
<td><select
name=disk>
<option
selected
value=random>Random
<option
value=1>1
<option
value=2>2
<option
value=3>3
<option
value=4>4
<option
value=5>5
<option
value=6>6
<option
value=7>7
<option
value=8>8
</select></td>
</tr>
<tr>
<td>Movement delay</td>
<td><select
name=delay>
<option
value=100>100
milliseconds
<option
value=200>200
milliseconds
<option
value=300>300
milliseconds
<option
value=400>400
milliseconds
<option
selected
value=500>500
milliseconds
<option
value=600>600
milliseconds
<option
value=700>700
milliseconds
<option
value=800>800
milliseconds
<option
value=900>900
milliseconds
<option
value=1000>1000
milliseconds
</select></td>
</tr>
</table>
<input
type=button
value="Start"
onClick="init();">
<input
type=button
value="Stop"
onClick="stop();">
</form>