Solve a Numbrix puzzle: Difference between revisions
Content added Content deleted
m (→{{header|Phix}}: deserved a complete rewrite, added 3rd & 4th puzzle, use pygments) |
|||
Line 2,207: | Line 2,207: | ||
=={{header|Phix}}== |
=={{header|Phix}}== |
||
<!-- |
<!--(phixonline)--> |
||
<syntaxhighlight lang="phix"> |
|||
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span> |
|||
with javascript_semantics |
|||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">board</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">knownx</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">knowny</span> |
|||
include sets.e |
|||
sequence board, placed, px, py |
|||
<span style="color: #004080;">integer</span> <span style="color: #000000;">size</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">limit</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">nchars</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">tries</span> |
|||
integer w, h, limit, missing |
|||
<span style="color: #004080;">string</span> <span style="color: #000000;">fmt</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">blank</span> |
|||
bool solved |
|||
<span style="color: #008080;">constant</span> <span style="color: #000000;">ROW</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">COL</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">2</span> |
|||
function get_moves(integer n) |
|||
<span style="color: #008080;">constant</span> <span style="color: #000000;">moves</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{{-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">}}</span> |
|||
sequence res = {} |
|||
integer x = px[n], y = py[n] |
|||
<span style="color: #008080;">function</span> <span style="color: #000000;">onboard</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">row</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">col</span><span style="color: #0000FF;">)</span> |
|||
if x>1 and board[y,x-1]=0 then res &= {{x-1,y}} end if |
|||
<span style="color: #008080;">return</span> <span style="color: #000000;">row</span><span style="color: #0000FF;">>=</span><span style="color: #000000;">1</span> <span style="color: #008080;">and</span> <span style="color: #000000;">row</span><span style="color: #0000FF;"><=</span><span style="color: #000000;">size</span> <span style="color: #008080;">and</span> <span style="color: #000000;">col</span><span style="color: #0000FF;">>=</span><span style="color: #000000;">nchars</span> <span style="color: #008080;">and</span> <span style="color: #000000;">col</span><span style="color: #0000FF;"><=</span><span style="color: #000000;">nchars</span><span style="color: #0000FF;">*</span><span style="color: #000000;">size</span> |
|||
if x<w and board[y,x+1]=0 then res &= {{x+1,y}} end if |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span> |
|||
if y>1 and board[y-1,x]=0 then res &= {{x,y-1}} end if |
|||
if y<h and board[y+1,x]=0 then res &= {{x,y+1}} end if |
|||
<span style="color: #008080;">function</span> <span style="color: #000000;">solve</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">row</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">col</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">)</span> |
|||
return res |
|||
<span style="color: #004080;">integer</span> <span style="color: #000000;">nrow</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">ncol</span> |
|||
end function |
|||
<span style="color: #000000;">tries</span><span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">></span><span style="color: #000000;">limit</span> <span style="color: #008080;">then</span> <span style="color: #008080;">return</span> <span style="color: #000000;">1</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
procedure solve() |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">knownx</span><span style="color: #0000FF;">[</span><span style="color: #000000;">n</span><span style="color: #0000FF;">]</span> <span style="color: #008080;">then</span> |
|||
if missing=0 then |
|||
<span style="color: #008080;">for</span> <span style="color: #000000;">move</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">moves</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span> |
|||
solved = true |
|||
<span style="color: #000000;">nrow</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">row</span><span style="color: #0000FF;">+</span><span style="color: #000000;">moves</span><span style="color: #0000FF;">[</span><span style="color: #000000;">move</span><span style="color: #0000FF;">][</span><span style="color: #000000;">ROW</span><span style="color: #0000FF;">]</span> |
|||
else |
|||
<span style="color: #000000;">ncol</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">col</span><span style="color: #0000FF;">+</span><span style="color: #000000;">moves</span><span style="color: #0000FF;">[</span><span style="color: #000000;">move</span><span style="color: #0000FF;">][</span><span style="color: #000000;">COL</span><span style="color: #0000FF;">]*</span><span style="color: #000000;">nchars</span> |
|||
-- scan for next to place, which will be the lowest |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">nrow</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">knownx</span><span style="color: #0000FF;">[</span><span style="color: #000000;">n</span><span style="color: #0000FF;">]</span> |
|||
-- of those with either n+1 or n-1 already placed, |
|||
<span style="color: #008080;">and</span> <span style="color: #000000;">ncol</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">knowny</span><span style="color: #0000FF;">[</span><span style="color: #000000;">n</span><span style="color: #0000FF;">]</span> <span style="color: #008080;">then</span> |
|||
-- checking that all needed can still be placed. |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">solve</span><span style="color: #0000FF;">(</span><span style="color: #000000;">nrow</span><span style="color: #0000FF;">,</span><span style="color: #000000;">ncol</span><span style="color: #0000FF;">,</span><span style="color: #000000;">n</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span> <span style="color: #008080;">return</span> <span style="color: #000000;">1</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
integer place |
|||
<span style="color: #008080;">exit</span> |
|||
sequence moves |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
for n=limit to 1 by -1 do |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span> |
|||
if not placed[n] then |
|||
<span style="color: #008080;">return</span> <span style="color: #000000;">0</span> |
|||
bool plus1 = false |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
if n<limit and placed[n+1] then |
|||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">wmoves</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{}</span> |
|||
place = n |
|||
<span style="color: #008080;">for</span> <span style="color: #000000;">move</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">moves</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span> |
|||
plus1 = true |
|||
<span style="color: #000000;">nrow</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">row</span><span style="color: #0000FF;">+</span><span style="color: #000000;">moves</span><span style="color: #0000FF;">[</span><span style="color: #000000;">move</span><span style="color: #0000FF;">][</span><span style="color: #000000;">ROW</span><span style="color: #0000FF;">]</span> |
|||
moves = get_moves(n+1) |
|||
<span style="color: #000000;">ncol</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">col</span><span style="color: #0000FF;">+</span><span style="color: #000000;">moves</span><span style="color: #0000FF;">[</span><span style="color: #000000;">move</span><span style="color: #0000FF;">][</span><span style="color: #000000;">COL</span><span style="color: #0000FF;">]*</span><span style="color: #000000;">nchars</span> |
|||
if length(moves)=0 then |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">onboard</span><span style="color: #0000FF;">(</span><span style="color: #000000;">nrow</span><span style="color: #0000FF;">,</span><span style="color: #000000;">ncol</span><span style="color: #0000FF;">)</span> |
|||
return -- fail/backtrack |
|||
<span style="color: #008080;">and</span> <span style="color: #000000;">board</span><span style="color: #0000FF;">[</span><span style="color: #000000;">nrow</span><span style="color: #0000FF;">][</span><span style="color: #000000;">ncol</span><span style="color: #0000FF;">]=</span><span style="color: #008000;">'.'</span> <span style="color: #008080;">then</span> |
|||
end if |
|||
<span style="color: #000000;">board</span><span style="color: #0000FF;">[</span><span style="color: #000000;">nrow</span><span style="color: #0000FF;">][</span><span style="color: #000000;">ncol</span><span style="color: #0000FF;">-</span><span style="color: #000000;">nchars</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">..</span><span style="color: #000000;">ncol</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">fmt</span><span style="color: #0000FF;">,</span><span style="color: #000000;">n</span><span style="color: #0000FF;">)</span> |
|||
end if |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">solve</span><span style="color: #0000FF;">(</span><span style="color: #000000;">nrow</span><span style="color: #0000FF;">,</span><span style="color: #000000;">ncol</span><span style="color: #0000FF;">,</span><span style="color: #000000;">n</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span> <span style="color: #008080;">return</span> <span style="color: #000000;">1</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
if n>1 and placed[n-1] then |
|||
<span style="color: #000000;">board</span><span style="color: #0000FF;">[</span><span style="color: #000000;">nrow</span><span style="color: #0000FF;">][</span><span style="color: #000000;">ncol</span><span style="color: #0000FF;">-</span><span style="color: #000000;">nchars</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">..</span><span style="color: #000000;">ncol</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">blank</span> |
|||
place = n |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
if plus1 then |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span> |
|||
moves = intersection(moves,get_moves(n-1)) |
|||
<span style="color: #008080;">return</span> <span style="color: #000000;">0</span> |
|||
else |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span> |
|||
moves = get_moves(n-1) |
|||
end if |
|||
<span style="color: #008080;">procedure</span> <span style="color: #000000;">Numbrix</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">)</span> |
|||
if length(moves)=0 then |
|||
<span style="color: #004080;">integer</span> <span style="color: #000000;">y</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">ch2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">k</span> |
|||
return -- fail/backtrack |
|||
<span style="color: #004080;">atom</span> <span style="color: #000000;">t0</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">time</span><span style="color: #0000FF;">()</span> |
|||
end if |
|||
<span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">split</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">,</span><span style="color: #008000;">'\n'</span><span style="color: #0000FF;">)</span> |
|||
end if |
|||
<span style="color: #000000;">size</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">)</span> |
|||
end if |
|||
<span style="color: #000000;">limit</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">size</span><span style="color: #0000FF;">*</span><span style="color: #000000;">size</span> |
|||
end for |
|||
<span style="color: #000000;">nchars</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">" %d"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">limit</span><span style="color: #0000FF;">))</span> |
|||
missing -= 1 |
|||
<span style="color: #000000;">fmt</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">" %%%dd"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">nchars</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span> |
|||
for m in moves do |
|||
<span style="color: #000000;">blank</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #008000;">'.'</span><span style="color: #0000FF;">,</span><span style="color: #000000;">nchars</span><span style="color: #0000FF;">)</span> |
|||
integer {x,y} = m |
|||
<span style="color: #000000;">board</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #008000;">' '</span><span style="color: #0000FF;">,</span><span style="color: #000000;">size</span><span style="color: #0000FF;">*</span><span style="color: #000000;">nchars</span><span style="color: #0000FF;">),</span><span style="color: #000000;">size</span><span style="color: #0000FF;">)</span> |
|||
px[place] = x |
|||
<span style="color: #000000;">knownx</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">limit</span><span style="color: #0000FF;">)</span> |
|||
py[place] = y |
|||
<span style="color: #000000;">knowny</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">limit</span><span style="color: #0000FF;">)</span> |
|||
board[y,x] = place |
|||
<span style="color: #008080;">for</span> <span style="color: #000000;">x</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">size</span> <span style="color: #008080;">do</span> |
|||
placed[place] = true |
|||
<span style="color: #008080;">for</span> <span style="color: #000000;">y</span><span style="color: #0000FF;">=</span><span style="color: #000000;">nchars</span> <span style="color: #008080;">to</span> <span style="color: #000000;">size</span><span style="color: #0000FF;">*</span><span style="color: #000000;">nchars</span> <span style="color: #008080;">by</span> <span style="color: #000000;">nchars</span> <span style="color: #008080;">do</span> |
|||
solve() |
|||
<span style="color: #000000;">ch</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">x</span><span style="color: #0000FF;">][</span><span style="color: #000000;">y</span><span style="color: #0000FF;">]</span> |
|||
if solved then return end if |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">!=</span><span style="color: #008000;">'.'</span> <span style="color: #008080;">then</span> |
|||
placed[place] = false |
|||
<span style="color: #000000;">k</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">-</span><span style="color: #008000;">'0'</span> |
|||
board[y,x] = 0 |
|||
<span style="color: #000000;">ch2</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">x</span><span style="color: #0000FF;">][</span><span style="color: #000000;">y</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span> |
|||
end for |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">ch2</span><span style="color: #0000FF;">!=</span><span style="color: #008000;">' '</span> <span style="color: #008080;">then</span> |
|||
missing += 1 |
|||
<span style="color: #000000;">k</span> <span style="color: #0000FF;">+=</span> <span style="color: #0000FF;">(</span><span style="color: #000000;">ch2</span><span style="color: #0000FF;">-</span><span style="color: #008000;">'0'</span><span style="color: #0000FF;">)*</span><span style="color: #000000;">10</span> |
|||
end if |
|||
<span style="color: #000000;">board</span><span style="color: #0000FF;">[</span><span style="color: #000000;">x</span><span style="color: #0000FF;">][</span><span style="color: #000000;">y</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">ch2</span> |
|||
end procedure |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #000000;">knownx</span><span style="color: #0000FF;">[</span><span style="color: #000000;">k</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">x</span> |
|||
procedure Numbrix(string s) |
|||
<span style="color: #000000;">knowny</span><span style="color: #0000FF;">[</span><span style="color: #000000;">k</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">y</span> |
|||
atom t0 = time() |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
board = split(s,'\n') |
|||
<span style="color: #000000;">board</span><span style="color: #0000FF;">[</span><span style="color: #000000;">x</span><span style="color: #0000FF;">][</span><span style="color: #000000;">y</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">ch</span> |
|||
for i,line in board do |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span> |
|||
board[i] = apply(split(substitute(line,'.','0')),to_number) |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span> |
|||
end for |
|||
<span style="color: #000000;">tries</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span> |
|||
w = length(board[1]) |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">solve</span><span style="color: #0000FF;">(</span><span style="color: #000000;">knownx</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">],</span><span style="color: #000000;">knowny</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">],</span><span style="color: #000000;">2</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span> |
|||
h = length(board) |
|||
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">join</span><span style="color: #0000FF;">(</span><span style="color: #000000;">board</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">))</span> |
|||
limit = w*h |
|||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\nsolution found in %d tries (%3.2fs)\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">tries</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">time</span><span style="color: #0000FF;">()-</span><span style="color: #000000;">t0</span><span style="color: #0000FF;">})</span> |
|||
placed = repeat(false,limit) |
|||
<span style="color: #008080;">else</span> |
|||
px = repeat(0,limit) |
|||
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"no solutions found\n"</span><span style="color: #0000FF;">)</span> |
|||
py = repeat(0,limit) |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
missing = 0 |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span> |
|||
for x=1 to w do |
|||
for y=1 to h do |
|||
<span style="color: #008080;">constant</span> <span style="color: #000000;">board1</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">""" |
|||
integer byx = board[y][x] |
|||
if byx then |
|||
placed[byx] = true |
|||
px[byx] = x |
|||
py[byx] = y |
|||
else |
|||
missing += 1 |
|||
end if |
|||
end for |
|||
end for |
|||
<span style="color: #000000;">Numbrix</span><span style="color: #0000FF;">(</span><span style="color: #000000;">board1</span><span style="color: #0000FF;">)</span> |
|||
solved = false |
|||
solve() |
|||
<span style="color: #008080;">constant</span> <span style="color: #000000;">board2</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">""" |
|||
printf(1,"%s\n\n",s) |
|||
. . . . . . . . . |
|||
if not solved then |
|||
puts(1,"No solutions\n\n") |
|||
else |
|||
. 33 . . . . . 57 . |
|||
integer nchars = length(sprintf("%d",limit)) |
|||
. 32 . . . . . 56 . |
|||
string fmt = sprintf(" %%%dd",nchars) |
|||
printf(1,"solution found in %s:\n\n",elapsed(time()-t0)) |
|||
. 38 . . . . . 72 . |
|||
board = apply(true,join_by,{board,1,w,{""},{""},{fmt}}) |
|||
. 43 44 47 48 51 76 77 . |
|||
printf(1,"%s\n\n",{join(board,"\n")}) |
|||
end if |
|||
<span style="color: #000000;">Numbrix</span><span style="color: #0000FF;">(</span><span style="color: #000000;">board2</span><span style="color: #0000FF;">)</span> |
|||
end procedure |
|||
<!--</syntaxhighlight>--> |
|||
constant boards = {""" |
|||
. . . . . . . . . |
|||
. . 46 45 . 55 74 . . |
|||
. 38 . . 43 . . 78 . |
|||
. 35 . . . . . 71 . |
|||
. . 33 . . . 59 . . |
|||
. 17 . . . . . 67 . |
|||
. 18 . . 11 . . 64 . |
|||
. . 24 21 . 1 2 . . |
|||
. . . . . . . . .""",""" |
|||
. . . . . . . . . |
|||
. 11 12 15 18 21 62 61 . |
|||
. 6 . . . . . 60 . |
|||
. 33 . . . . . 57 . |
|||
. 32 . . . . . 56 . |
|||
. 37 . 1 . . . 73 . |
|||
. 38 . . . . . 72 . |
|||
. 43 44 47 48 51 76 77 . |
|||
. . . . . . . . .""",""" |
|||
17 . . . 11 . . . 59 |
|||
. 15 . . 6 . . 61 . |
|||
. . 3 . . . 63 . . |
|||
. . . . 66 . . . . |
|||
23 24 . 68 67 78 . 54 55 |
|||
. . . . 72 . . . . |
|||
. . 35 . . . 49 . . |
|||
. 29 . . 40 . . 47 . |
|||
31 . . . 39 . . . 45""",""" |
|||
109 0 0 0 0 0 0 0 0 0 0 0 0 0 43 |
|||
0 0 0 0 0 0 0 65 0 0 0 0 0 0 0 |
|||
0 0 101 100 0 92 0 76 0 68 0 48 3 0 0 |
|||
0 0 102 97 0 0 80 0 74 0 0 49 6 0 0 |
|||
0 0 0 0 0 0 79 0 73 0 0 0 0 0 0 |
|||
0 0 116 0 0 0 0 0 0 0 0 0 10 0 0 |
|||
0 0 0 118 217 0 0 0 0 0 55 52 0 0 0 |
|||
0 121 120 0 0 0 0 213 0 0 0 0 12 35 0 |
|||
0 0 0 166 167 0 0 0 0 0 205 204 0 0 0 |
|||
0 0 162 0 0 0 0 0 0 0 0 0 14 0 0 |
|||
0 0 0 0 0 0 173 0 177 0 0 0 0 0 0 |
|||
0 0 156 153 0 0 150 0 178 0 0 201 16 0 0 |
|||
0 0 155 154 0 144 0 180 0 188 0 200 17 0 0 |
|||
0 0 0 0 0 0 0 183 0 0 0 0 0 0 0 |
|||
135 0 0 0 0 0 0 0 0 0 0 0 0 0 21"""} |
|||
papply(boards,Numbrix) |
|||
</syntaxhighlight> |
|||
{{out}} |
{{out}} |
||
<pre> |
<pre> |
||
. . . . . . . . . |
|||
. . 46 45 . 55 74 . . |
|||
. 38 . . 43 . . 78 . |
|||
. 35 . . . . . 71 . |
|||
. . 33 . . . 59 . . |
|||
. 17 . . . . . 67 . |
|||
. 18 . . 11 . . 64 . |
|||
. . 24 21 . 1 2 . . |
|||
. . . . . . . . . |
|||
solution found in 0.1s: |
|||
49 50 51 52 53 54 75 76 81 |
49 50 51 52 53 54 75 76 81 |
||
48 47 46 45 44 55 74 77 80 |
48 47 46 45 44 55 74 77 80 |
||
Line 2,323: | Line 2,381: | ||
28 25 24 21 10 1 2 3 4 |
28 25 24 21 10 1 2 3 4 |
||
27 26 23 22 9 8 7 6 5 |
27 26 23 22 9 8 7 6 5 |
||
solution found in 580 tries (0.00s) |
|||
. . . . . . . . . |
|||
. 11 12 15 18 21 62 61 . |
|||
. 6 . . . . . 60 . |
|||
. 33 . . . . . 57 . |
|||
. 32 . . . . . 56 . |
|||
. 37 . 1 . . . 73 . |
|||
. 38 . . . . . 72 . |
|||
. 43 44 47 48 51 76 77 . |
|||
. . . . . . . . . |
|||
solution found in 0.0s: |
|||
9 10 13 14 19 20 63 64 65 |
9 10 13 14 19 20 63 64 65 |
||
8 11 12 15 18 21 62 61 66 |
8 11 12 15 18 21 62 61 66 |
||
Line 2,333: | Line 2,403: | ||
40 43 44 47 48 51 76 77 78 |
40 43 44 47 48 51 76 77 78 |
||
41 42 45 46 49 50 81 80 79 |
41 42 45 46 49 50 81 80 79 |
||
solution found in 334 tries (0.00s) |
|||
17 . . . 11 . . . 59 |
|||
. 15 . . 6 . . 61 . |
|||
. . 3 . . . 63 . . |
|||
. . . . 66 . . . . |
|||
23 24 . 68 67 78 . 54 55 |
|||
. . . . 72 . . . . |
|||
. . 35 . . . 49 . . |
|||
. 29 . . 40 . . 47 . |
|||
31 . . . 39 . . . 45 |
|||
solution found in 0.0s: |
|||
17 16 13 12 11 10 9 60 59 |
|||
18 15 14 5 6 7 8 61 58 |
|||
19 20 3 4 65 64 63 62 57 |
|||
22 21 2 1 66 79 80 81 56 |
|||
23 24 69 68 67 78 77 54 55 |
|||
26 25 70 71 72 75 76 53 52 |
|||
27 28 35 36 73 74 49 50 51 |
|||
30 29 34 37 40 41 48 47 46 |
|||
31 32 33 38 39 42 43 44 45 |
|||
109 0 0 0 0 0 0 0 0 0 0 0 0 0 43 |
|||
0 0 0 0 0 0 0 65 0 0 0 0 0 0 0 |
|||
0 0 101 100 0 92 0 76 0 68 0 48 3 0 0 |
|||
0 0 102 97 0 0 80 0 74 0 0 49 6 0 0 |
|||
0 0 0 0 0 0 79 0 73 0 0 0 0 0 0 |
|||
0 0 116 0 0 0 0 0 0 0 0 0 10 0 0 |
|||
0 0 0 118 217 0 0 0 0 0 55 52 0 0 0 |
|||
0 121 120 0 0 0 0 213 0 0 0 0 12 35 0 |
|||
0 0 0 166 167 0 0 0 0 0 205 204 0 0 0 |
|||
0 0 162 0 0 0 0 0 0 0 0 0 14 0 0 |
|||
0 0 0 0 0 0 173 0 177 0 0 0 0 0 0 |
|||
0 0 156 153 0 0 150 0 178 0 0 201 16 0 0 |
|||
0 0 155 154 0 144 0 180 0 188 0 200 17 0 0 |
|||
0 0 0 0 0 0 0 183 0 0 0 0 0 0 0 |
|||
135 0 0 0 0 0 0 0 0 0 0 0 0 0 21 |
|||
solution found in 0.5s: |
|||
109 108 87 86 85 84 83 64 63 62 61 46 45 44 43 |
|||
110 107 88 89 90 91 82 65 66 67 60 47 2 1 42 |
|||
111 106 101 100 99 92 81 76 75 68 59 48 3 4 41 |
|||
112 105 102 97 98 93 80 77 74 69 58 49 6 5 40 |
|||
113 104 103 96 95 94 79 78 73 70 57 50 7 8 39 |
|||
114 115 116 225 224 223 222 221 72 71 56 51 10 9 38 |
|||
123 122 117 118 217 218 219 220 209 208 55 52 11 36 37 |
|||
124 121 120 119 216 215 214 213 210 207 54 53 12 35 34 |
|||
125 164 165 166 167 168 169 212 211 206 205 204 13 32 33 |
|||
126 163 162 161 160 171 170 175 176 191 192 203 14 31 30 |
|||
127 128 157 158 159 172 173 174 177 190 193 202 15 28 29 |
|||
130 129 156 153 152 151 150 179 178 189 194 201 16 27 26 |
|||
131 132 155 154 143 144 149 180 181 188 195 200 17 24 25 |
|||
134 133 138 139 142 145 148 183 182 187 196 199 18 23 22 |
|||
135 136 137 140 141 146 147 184 185 186 197 198 19 20 21 |
|||
</pre> |
</pre> |
||