All pastes #364863 Raw Edit

Plouj

public text v1 · immutable
#364863 ·published 2007-02-20 13:17 UTC
rendered paste body
/** ---------------------------------------------------------
  holds if the blank (0) is moved right successfully within one row
  ---------------------------------------------------------- */
move_right(CurrentBoard, NewBoard) :-
        append(PrevRows, CurrentRow, R1),
        append(R1, NextRows, CurrentBoard),
        move_right_within_row(CurrentRow, ChangedRow),
        append(PrevRows, ChangedRow, R2),
        append(R2, NextRows, NewBoard).

/** ---------------------------------------------------------
  helper function
  holds if the blank (0) is moved right successfully
  assume only one blank exists
  ---------------------------------------------------------- */
move_right_within_row(CurrentRow, ResultingRow) :-
        append(Start, [0, X | End], CurrentRow),
        append(Start, [X, 0 | End], ResultingRow).

init(d, [
[1,  2,  3,  4],
[5,  6,  7,  8],
[9,  10, 0,  15],
[13, 12, 11, 14]
]).

?- move_right_within_row([9,  10, 0,  15],R).

R = [9, 10, 15, 0] ;

No
?- init(d, S), move_right(S, B).
ERROR: Out of global stack