JSFiddle - React, Tailwind, and code Playground
Assignment 7 Tower of Hanoi
by dhizzybusy
HTML
<h1>
<Center>Tower Of Hanoi Problem</Center>
</h1>
<br><br/>
<input type="textbox" id="lastNumber" Value="" />
<input type="button" id="towerSolve" value="Solve" onClick="towerSolve();" />
<div id="output">
</div>
JavaScript
// Linked List
function Node(data) {
this.data = data;
this.next = null;
}
// Stack implemented using LinkedList
function Stack() {
this.top = null;
}
Stack.prototype.push = function(data) {
var newNode = new Node(data);
newNode.next = this.top;
this.top = newNode;
}
Stack.prototype.pop = function() {
if (this.top !== null) {
var topItem = this.top.data;
this.top = this.top.next;
return topItem;
}
return null;
}
Stack.prototype.print = function() {
var str="";
var curr = this.top;
while (curr) {
console.log(curr.data);
str+= "</br> "+ JSON.stringify(curr)+"</br>";
console.log(str);
curr = curr.next;
}
return str;
}
//global variable
var d = "";
var countSteps= 0;
function clearDisplay()
{
//Global string d is used to hold display
d = " ";
// The div element named output is used to display output
document.getElementById("output").innerHTML = "";
countSteps=0;
}
function tower(n,source,buffer,destination)
{
if (n==1)
{
move(source,destination);
countSteps=countSteps+1;
}
else
{
tower(n-1,source,destination,buffer);
move(source,destination);
countSteps=countSteps+1;
tower(n-1,buffer,destination,source);
}
}
function move(A,B){
B.push(A.pop());
}
function towerSolve()
{
clearDisplay();
var stackA=new Stack();
var stackB=new Stack();
var StackC=new Stack();
// loop to fill stack
var i = parseInt(document.getElementById("lastNumber").value);
for (var s=i;s>0;s--){stackA.push(s)}
clearDisplay();
tower(i,stackA,stackB,StackC);
document.getElementById("output").innerHTML = "It took only " + countSteps + " moves";
}