Escape from Zurg
Joel Reymont
joelr1@REDACTED
Thu Jan 12 00:29:21 CET 2006
Here's another Prolog riddle from http://web.engr.oregonstate.edu/
~erwig/zurg/.
Please help me translate it!
Thanks, Joel
P.S.
/* The Zurg Riddle */
time(buzz,5).
time(woody,10).
time(rex,20).
time(hamm,25).
toys([buzz,hamm,rex,woody]).
cost([],0) :- !.
cost([X|L],C) :-
time(X,S),
cost(L,D),
C is max(S,D).
split(L,[X,Y],M) :-
member(X,L),
member(Y,L),
compare(<,X,Y),
subtract(L,[X,Y],M).
move(st(l,L1),st(r,L2),r(M),D) :-
split(L1,M,L2),
cost(M,D).
move(st(r,L1),st(l,L2),l(X),D) :-
toys(T),
subtract(T,L1,R),
member(X,R),
merge_set([X],L1,L2),
time(X,D).
trans(st(r,[]),st(r,[]),[],0).
trans(S,U,L,D) :-
move(S,T,M,X),
trans(T,U,N,Y),
append([M],N,L),
D is X + Y.
cross(M,D) :-
toys(T),
trans(st(l,T),st(r,[]),M,D0),
D0=<D.
solution(M) :- cross(M,60).
--
http://wagerlabs.com/
More information about the erlang-questions
mailing list