File indexing completed on 2025-02-02 03:54:44
0001 <!DOCTYPE html> 0002 <html><head> 0003 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 0004 <title>highlight.exu</title> 0005 <meta name="generator" content="KF5::SyntaxHighlighting - Definition (Euphoria) - Theme (Breeze Light)"/> 0006 </head><body style="background-color:#ffffff;color:#1f1c1b"><pre> 0007 <span style="color:#898887">-- Test file for Kate's Euphoria syntax highlighting/code folding.</span> 0008 <span style="color:#0057ae;background-color:#e0e9f8">-- BEGIN region marker test</span> 0009 0010 <span style="color:#898887">-- code here</span> 0011 0012 <span style="color:#0057ae;background-color:#e0e9f8">-- END region marker test</span> 0013 0014 <span style="color:#898887">-- The N Queens Problem:</span> 0015 <span style="color:#898887">-- Place N Queens on an NxN chess board</span> 0016 <span style="color:#898887">-- such that they don't threaten each other.</span> 0017 <span style="color:#0057ae">constant</span> N = <span style="color:#b08000">8</span> <span style="color:#898887">-- try some other sizes</span> 0018 <span style="color:#0057ae">constant</span> ROW = <span style="color:#b08000">1</span>, COLUMN = <span style="color:#b08000">2</span> 0019 <span style="color:#0057ae">constant</span> <span style="font-weight:bold">TRUE</span> = <span style="color:#b08000">1</span>, <span style="font-weight:bold">FALSE</span> = <span style="color:#b08000">0</span> 0020 <span style="font-weight:bold">type</span> square(<span style="color:#0057ae">sequence</span> x) 0021 <span style="color:#898887">-- a square on the board</span> 0022 <span style="font-weight:bold">return</span> <span style="font-weight:bold">length</span>(x) = <span style="color:#b08000">2</span> 0023 <span style="font-weight:bold">end type</span> 0024 <span style="font-weight:bold">type</span> row(<span style="color:#0057ae">integer</span> x) 0025 <span style="color:#898887">-- a row on the board</span> 0026 <span style="font-weight:bold">return</span> x >= <span style="color:#b08000">1</span> <span style="font-weight:bold">and</span> x <= N 0027 <span style="font-weight:bold">end type</span> 0028 0029 <span style="font-weight:bold">function</span> threat(square q1, square q2) 0030 <span style="color:#898887">-- do two queens threaten each other?</span> 0031 <span style="font-weight:bold">if</span> q1[COLUMN] = q2[COLUMN] <span style="font-weight:bold">then</span> 0032 <span style="font-weight:bold">return</span> <span style="font-weight:bold">TRUE</span> 0033 <span style="font-weight:bold">elsif</span> q1[ROW] - q1[COLUMN] = q2[ROW] - q2[COLUMN] <span style="font-weight:bold">then</span> 0034 <span style="font-weight:bold">return</span> <span style="font-weight:bold">TRUE</span> 0035 <span style="font-weight:bold">elsif</span> q1[ROW] + q1[COLUMN] = q2[ROW] + q2[COLUMN] <span style="font-weight:bold">then</span> 0036 <span style="font-weight:bold">return</span> <span style="font-weight:bold">TRUE</span> 0037 <span style="font-weight:bold">elsif</span> q1[ROW] = q2[ROW] <span style="font-weight:bold">then</span> 0038 <span style="font-weight:bold">return</span> <span style="font-weight:bold">TRUE</span> 0039 <span style="font-weight:bold">else</span> 0040 <span style="font-weight:bold">return</span> <span style="font-weight:bold">FALSE</span> 0041 <span style="font-weight:bold">end if</span> 0042 <span style="font-weight:bold">end function</span> 0043 0044 <span style="font-weight:bold">function</span> conflict(square q, <span style="color:#0057ae">sequence</span> queens) 0045 <span style="color:#898887">-- Would square p cause a conflict with other queens on board so far?</span> 0046 <span style="font-weight:bold">for</span> i = <span style="color:#b08000">1</span> <span style="font-weight:bold">to</span> <span style="font-weight:bold">length</span>(queens) <span style="font-weight:bold">do</span> 0047 <span style="font-weight:bold">if</span> threat(q, queens[i]) <span style="font-weight:bold">then</span> 0048 <span style="font-weight:bold">return</span> <span style="font-weight:bold">TRUE</span> 0049 <span style="font-weight:bold">end if</span> 0050 <span style="font-weight:bold">end for</span> 0051 <span style="font-weight:bold">return</span> <span style="font-weight:bold">FALSE</span> 0052 <span style="font-weight:bold">end function</span> 0053 0054 <span style="color:#0057ae">integer</span> soln 0055 soln = <span style="color:#b08000">0</span> <span style="color:#898887">-- solution number</span> 0056 0057 <span style="font-weight:bold">procedure</span> print_board(<span style="color:#0057ae">sequence</span> queens) 0058 <span style="color:#898887">-- print a solution, showing the Queens on the board</span> 0059 <span style="color:#0057ae">integer</span> k 0060 <span style="font-weight:bold">position</span>(<span style="color:#b08000">1</span>, <span style="color:#b08000">1</span>) 0061 <span style="font-weight:bold">printf</span>(<span style="color:#b08000">1</span>, <span style="color:#bf0303">"Solution #%d\n\n "</span>, soln) 0062 <span style="font-weight:bold">for</span> c = 'a' <span style="font-weight:bold">to</span> 'a' + N - <span style="color:#b08000">1</span> <span style="font-weight:bold">do</span> 0063 <span style="font-weight:bold">printf</span>(<span style="color:#b08000">1</span>, <span style="color:#bf0303">"%2s"</span>, c) 0064 <span style="font-weight:bold">end for</span> 0065 <span style="font-weight:bold">puts</span>(<span style="color:#b08000">1</span>, <span style="color:#bf0303">"\n"</span>) 0066 <span style="font-weight:bold">for</span> r = <span style="color:#b08000">1</span> <span style="font-weight:bold">to</span> N <span style="font-weight:bold">do</span> 0067 <span style="font-weight:bold">printf</span>(<span style="color:#b08000">1</span>, <span style="color:#bf0303">"%2d "</span>, r) 0068 <span style="font-weight:bold">for</span> c = <span style="color:#b08000">1</span> <span style="font-weight:bold">to</span> N <span style="font-weight:bold">do</span> 0069 <span style="font-weight:bold">if</span> <span style="font-weight:bold">find</span>({r,c}, queens) <span style="font-weight:bold">then</span> 0070 <span style="font-weight:bold">puts</span>(<span style="color:#b08000">1</span>, <span style="color:#bf0303">"Q "</span>) 0071 <span style="font-weight:bold">else</span> 0072 <span style="font-weight:bold">puts</span>(<span style="color:#b08000">1</span>, <span style="color:#bf0303">". "</span>) 0073 <span style="font-weight:bold">end if</span> 0074 <span style="font-weight:bold">end for</span> 0075 <span style="font-weight:bold">puts</span>(<span style="color:#b08000">1</span>, <span style="color:#bf0303">"\n"</span>) 0076 <span style="font-weight:bold">end for</span> 0077 <span style="font-weight:bold">puts</span>(<span style="color:#b08000">1</span>, <span style="color:#bf0303">"\nPress Enter. (q to quit) "</span>) 0078 <span style="font-weight:bold">while</span> <span style="font-weight:bold">TRUE</span> <span style="font-weight:bold">do</span> 0079 k = <span style="font-weight:bold">get_key</span>() 0080 <span style="font-weight:bold">if</span> k = 'q' <span style="font-weight:bold">then</span> 0081 <span style="font-weight:bold">abort</span>(<span style="color:#b08000">0</span>) 0082 <span style="font-weight:bold">elsif</span> k != -<span style="color:#b08000">1</span> <span style="font-weight:bold">then</span> 0083 <span style="font-weight:bold">exit</span> 0084 <span style="font-weight:bold">end if</span> 0085 <span style="font-weight:bold">end while</span> 0086 <span style="font-weight:bold">end procedure</span> 0087 0088 <span style="font-weight:bold">procedure</span> place_queen(<span style="color:#0057ae">sequence</span> queens) 0089 <span style="color:#898887">-- place queens on a NxN chess board</span> 0090 <span style="color:#898887">-- (recursive procedure)</span> 0091 row r <span style="color:#898887">-- only need to consider one row for each queen</span> 0092 <span style="font-weight:bold">if</span> <span style="font-weight:bold">length</span>(queens) = N <span style="font-weight:bold">then</span> 0093 soln += <span style="color:#b08000">1</span> 0094 print_board(queens) 0095 <span style="font-weight:bold">return</span> 0096 <span style="font-weight:bold">end if</span> 0097 r = <span style="font-weight:bold">length</span>(queens)+<span style="color:#b08000">1</span> 0098 <span style="font-weight:bold">for</span> c = <span style="color:#b08000">1</span> <span style="font-weight:bold">to</span> N <span style="font-weight:bold">do</span> 0099 <span style="font-weight:bold">if</span> <span style="font-weight:bold">not</span> conflict({r,c}, queens) <span style="font-weight:bold">then</span> 0100 place_queen(<span style="font-weight:bold">append</span>(queens, {r,c})) 0101 <span style="font-weight:bold">end if</span> 0102 <span style="font-weight:bold">end for</span> 0103 <span style="font-weight:bold">end procedure</span> 0104 </pre></body></html>