summaryrefslogtreecommitdiff
path: root/tiger-compiler/tests/good/queens.tig
diff options
context:
space:
mode:
Diffstat (limited to 'tiger-compiler/tests/good/queens.tig')
-rw-r--r--tiger-compiler/tests/good/queens.tig33
1 files changed, 33 insertions, 0 deletions
diff --git a/tiger-compiler/tests/good/queens.tig b/tiger-compiler/tests/good/queens.tig
new file mode 100644
index 0000000..a19a781
--- /dev/null
+++ b/tiger-compiler/tests/good/queens.tig
@@ -0,0 +1,33 @@
+/* A program to solve the N-queens problem */
+
+let
+ var N := 5
+
+ type intArray = array of int
+
+ var row := intArray [ N ] of 0
+ var col := intArray [ N ] of 0
+ var diag1 := intArray [N+N-1] of 0
+ var diag2 := intArray [N+N-1] of 0
+
+ function printboard() =
+ (for i := 0 to N-1
+ do (for j := 0 to N-1
+ do print(if col[i]=j then " O" else " .");
+ print("\n"));
+ print("\n"))
+
+ function try(c : int) =
+( /* for i := 0 to c do print("."); print("\n"); flush();*/
+ if c=N
+ then printboard()
+ else for r := 0 to N-1
+ do if row[r]=0 & diag1[r+c]=0 & diag2[r+N-1-c]=0
+ then (row[r] :=1; diag1[r+c] :=1; diag2[r+N-1-c] :=1;
+ col[c] :=r;
+ try(c+1);
+ row[r] :=0; diag1[r+c] :=0; diag2[r+N-1-c] :=0)
+
+)
+ in try(0)
+end