Full version: jsB@nk » Game » Puzzle » Hanoi Solver
URL: https://www.javascriptbank.com/hanoi-solver.html
Solves the Towers of Hanoi game in the shortest number of moves, demo included. The delay between moves and the number of rings can be adjusted by the user. Clever!
Full version: jsB@nk » Game » Puzzle » Hanoi Solver
URL: https://www.javascriptbank.com/hanoi-solver.html
<SCRIPT LANGUAGE="JavaScript">// Amin Wong ([email protected])<!-- Beginvar 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+"=======================================================";}// End --></script><!-- This script downloaded from www.JavaScriptBank.com Come to view and download over 2000+ free javascript at www.JavaScriptBank.com-->
<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><!-- This script downloaded from www.JavaScriptBank.com Come to view and download over 2000+ free javascript at www.JavaScriptBank.com-->