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