Witam,
Mam do napisania program w SWI Prolog do anlizy ilości możliwych sposobów przemieszczenia pionków tak, aby zamieniły się miejscami. Pionki mogą poruszać się lewo-prawo, góra-dół w wolne miejsce obok, a także przeskakiwać nad pojedyńczym pionkiem umieszczonym na środku.

Miejsca w których znajdują się pionki są opisane są wierszami, od lewa dół do prawo góra.
Posiadam spis dozwolonych ruchów, jednak mam trudności z dalszą częścią programu.

Z góry dziękuję za pomoc.

title

%ważne: C i C1 oznacza kolor
%
%ruch po krawedziach
ruch(C, 1, 2, s(C, e, X3, X4, X5, X6, X7), s(e, C, X3, X4, X5, X6, X7)).
ruch(C, 1, 3, s(C, X2, e, X4, X5, X6, X7), s(e, X2, C, X4, X5, X6, X7)).
ruch(C, 2, 1, s(e, C, X3, X4, X5, X6, X7), s(C, e, X3, X4, X5, X6, X7)).
ruch(C, 3, 1, s(e, X2, C, X4, X5, X6, X7), s(C, X2, e, X4, X5, X6, X7)).
ruch(C, 6, 7, s(X1, X2, X3, X4, X5, C, e), s(X1, X2, X3, X4, X5, e, C)).
ruch(C, 5, 7, s(X1, X2, X3, X4, C, X6, e), s(X1, X2, X3, X4, e, X6, C)).
ruch(C, 7, 6, s(X1, X2, X3, X4, X5, e, C), s(X1, X2, X3, X4, X5, C, e)).
ruch(C, 7, 5, s(X1, X2, X3, X4, e, X6, C), s(X1, X2, X3, X4, C, X6, e)).

%ruch centralny
ruch(C, 4, 3, s(X1, X2, e, C, X5, X6, X7), s(X1, X2, C, e, X5, X6, X7)).
ruch(C, 4, 2, s(X1, e, X3, C, X5, X6, X7), s(X1, C, X3, e, X5, X6, X7)).
ruch(C, 4, 5, s(X1, X2, X3, C, e, X6, X7), s(X1, X2, X3, e, C, X6, X7)).
ruch(C, 4, 6, s(X1, X2, X3, C, X5, e, X7), s(X1, X2, X3, e, X5, C, X7)).
ruch(C, 3, 4, s(X1, X2, C, e, X5, X6, X7), s(X1, X2, e, C, X5, X6, X7)).
ruch(C, 2, 4, s(X1, C, X3, e, X5, X6, X7), s(X1, e, X3, C, X5, X6, X7)).
ruch(C, 5, 4, s(X1, X2, X3, e, C, X6, X7), s(X1, X2, X3, C, e, X6, X7)).
ruch(C, 6, 4, s(X1, X2, X3, e, X5, C, X7), s(X1, X2, X3, C, X5, e, X7)).

%przeskoki
ruch(C, 2, 6, s(X1, C, X3, X4, X5, e, X7), s(X1, e, X3, X4, X5, C, X7)).
ruch(C, 3, 5, s(X1, X2, C, X4, e, X6, X7), s(X1, X2, e, X4, C, X6, X7)).
ruch(C, 6, 2, s(X1, e, X3, X4, X5, C, X7), s(X1, C, X3, X4, X5, e, X7)).
ruch(C, 5, 3, s(X1, X2, e, X4, C, X6, X7), s(X1, X2, C, X4, e, X6, X7)).

%pomocniczy predykat do zmieniania między kolorami
other(C, C1).
other(C1, C).