summaryrefslogtreecommitdiffstats
path: root/kate/tests/highlight.exu
diff options
context:
space:
mode:
Diffstat (limited to 'kate/tests/highlight.exu')
-rw-r--r--kate/tests/highlight.exu97
1 files changed, 97 insertions, 0 deletions
diff --git a/kate/tests/highlight.exu b/kate/tests/highlight.exu
new file mode 100644
index 000000000..3651adf33
--- /dev/null
+++ b/kate/tests/highlight.exu
@@ -0,0 +1,97 @@
+-- Test file for Kate's Euphoria syntax highlighting/code folding.
+-- BEGIN region marker test
+
+-- code here
+
+-- END region marker test
+
+-- The N Queens Problem:
+-- Place N Queens on an NxN chess board
+-- such that they don't threaten each other.
+constant N = 8 -- try some other sizes
+constant ROW = 1, COLUMN = 2
+constant TRUE = 1, FALSE = 0
+type square(sequence x)
+-- a square on the board
+ return length(x) = 2
+end type
+type row(integer x)
+-- a row on the board
+ return x >= 1 and x <= N
+end type
+
+function threat(square q1, square q2)
+-- do two queens threaten each other?
+ if q1[COLUMN] = q2[COLUMN] then
+ return TRUE
+ elsif q1[ROW] - q1[COLUMN] = q2[ROW] - q2[COLUMN] then
+ return TRUE
+ elsif q1[ROW] + q1[COLUMN] = q2[ROW] + q2[COLUMN] then
+ return TRUE
+ elsif q1[ROW] = q2[ROW] then
+ return TRUE
+ else
+ return FALSE
+ end if
+end function
+
+function conflict(square q, sequence queens)
+-- Would square p cause a conflict with other queens on board so far?
+ for i = 1 to length(queens) do
+ if threat(q, queens[i]) then
+ return TRUE
+ end if
+ end for
+ return FALSE
+end function
+
+integer soln
+soln = 0 -- solution number
+
+procedure print_board(sequence queens)
+-- print a solution, showing the Queens on the board
+ integer k
+ position(1, 1)
+ printf(1, "Solution #%d\n\n ", soln)
+ for c = 'a' to 'a' + N - 1 do
+ printf(1, "%2s", c)
+ end for
+ puts(1, "\n")
+ for r = 1 to N do
+ printf(1, "%2d ", r)
+ for c = 1 to N do
+ if find({r,c}, queens) then
+ puts(1, "Q ")
+ else
+ puts(1, ". ")
+ end if
+ end for
+ puts(1, "\n")
+ end for
+ puts(1, "\nPress Enter. (q to quit) ")
+ while TRUE do
+ k = get_key()
+ if k = 'q' then
+ abort(0)
+ elsif k != -1 then
+ exit
+ end if
+ end while
+end procedure
+
+procedure place_queen(sequence queens)
+-- place queens on a NxN chess board
+-- (recursive procedure)
+ row r -- only need to consider one row for each queen
+ if length(queens) = N then
+ soln += 1
+ print_board(queens)
+ return
+ end if
+ r = length(queens)+1
+ for c = 1 to N do
+ if not conflict({r,c}, queens) then
+ place_queen(append(queens, {r,c}))
+ end if
+ end for
+end procedure