Title: The Last Mile
Solved by: Doug Edmunds
Publication: Dell Logic Puzzles
Issue: April, 1998
Page: 34
Stars: 4

Clues

/*
Dell Logic Puzzles 4/98 Edition p34
The Last Mile (4 star)
solved 22 Nov 1999

order: 1 ..4
subjects: biology calculus drama english
days: mon tue wed thu (1..4)
halls: annex conway hammond learning
studytimes: sat_am sat_pm sun_am sun_pm (split into 2 parts)

correct solution
class(DayNumber, Subject, Hall, StudyDay, StudyTime)
class(1, english, annex, sat, am),
class(2, calculus, learning, sat, pm),
class(3, drama, conway, sun, pm),
class(4, biology, hammond, sun, am)
*/

:- use_module(library(fd)).
:- writeln("type: start(Units)").

start(Units) :-

Units =
[
class(1,_,_,_,_),
class(2,_,_,_,_),
class(3,_,_,_,_),
class(4,_,_,_,_)
],

[BI, CA, DR, EN,
AN, CO, HA, LE,
SAT1,SAT2,SUN1,SUN2
] ::[1..4],

Constraints =
[
class(BI,biology, _,_,_),
class(CA,calculus, _,_,_),
class(DR,drama, _,_,_),
class(EN,english, _,_,_),

class(AN,_, annex ,_,_),
class(CO,_, conway ,_,_),
class(HA,_, hammond ,_,_),
class(LE,_, learning ,_,_),

class(SAT1,_, _, sat, am),
class(SAT2,_, _, sat, pm),
class(SUN1,_, _, sun, am),
class(SUN2,_, _, sun, pm)
] ,

%clue1
pm_study(BI,AN,SAT2,SUN2),

%clue2
EN ##CO,
not_conseq(EN,CO),

%clue 3
HA ## 3,
DR ## SUN1,
some_order(HA,DR,SUN1),

%clue #4
on_sat(LE,SAT1, SAT2),
LE ## EN,

%clue 5
CA ## SAT1,

%clue 6
bio_3(BI),

psubset(Constraints, Units),
(foreach(Unit,Units) do writeln (Unit)).

psubset([],_).
psubset([H|T],List) :-
member(H,List),
psubset(T,List).

pm_study(BI,AN,SAT2,SUN2) :- SAT2 #= BI - 1, SUN2 #= AN + 1.
pm_study(BI,AN,SAT2,SUN2) :- SAT2 #= AN + 1, SUN2 #= BI - 1.

not_conseq(EN,CO) :- EN ## CO -1, EN ## CO +1.

some_order(HA,DR,SUN1):- 3 #= DR, HA #=SUN1.
some_order(HA,DR,SUN1):- 3 #= SUN1, HA #=DR.

on_sat(LE,SAT1,SAT2):- LE #= SAT1; LE #= SAT2.

bio_3(BI) :- BI + 3 #= 6; BI +3 #=7.


% © Copyright Doug Edmunds 2000