Tower of Hanoi

by Ryan Brown

HTML

<form>
<input type = "textbox" id = "tb" value="6" />
<input type = "button" id="tbut" value="enter disc" onclick ="setnum();" />

</form>

<pre id="output"></pre>

JavaScript

var counter = 0,
    lists;
var hanoi = function (disc, src, aux, dst) {
    if (disc > 10) {
        alert('THAT CAN TAKE A WHILE ( AND MAYBE EVEN CRASH YOUR BROWSER )!\nPlease use a lower number of discs...');
        return;
    }
    if (!lists) {
        lists = {
            src: [],
            dst: [],
            aux: []
        };
        for (var i = disc; i > 0; i--) {
            lists.src.push(i);
        }
        console.log('Initially, src, dst and aux: ');
        console.log(lists.src)
        console.log(lists.dst)
        console.log(lists.aux)
    }
    if (disc > 0) {
        hanoi(disc - 1, src, dst, aux);
        document.querySelector('#output ').innerHTML = document.querySelector('#output ').innerHTML + ++counter + ". Move disc " + disc + " from " + src + " to " + dst + "\n";
        lists[dst].push(lists[src].pop());
        console.log('After step ' + counter + ', src, dst and aux: ');
        console.log(lists.src)
        console.log(lists.dst)
        console.log(lists.aux)
        hanoi(disc - 1, aux, src, dst);
    }
};

var temp = getElementById("tb").value
hanoi("temp", "src", "aux", "dst");