about summary refs log tree commit diff stats
path: root/sandbox/007-sandbox-delete.mu
Commit message (Expand)AuthorAgeFilesLines
* 3902 - drop redundant redraw of recipe side on F4Kartik K. Agaram2017-06-091-0/+1
* 3860 - stop buffering the screen in termboxKartik K. Agaram2017-05-181-2/+0
* 3854Kartik K. Agaram2017-05-131-0/+2
* 3824 - experiment: stop buffering in termboxKartik K. Agaram2017-04-161-2/+0
* 3705 - switch to tested file-system primitivesKartik K. Agaram2016-12-111-16/+26
* 3656Kartik K. Agaram2016-11-101-1/+1
* 3552Kartik K. Agaram2016-10-221-1/+1
* 3490Kartik K. Agaram2016-10-091-24/+24
* 3489Kartik K. Agaram2016-10-081-24/+24
* 3457Kartik K. Agaram2016-10-061-24/+24
* 3445Kartik K. Agaram2016-10-061-16/+16
* 3429 - standardize Mu scenariosKartik K. Agaram2016-09-281-25/+25
* 3396Kartik K. Agaram2016-09-171-29/+29
* 3391 - type abbreviations everywhereKartik K. Agaram2016-09-171-39/+39
* 3337 - first use of type abbreviations: textKartik K. Agaram2016-09-121-10/+10
* 3054 - keep cursor stable on resize in sandbox/Kartik K. Agaram2016-06-121-5/+5
* 2983 - migrate buttons over to sandbox/Kartik K. Agaram2016-05-191-127/+133
* 2953 - use pgup/pgdn to scroll through sandboxesKartik K. Agaram2016-05-111-6/+6
* 2864 - replace all address:shared with just addressKartik K. Agaram2016-04-241-33/+33
* 2861 - 'maybe-convert' no longer returns addressKartik K. Agaram2016-04-231-1/+1
* 2854 - purge get-address from sandbox/ appKartik K. Agaram2016-04-221-15/+36
* 2735 - define recipes using 'def'Kartik K. Agaram2016-03-081-4/+4
* 2608 - fix-up tests in sandbox/ appKartik K. Agaram2016-01-271-12/+4
* 2594 - bugfixes: managing state when deletingKartik K. Agaram2016-01-231-2/+213
* 2590 - support scrolling through sandboxesKartik K. Agaram2016-01-221-1/+1
* 2585 - label sandboxes with a numberKartik K. Agaram2016-01-221-3/+3
* 2576 - distinguish allocated addresses from othersKartik K. Agaram2016-01-191-9/+9
* support immutability checks in sandbox/ appKartik K. Agaram2015-12-151-1/+1
* 2428 - sandbox/ working againKartik K. Agaram2015-11-121-4/+2
* 2309Kartik K. Agaram2015-10-281-4/+4
* 2260 - start tracing by depth rather than labelKartik K. Agaram2015-10-061-1/+1
* 2183 - environment + external editor using tmuxKartik K. Agaram2015-09-121-0/+108
s="p">: #080808; } body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color: #080808; } * { font-size: 12pt; font-size: 1em; } .muRecipe { color: #ff8700; } .muData { color: #ffff00; } .Delimiter { color: #800080; } .Comment { color: #9090ff; } .Constant { color: #00a0a0; } .Special { color: #c00000; } .muControl { color: #c0a020; } --> </style> <script type='text/javascript'> <!-- --> </script> </head> <body> <pre id='vimCodeElement'> <span class="Comment"># <a href="http://rosettacode.org/wiki/N-queens_problem">http://rosettacode.org/wiki/N-queens_problem</a></span> <span class="Comment"># port of the Arc solution at <a href="http://arclanguage.org/item?id=19743">http://arclanguage.org/item?id=19743</a></span> <span class="muData">container</span> square [ rank:number file:number ] <span class="muRecipe">def</span> nqueens n:number, queens:address:list:square<span class="muRecipe"> -&gt; </span>result:number [ <span class="Constant">local-scope</span> <span class="Constant">load-ingredients</span> <span class="Comment"># if 'queens' is already long enough, print it and return</span> added-so-far:number<span class="Special"> &lt;- </span>length queens <span class="Delimiter">{</span> done?:boolean<span class="Special"> &lt;- </span>greater-or-equal added-so-far, n <span class="muControl">break-unless</span> done? stash queens <span class="muControl">return</span> <span class="Constant">1</span> <span class="Delimiter">}</span> <span class="Comment"># still work to do</span> next-rank:number<span class="Special"> &lt;- </span>copy <span class="Constant">0</span> <span class="Delimiter">{</span> <span class="muControl">break-unless</span> queens first:square<span class="Special"> &lt;- </span>first queens existing-rank:number<span class="Special"> &lt;- </span>get first, <span class="Constant">rank:offset</span> next-rank<span class="Special"> &lt;- </span>add existing-rank, <span class="Constant">1</span> <span class="Delimiter">}</span> result<span class="Special"> &lt;- </span>copy <span class="Constant">0</span> next-file:number<span class="Special"> &lt;- </span>copy <span class="Constant">0</span> <span class="Delimiter">{</span> done?:boolean<span class="Special"> &lt;- </span>greater-or-equal next-file, n <span class="muControl">break-if</span> done? curr:square<span class="Special"> &lt;- </span>merge next-rank, next-file <span class="Delimiter">{</span> curr-conflicts?:boolean<span class="Special"> &lt;- </span>conflict? curr, queens <span class="muControl">break-if</span> curr-conflicts? new-queens:address:list:square<span class="Special"> &lt;- </span>push curr, queens sub-result:number<span class="Special"> &lt;- </span>nqueens n, new-queens result<span class="Special"> &lt;- </span>add result, sub-result <span class="Delimiter">}</span> next-file<span class="Special"> &lt;- </span>add next-file, <span class="Constant">1</span> <span class="muControl">loop</span> <span class="Delimiter">}</span> ] <span class="muRecipe">def</span> conflict? curr:square, queens:address:list:square<span class="muRecipe"> -&gt; </span>result:boolean [ <span class="Constant">local-scope</span> <span class="Constant">load-ingredients</span> result1:boolean<span class="Special"> &lt;- </span>conflicting-file? curr, queens <span class="muControl">reply-if</span> result1, result1 result2:boolean<span class="Special"> &lt;- </span>conflicting-diagonal? curr, queens <span class="muControl">reply</span> result2 ] <span class="muRecipe">def</span> conflicting-file? curr:square, queens:address:list:square<span class="muRecipe"> -&gt; </span>result:boolean [ <span class="Constant">local-scope</span> <span class="Constant">load-ingredients</span> curr-file:number<span class="Special"> &lt;- </span>get curr, <span class="Constant">file:offset</span> <span class="Delimiter">{</span> <span class="muControl">break-unless</span> queens q:square<span class="Special"> &lt;- </span>first queens qfile:number<span class="Special"> &lt;- </span>get q, <span class="Constant">file:offset</span> file-match?:boolean<span class="Special"> &lt;- </span>equal curr-file, qfile <span class="muControl">reply-if</span> file-match?, <span class="Constant">1/conflict-found</span> queens<span class="Special"> &lt;- </span>rest queens <span class="muControl">loop</span> <span class="Delimiter">}</span> <span class="muControl">reply</span> <span class="Constant">0/no-conflict-found</span> ] <span class="muRecipe">def</span> conflicting-diagonal? curr:square, queens:address:list:square<span class="muRecipe"> -&gt; </span>result:boolean [ <span class="Constant">local-scope</span> <span class="Constant">load-ingredients</span> curr-rank:number<span class="Special"> &lt;- </span>get curr, <span class="Constant">rank:offset</span> curr-file:number<span class="Special"> &lt;- </span>get curr, <span class="Constant">file:offset</span> <span class="Delimiter">{</span> <span class="muControl">break-unless</span> queens q:square<span class="Special"> &lt;- </span>first queens qrank:number<span class="Special"> &lt;- </span>get q, <span class="Constant">rank:offset</span> qfile:number<span class="Special"> &lt;- </span>get q, <span class="Constant">file:offset</span> rank-delta:number<span class="Special"> &lt;- </span>subtract qrank, curr-rank file-delta:number<span class="Special"> &lt;- </span>subtract qfile, curr-file rank-delta<span class="Special"> &lt;- </span>abs rank-delta file-delta<span class="Special"> &lt;- </span>abs file-delta diagonal-match?:boolean<span class="Special"> &lt;- </span>equal rank-delta, file-delta <span class="muControl">reply-if</span> diagonal-match?, <span class="Constant">1/conflict-found</span> queens<span class="Special"> &lt;- </span>rest queens <span class="muControl">loop</span> <span class="Delimiter">}</span> <span class="muControl">reply</span> <span class="Constant">0/no-conflict-found</span> ] </pre> </body> </html> <!-- vim: set foldmethod=manual : -->