Tower of Hanoi (Simple)

by Hari Menon

HTML

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

JavaScript

var lists, counter = 0;

var appendToOutput = function (text) {
    document.querySelector('#output').innerHTML = document.querySelector('#output').innerHTML + text;
};

var printTheLists = function () {
    appendToOutput('\tSRC: ' + lists.src.join(', ') + '\n\tDST: ' + lists.dst.join(', ') + '\n\tAUX: ' + lists.aux.join(', ') + '\n\n');
}

var initialize = function (disc, src, aux, dst) {
    lists = {
        src: [],
        dst: [],
        aux: []
    };
    for (var i = disc; i > 0; i--) {
        lists.src.push(i);
    }
    appendToOutput('Initial State:\n');
    printTheLists();
};

var hanoi = function (disc, src, aux, dst) {
    if (!lists) {
        initialize(disc, src, aux, dst);
    }
    if (disc > 0) {
        hanoi(disc - 1, src, dst, aux);

        appendToOutput(++counter + '. Moving disc ' + disc + ' from ' + src + ' to ' + dst + '\n');
        lists[dst].push(lists[src].pop());

        printTheLists();

        hanoi(disc - 1, aux, src, dst);
    }
};

hanoi(4, 'src', 'aux', 'dst');