import java.util.Random;
public class SatHanoi01 {
static int counter;
/*
* This function returns the optimal amount of steps,
* needed to solve the problem for n-disks
*/
static int hanoi(int n) {
if (n == 1) {
return 1;
}
return 2 * (hanoi(n - 1)) + 1;
}
/*
* This applies the known algorithm, without executing it (so no arrays).
* But the amount of steps is counted in a global variable.
*/
static void applyHanoi(int n, int from, int to, int via) {
if (n == 0) {
return;
}
// increment the number of steps
counter++;
applyHanoi(n - 1, from, via, to);
applyHanoi(n - 1, via, to, from);
}
public static void main(String[] args) {
Random rand = new Random(42);
int n = rand.nextInt();
if (n < 1 || n > 31) {
return;
}
counter = 0;
applyHanoi(n, 1, 3, 2);
int result = hanoi(n);
// result and the counter should be the same!
if (result < counter) {
return;
} else {
assert false;
}
}
}