const DISK_WIDTH = 30; const DISK_HEIGHT = 20; const DELAY_MS = 500; const NUMBER_OF_DISKS = 3; let pole1, pole2, pole3; let A = generateDisks(NUMBER_OF_DISKS); // bottom up, from large to small, like [4,3,2,1] let B = []; let C = []; // Solving the Tower of Hanoi async function solveTower(n, from, to, helper) { // todo } async function move(from, to) { to.push(from.pop()); await sleep(DELAY_MS); } // Main program function setup() { createCanvas(innerWidth, 600); // full width pole1 = (1 * width) / 5; pole2 = width / 2; pole3 = (4 * width) / 5; } function draw() { background(200); // draw three poles stroke(0); strokeWeight(5); line(pole1, height, pole1, height / 3); line(pole2, height, pole2, height / 3); line(pole3, height, pole3, height / 3); fill(255, 0, 0); drawDisks(pole1, A); drawDisks(pole2, B); drawDisks(pole3, C); } function drawDisks(poleLocation, disks) { let y = height - DISK_HEIGHT / 2; rectMode(CENTER); stroke(0); strokeWeight(2); for (let disk of disks) { rect(poleLocation, y, DISK_WIDTH * disk, DISK_HEIGHT); y -= DISK_HEIGHT; } } function mousePressed() { solveTower(A.length, A, B, C); } // Helpers function generateDisks(n) { return Array(n) .fill() .map((_, i) => n - i); } function sleep(milliseconds) { return new Promise((resolve) => setTimeout(resolve, milliseconds)); }