clpz:monotonic.

range(X..Y)      --> number(X), "-", number(Y).
file(Ranges,IDs) --> sequence(range,"\n",Ranges), "\n\n", sequence(number,"\n",IDs).

union(X,Y,X\/Y).
input(Range,IDs) :- phrase_from_file(file([R|Rs],[I|Is]),"i/05.in"), foldl(union,Rs,R,Range), foldl(union,Is,I,IDs).

solve(P1,P2) :- input(Range,IDs), Fresh in Range, fd_size(Fresh,P2), Fresh in IDs, fd_size(Fresh,P1).
test         :- make_test(day(5),solve,529,344260049617193).


As I am left reeling from yesterday, it's nice to have a very easy day with clpz!


~/aoc25pl/05