Skip to content

Instantly share code, notes, and snippets.

@fabienhinault
Last active September 19, 2025 09:27
Show Gist options
  • Save fabienhinault/a60f2e6cf4eabad91fae051038205fe6 to your computer and use it in GitHub Desktop.
Save fabienhinault/a60f2e6cf4eabad91fae051038205fe6 to your computer and use it in GitHub Desktop.
%% Travel E -> W
travel(e,w).
%% Travel W -> E
travel(w,e).
move([X, X, X, A5, A10], [a1, a2], [Y, Y, Y, A5, A10], 2) :- travel(X,Y).
move([X, X, A2, X, A10], [a1, a5], [Y, Y, A2, Y, A10], 5) :- travel(X,Y).
move([X, X, A2, A5, X], [a1, a10], [Y, Y, A2, A5, Y], 10) :- travel(X,Y).
move([X, A1, X, X, A10], [a2, a5], [Y, A1, Y, Y, A10], 5) :- travel(X,Y).
move([X, A1, X, A5, X], [a2, a10], [Y, A1, Y, A5, Y], 10) :- travel(X,Y).
move([X, A1, A2, X, X], [a5, a10], [Y, A1, A2, Y, Y], 10) :- travel(X,Y).
move([X, X, A2, A5, A10], [a1], [Y, Y, A2, A5, A10], 1) :- travel(X,Y).
move([X, A1, X, A5, A10], [a2], [Y, A1, Y, A5, A10], 2) :- travel(X,Y).
move([X, A1, A2, X, A10], [a5], [Y, A1, A2, Y, A10], 5) :- travel(X,Y).
move([X, A1, A2, A5, X], [a10], [Y, A1, A2, A5, Y], 10) :- travel(X,Y).
solve([e,e,e,e,e], [], 0).
solve(State, [FirstMove|OtherMoves], T) :- move(State, FirstMove, NextState, MoveTime), solve(NextState, OtherMoves, TNext), T is MoveTime + TNext.
%| ?- length(X, 5), solve([w,w,w,w,w], X, T), T = 17.
%
%T = 17
%X = [[a1,a2],[a1],[a5,a10],[a2],[a1,a2]] ? a
%
%T = 17
%X = [[a1,a2],[a2],[a5,a10],[a1],[a1,a2]]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment