diff options
-rw-r--r-- | html/nqueens.mu.html | 97 | ||||
-rw-r--r-- | nqueens.mu | 9 |
2 files changed, 52 insertions, 54 deletions
diff --git a/html/nqueens.mu.html b/html/nqueens.mu.html index 6180c160..bb65102c 100644 --- a/html/nqueens.mu.html +++ b/html/nqueens.mu.html @@ -97,7 +97,7 @@ if ('onhashchange' in window) { <span id="L36" class="LineNr"> 36 </span> <span class="Conceal">¦</span> <span class="Delimiter">{</span> <span id="L37" class="LineNr"> 37 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> curr-conflicts?:bool <span class="Special"><-</span> <a href='nqueens.mu.html#L53'>conflict?</a> curr, queens <span id="L38" class="LineNr"> 38 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> curr-conflicts? -<span id="L39" class="LineNr"> 39 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> queens:&:<a href='064list.mu.html#L6'>list</a>:<a href='nqueens.mu.html#L6'>square</a> <span class="Special"><-</span> push curr, queens +<span id="L39" class="LineNr"> 39 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> queens <span class="Special"><-</span> push curr, queens <span id="L40" class="LineNr"> 40 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> sub-result:num <span class="Special"><-</span> <a href='nqueens.mu.html#L11'>nqueens</a> n, queens <span id="L41" class="LineNr"> 41 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> result <span class="Special"><-</span> add result, sub-result <span id="L42" class="LineNr"> 42 </span> <span class="Conceal">¦</span> <span class="Conceal">¦</span> queens <span class="Special"><-</span> <a href='064list.mu.html#L25'>rest</a> queens @@ -114,54 +114,53 @@ if ('onhashchange' in window) { <span id="L53" class="LineNr"> 53 </span><span class="muRecipe">def</span> <a href='nqueens.mu.html#L53'>conflict?</a> curr:<a href='nqueens.mu.html#L6'>square</a>, queens:&:<a href='064list.mu.html#L6'>list</a>:<a href='nqueens.mu.html#L6'>square</a><span class="muRecipe"> -> </span>result:bool [ <span id="L54" class="LineNr"> 54 </span> <span class="Constant">local-scope</span> <span id="L55" class="LineNr"> 55 </span> <span class="Constant">load-ingredients</span> -<span id="L56" class="LineNr"> 56 </span> result1:bool <span class="Special"><-</span> <a href='nqueens.mu.html#L62'>conflicting-file?</a> curr, queens -<span id="L57" class="LineNr"> 57 </span> <span class="muControl">return-if</span> result1, result1 -<span id="L58" class="LineNr"> 58 </span> result2:bool <span class="Special"><-</span> <a href='nqueens.mu.html#L78'>conflicting-diagonal?</a> curr, queens -<span id="L59" class="LineNr"> 59 </span> <span class="muControl">return</span> result2 -<span id="L60" class="LineNr"> 60 </span>] -<span id="L61" class="LineNr"> 61 </span> -<span id="L62" class="LineNr"> 62 </span><span class="muRecipe">def</span> <a href='nqueens.mu.html#L62'>conflicting-file?</a> curr:<a href='nqueens.mu.html#L6'>square</a>, queens:&:<a href='064list.mu.html#L6'>list</a>:<a href='nqueens.mu.html#L6'>square</a><span class="muRecipe"> -> </span>result:bool [ -<span id="L63" class="LineNr"> 63 </span> <span class="Constant">local-scope</span> -<span id="L64" class="LineNr"> 64 </span> <span class="Constant">load-ingredients</span> -<span id="L65" class="LineNr"> 65 </span> curr-file:num <span class="Special"><-</span> get curr, <span class="Constant">file:offset</span> -<span id="L66" class="LineNr"> 66 </span> <span class="Delimiter">{</span> -<span id="L67" class="LineNr"> 67 </span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> queens -<span id="L68" class="LineNr"> 68 </span> <span class="Conceal">¦</span> q:<a href='nqueens.mu.html#L6'>square</a> <span class="Special"><-</span> first queens -<span id="L69" class="LineNr"> 69 </span> <span class="Conceal">¦</span> qfile:num <span class="Special"><-</span> get q, <span class="Constant">file:offset</span> -<span id="L70" class="LineNr"> 70 </span> <span class="Conceal">¦</span> file-match?:bool <span class="Special"><-</span> equal curr-file, qfile -<span id="L71" class="LineNr"> 71 </span> <span class="Conceal">¦</span> <span class="muControl">return-if</span> file-match?, <span class="Constant">1/conflict-found</span> -<span id="L72" class="LineNr"> 72 </span> <span class="Conceal">¦</span> queens <span class="Special"><-</span> <a href='064list.mu.html#L25'>rest</a> queens -<span id="L73" class="LineNr"> 73 </span> <span class="Conceal">¦</span> <span class="muControl">loop</span> -<span id="L74" class="LineNr"> 74 </span> <span class="Delimiter">}</span> -<span id="L75" class="LineNr"> 75 </span> <span class="muControl">return</span> <span class="Constant">0/no-conflict-found</span> -<span id="L76" class="LineNr"> 76 </span>] -<span id="L77" class="LineNr"> 77 </span> -<span id="L78" class="LineNr"> 78 </span><span class="muRecipe">def</span> <a href='nqueens.mu.html#L78'>conflicting-diagonal?</a> curr:<a href='nqueens.mu.html#L6'>square</a>, queens:&:<a href='064list.mu.html#L6'>list</a>:<a href='nqueens.mu.html#L6'>square</a><span class="muRecipe"> -> </span>result:bool [ -<span id="L79" class="LineNr"> 79 </span> <span class="Constant">local-scope</span> -<span id="L80" class="LineNr"> 80 </span> <span class="Constant">load-ingredients</span> -<span id="L81" class="LineNr"> 81 </span> curr-rank:num <span class="Special"><-</span> get curr, <span class="Constant">rank:offset</span> -<span id="L82" class="LineNr"> 82 </span> curr-file:num <span class="Special"><-</span> get curr, <span class="Constant">file:offset</span> -<span id="L83" class="LineNr"> 83 </span> <span class="Delimiter">{</span> -<span id="L84" class="LineNr"> 84 </span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> queens -<span id="L85" class="LineNr"> 85 </span> <span class="Conceal">¦</span> q:<a href='nqueens.mu.html#L6'>square</a> <span class="Special"><-</span> first queens -<span id="L86" class="LineNr"> 86 </span> <span class="Conceal">¦</span> qrank:num <span class="Special"><-</span> get q, <span class="Constant">rank:offset</span> -<span id="L87" class="LineNr"> 87 </span> <span class="Conceal">¦</span> qfile:num <span class="Special"><-</span> get q, <span class="Constant">file:offset</span> -<span id="L88" class="LineNr"> 88 </span> <span class="Conceal">¦</span> rank-delta:num <span class="Special"><-</span> subtract qrank, curr-rank -<span id="L89" class="LineNr"> 89 </span> <span class="Conceal">¦</span> file-delta:num <span class="Special"><-</span> subtract qfile, curr-file -<span id="L90" class="LineNr"> 90 </span> <span class="Conceal">¦</span> rank-delta <span class="Special"><-</span> <a href='070table.mu.html#L103'>abs</a> rank-delta -<span id="L91" class="LineNr"> 91 </span> <span class="Conceal">¦</span> file-delta <span class="Special"><-</span> <a href='070table.mu.html#L103'>abs</a> file-delta -<span id="L92" class="LineNr"> 92 </span> <span class="Conceal">¦</span> diagonal-match?:bool <span class="Special"><-</span> equal rank-delta, file-delta -<span id="L93" class="LineNr"> 93 </span> <span class="Conceal">¦</span> <span class="muControl">return-if</span> diagonal-match?, <span class="Constant">1/conflict-found</span> -<span id="L94" class="LineNr"> 94 </span> <span class="Conceal">¦</span> queens <span class="Special"><-</span> <a href='064list.mu.html#L25'>rest</a> queens -<span id="L95" class="LineNr"> 95 </span> <span class="Conceal">¦</span> <span class="muControl">loop</span> -<span id="L96" class="LineNr"> 96 </span> <span class="Delimiter">}</span> -<span id="L97" class="LineNr"> 97 </span> <span class="muControl">return</span> <span class="Constant">0/no-conflict-found</span> -<span id="L98" class="LineNr"> 98 </span>] -<span id="L99" class="LineNr"> 99 </span> -<span id="L100" class="LineNr">100 </span><span class="muRecipe">def</span> <a href='nqueens.mu.html#L100'>main</a> [ -<span id="L101" class="LineNr">101 </span> <a href='nqueens.mu.html#L11'>nqueens</a><span class="Constant"> 4</span> -<span id="L102" class="LineNr">102 </span> $dump-trace <span class="Constant">[app]</span> -<span id="L103" class="LineNr">103 </span>] +<span id="L56" class="LineNr"> 56 </span> result:bool <span class="Special"><-</span> <a href='nqueens.mu.html#L61'>conflicting-file?</a> curr, queens +<span id="L57" class="LineNr"> 57 </span> <span class="muControl">return-if</span> result +<span id="L58" class="LineNr"> 58 </span> result:bool <span class="Special"><-</span> <a href='nqueens.mu.html#L77'>conflicting-diagonal?</a> curr, queens +<span id="L59" class="LineNr"> 59 </span>] +<span id="L60" class="LineNr"> 60 </span> +<span id="L61" class="LineNr"> 61 </span><span class="muRecipe">def</span> <a href='nqueens.mu.html#L61'>conflicting-file?</a> curr:<a href='nqueens.mu.html#L6'>square</a>, queens:&:<a href='064list.mu.html#L6'>list</a>:<a href='nqueens.mu.html#L6'>square</a><span class="muRecipe"> -> </span>result:bool [ +<span id="L62" class="LineNr"> 62 </span> <span class="Constant">local-scope</span> +<span id="L63" class="LineNr"> 63 </span> <span class="Constant">load-ingredients</span> +<span id="L64" class="LineNr"> 64 </span> curr-file:num <span class="Special"><-</span> get curr, <span class="Constant">file:offset</span> +<span id="L65" class="LineNr"> 65 </span> <span class="Delimiter">{</span> +<span id="L66" class="LineNr"> 66 </span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> queens +<span id="L67" class="LineNr"> 67 </span> <span class="Conceal">¦</span> q:<a href='nqueens.mu.html#L6'>square</a> <span class="Special"><-</span> first queens +<span id="L68" class="LineNr"> 68 </span> <span class="Conceal">¦</span> qfile:num <span class="Special"><-</span> get q, <span class="Constant">file:offset</span> +<span id="L69" class="LineNr"> 69 </span> <span class="Conceal">¦</span> file-match?:bool <span class="Special"><-</span> equal curr-file, qfile +<span id="L70" class="LineNr"> 70 </span> <span class="Conceal">¦</span> <span class="muControl">return-if</span> file-match?, <span class="Constant">1/conflict-found</span> +<span id="L71" class="LineNr"> 71 </span> <span class="Conceal">¦</span> queens <span class="Special"><-</span> <a href='064list.mu.html#L25'>rest</a> queens +<span id="L72" class="LineNr"> 72 </span> <span class="Conceal">¦</span> <span class="muControl">loop</span> +<span id="L73" class="LineNr"> 73 </span> <span class="Delimiter">}</span> +<span id="L74" class="LineNr"> 74 </span> <span class="muControl">return</span> <span class="Constant">0/no-conflict-found</span> +<span id="L75" class="LineNr"> 75 </span>] +<span id="L76" class="LineNr"> 76 </span> +<span id="L77" class="LineNr"> 77 </span><span class="muRecipe">def</span> <a href='nqueens.mu.html#L77'>conflicting-diagonal?</a> curr:<a href='nqueens.mu.html#L6'>square</a>, queens:&:<a href='064list.mu.html#L6'>list</a>:<a href='nqueens.mu.html#L6'>square</a><span class="muRecipe"> -> </span>result:bool [ +<span id="L78" class="LineNr"> 78 </span> <span class="Constant">local-scope</span> +<span id="L79" class="LineNr"> 79 </span> <span class="Constant">load-ingredients</span> +<span id="L80" class="LineNr"> 80 </span> curr-rank:num <span class="Special"><-</span> get curr, <span class="Constant">rank:offset</span> +<span id="L81" class="LineNr"> 81 </span> curr-file:num <span class="Special"><-</span> get curr, <span class="Constant">file:offset</span> +<span id="L82" class="LineNr"> 82 </span> <span class="Delimiter">{</span> +<span id="L83" class="LineNr"> 83 </span> <span class="Conceal">¦</span> <span class="muControl">break-unless</span> queens +<span id="L84" class="LineNr"> 84 </span> <span class="Conceal">¦</span> q:<a href='nqueens.mu.html#L6'>square</a> <span class="Special"><-</span> first queens +<span id="L85" class="LineNr"> 85 </span> <span class="Conceal">¦</span> qrank:num <span class="Special"><-</span> get q, <span class="Constant">rank:offset</span> +<span id="L86" class="LineNr"> 86 </span> <span class="Conceal">¦</span> qfile:num <span class="Special"><-</span> get q, <span class="Constant">file:offset</span> +<span id="L87" class="LineNr"> 87 </span> <span class="Conceal">¦</span> rank-delta:num <span class="Special"><-</span> subtract qrank, curr-rank +<span id="L88" class="LineNr"> 88 </span> <span class="Conceal">¦</span> file-delta:num <span class="Special"><-</span> subtract qfile, curr-file +<span id="L89" class="LineNr"> 89 </span> <span class="Conceal">¦</span> rank-delta <span class="Special"><-</span> <a href='070table.mu.html#L103'>abs</a> rank-delta +<span id="L90" class="LineNr"> 90 </span> <span class="Conceal">¦</span> file-delta <span class="Special"><-</span> <a href='070table.mu.html#L103'>abs</a> file-delta +<span id="L91" class="LineNr"> 91 </span> <span class="Conceal">¦</span> diagonal-match?:bool <span class="Special"><-</span> equal rank-delta, file-delta +<span id="L92" class="LineNr"> 92 </span> <span class="Conceal">¦</span> <span class="muControl">return-if</span> diagonal-match?, <span class="Constant">1/conflict-found</span> +<span id="L93" class="LineNr"> 93 </span> <span class="Conceal">¦</span> queens <span class="Special"><-</span> <a href='064list.mu.html#L25'>rest</a> queens +<span id="L94" class="LineNr"> 94 </span> <span class="Conceal">¦</span> <span class="muControl">loop</span> +<span id="L95" class="LineNr"> 95 </span> <span class="Delimiter">}</span> +<span id="L96" class="LineNr"> 96 </span> <span class="muControl">return</span> <span class="Constant">0/no-conflict-found</span> +<span id="L97" class="LineNr"> 97 </span>] +<span id="L98" class="LineNr"> 98 </span> +<span id="L99" class="LineNr"> 99 </span><span class="muRecipe">def</span> <a href='nqueens.mu.html#L99'>main</a> [ +<span id="L100" class="LineNr">100 </span> <a href='nqueens.mu.html#L11'>nqueens</a><span class="Constant"> 4</span> +<span id="L101" class="LineNr">101 </span> $dump-trace <span class="Constant">[app]</span> +<span id="L102" class="LineNr">102 </span>] </pre> </body> </html> diff --git a/nqueens.mu b/nqueens.mu index 87ce90b6..51495009 100644 --- a/nqueens.mu +++ b/nqueens.mu @@ -36,7 +36,7 @@ def nqueens n:num, queens:&:list:square -> result:num, queens:&:list:square [ { curr-conflicts?:bool <- conflict? curr, queens break-if curr-conflicts? - queens:&:list:square <- push curr, queens + queens <- push curr, queens sub-result:num <- nqueens n, queens result <- add result, sub-result queens <- rest queens @@ -53,10 +53,9 @@ def nqueens n:num, queens:&:list:square -> result:num, queens:&:list:square [ def conflict? curr:square, queens:&:list:square -> result:bool [ local-scope load-ingredients - result1:bool <- conflicting-file? curr, queens - return-if result1, result1 - result2:bool <- conflicting-diagonal? curr, queens - return result2 + result:bool <- conflicting-file? curr, queens + return-if result + result:bool <- conflicting-diagonal? curr, queens ] def conflicting-file? curr:square, queens:&:list:square -> result:bool [ |