// Week 12 – Towers of Hanoi
// Run: go run ./w12/hanoi
package main

import "fmt"

var moves int

func hanoi(n int, from, to, via string, print bool) {
	if n == 0 {
		return
	}
	hanoi(n-1, from, via, to, print)
	moves++
	if print {
		fmt.Printf("  %d. disk: %s -> %s\n", n, from, to)
	}
	hanoi(n-1, via, to, from, print)
}

func main() {
	fmt.Println("3 disks:")
	hanoi(3, "A", "C", "B", true)
	fmt.Println("moves:", moves, "(2^3 − 1 = 7)")
	for _, n := range []int{10, 20, 25} {
		moves = 0
		hanoi(n, "A", "C", "B", false)
		fmt.Printf("n = %d: %d moves\n", n, moves)
	}
}
