特定のマスを特定の歩数目で踏んで迷路を抜けるパズル

【迷路5】https://twitter.com/puzzlegiver_bot/status/277296210212163584
課題:
・入口が左上(0,0)であることをルールに入れているのがイマイチ
・10秒待て!
・’;’ で別解を求めると同じ解が4回表示されてしまう。

【迷路5】https://twitter.com/puzzlegiver_bot/status/277296210212163584
課題:
・入口が左上(0,0)であることをルールに入れているのがイマイチ
・10秒待て!
・’;’ で別解を求めると同じ解が4回表示されてしまう。

append( [], List, List ).
append( [Head|Tail], List, [Head|TailR] ) :- append(Tail, List, TailR).
at( [Head|Tail], (0, Y), Val ) :- at(Head, Y, Val).
at( [Head|Tail], (X, Y), Val ) :- X > 0, X1 is X - 1, at( Tail, (X1, Y), Val ).
at( [Head|Tail], 0, Head ).
at( [Head|Tail], Idx, Val ) :- number(Idx), Idx > 0, Idx1 is Idx - 1, at( Tail, Idx1, Val ).
?- at( [[1,2,3],[4,5],[6,7]], (0,2), 3 ).
%
walk_maze(Q, A) :-
Q = A,
length(Q, M), Q = [H|_],
length(H, N),
walk_maze( Q, A, (M, N), (0, 0), 1 ). %
walk_maze( _, _, (M, N), _, StepEnd ) :- StepEnd is M * N.
walk_maze( Q, A, (M, N), (X, Y), Step ) :-
% number(M), number(N), number(X), number(Y), number(Step),
0 =< X, X < M, 0 =< Y, Y < N,
at( Q, (X, Y), Step ),
StepNext is Step + 1,
( %
X1 is X - 1, walk_maze( Q, A, (M, N), (X1, Y), StepNext );
Y1 is Y - 1, walk_maze( Q, A, (M, N), (X, Y1), StepNext );
X2 is X + 1, walk_maze( Q, A, (M, N), (X2, Y), StepNext );
Y2 is Y + 1, walk_maze( Q, A, (M, N), (X, Y2), StepNext )
).
%
?- walk_maze( [
[ 1, _, _, _, _, 36 ],
[ _, _, _, _, _, _ ],
[ _, _, _, _, _, _ ],
[ _, 9, _,27, _, _ ],
[ _,18, _, _, _, _ ],
[ _, _, _, _, _, _ ] ], Answer ).
/*
Answer = [
[ 1, 2, 3, 4, 35, 36 ],
[ 12, 11, 6, 5, 34, 33 ],
[ 13, 10, 7, 28, 29, 32 ],
[ 14, 9, 8, 27, 30, 31 ],
[ 15, 18, 19, 26, 25, 24 ],
[ 16, 17, 20, 21, 22, 23 ]
]
*/
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX