Maze solving: Difference between revisions
Content added Content deleted
(Emacs Lisp: Avoid non-portable shebang) |
|||
Line 1,438: | Line 1,438: | ||
<lang>size = 20 |
<lang>size = 20 |
||
n = 2 * size + 1 |
n = 2 * size + 1 |
||
endpos = n * n - |
endpos = n * n - 2 |
||
startpos = |
startpos = n + 1 |
||
f = 100 / n |
f = 100 / n |
||
# |
# |
||
Line 1,458: | Line 1,458: | ||
len m[] n * n |
len m[] n * n |
||
# |
# |
||
set_background 000 |
|||
func show_maze . . |
func show_maze . . |
||
clear_screen |
|||
set_color 000 |
|||
draw_rect 100 100 |
|||
for i range len m[] |
for i range len m[] |
||
if m[i] = 0 |
if m[i] = 0 |
||
Line 1,467: | Line 1,467: | ||
. |
. |
||
call draw_square startpos 900 |
call draw_square startpos 900 |
||
sleep 0.001 |
|||
. |
. |
||
offs[] = [ 1 n -1 (-n) ] |
offs[] = [ 1 n -1 (-n) ] |
||
func |
func getposn pos dir . posn . |
||
posn = -1 |
|||
r = pos div n |
|||
c = pos mod n |
|||
if dir = 0 and c <> n - 2 or dir = 1 and r <> n - 2 or dir = 2 and c <> 1 or dir = 3 and r <> 1 |
|||
posn = pos + 2 * offs[dir] |
|||
⚫ | |||
. |
|||
func visited pos . res . |
|||
⚫ | |||
⚫ | |||
call getposn pos dir posn |
|||
if posn <> -1 |
|||
res += m[posn] |
|||
. |
|||
. |
. |
||
. |
. |
||
func m_maze pos . . |
func m_maze pos . . |
||
m[pos] = 0 |
m[pos] = 0 |
||
call show_maze |
|||
repeat |
repeat |
||
call visited pos res |
call visited pos res |
||
until res = 0 |
until res = 0 |
||
dir = random 4 |
dir = random 4 |
||
call getposn pos dir posn |
|||
if m[posn] <> 0 |
if posn <> -1 and m[posn] <> 0 |
||
m[pos + |
m[(pos + posn) div 2] = 0 |
||
call m_maze posn |
call m_maze posn |
||
. |
. |
||
Line 1,491: | Line 1,504: | ||
for i range len m[] |
for i range len m[] |
||
m[i] = 1 |
m[i] = 1 |
||
⚫ | |||
⚫ | |||
⚫ | |||
m[n * i] = 0 |
|||
m[n * i + n - 1] = 0 |
|||
m[n * (n - 1) + i] = 0 |
|||
. |
. |
||
call m_maze startpos |
call m_maze startpos |
||
Line 1,522: | Line 1,529: | ||
call make_maze |
call make_maze |
||
call show_maze |
call show_maze |
||
sleep |
sleep 5 |
||
call solve -1 startpos found</lang> |
call solve -1 startpos found</lang> |
||