aboutsummaryrefslogtreecommitdiff
path: root/sample/puzzle/hanoi.in
diff options
context:
space:
mode:
Diffstat (limited to 'sample/puzzle/hanoi.in')
-rw-r--r--sample/puzzle/hanoi.in30
1 files changed, 30 insertions, 0 deletions
diff --git a/sample/puzzle/hanoi.in b/sample/puzzle/hanoi.in
new file mode 100644
index 0000000..5be47c6
--- /dev/null
+++ b/sample/puzzle/hanoi.in
@@ -0,0 +1,30 @@
+// Tower of Hanoi Puzzle
+
+// Rules
+hanoi(return, source, target, aux) >< (int n)
+| n==0 =>
+ // Erase the source, target and aux
+ source ~ Eraser,
+ target ~ Eraser,
+ aux ~ Eraser,
+
+ // result
+ return~[]
+
+| _ =>
+ // Duplicate the source, target and aux
+ source ~ Dup(src1, Dup(src2, src3)),
+ target ~ Dup(tgt1, Dup(tgt2, tgt3)),
+ aux ~ Dup(aux1, aux2),
+
+ // recursive applications
+ hanoi(ret1, src1, aux1, tgt1)~(n-1),
+ hanoi(ret2, aux2, tgt2, src2)~(n-1),
+
+ // result
+ return << Append(ret1, (n,src3,tgt3):ret2);
+
+
+// Net
+hanoi(result, A, C, B) ~ 3;
+result; // should be [(1,A,C),(2,A,B),(1,C,B),(3,A,C),(1,B,A),(2,B,C),(1,A,C)]