【迷路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 ] ] */