Home More Samples
```///////////////////////////////////////////////////////////////////////////////
//
// Title: Historic Homes
// Author: Chris Perton
// Publication: Dell Logic Puzzles
// Issue: April, 1998
// Page: 11
// Stars: 2
//
// Each year the Glendale Women's Club sponsors a Historic Homes Tour in which
// five old houses are (with the owners' permission, of course) opened to the
// public. This year the five homes are on different streets (Azalea Drive,
// Crepe Myrtle Court, Jasmine Boulevard, Magnolia Street, and Oleander Road),
// and each was built in a different year (1860, 1870, 1890, 1900, and 1920).
// Can you give the order in which the tour visited the five homes (identifying
// them by street) and match each with its year?
//
// 1. The home on Jasmine is 20 years older than the one on Azalea.
// 2. The third home on the tour was built in 1860.
// 3. The tour visited the home on Magnolia sometime before the one built in 1890.
// 4. The tour visited the home on Oleander (which wasn't the last of the five to
//    be built) sometime before it visited the one on Jasmine, which in turn was
//    seen sometime before the one built in 1900.
//
///////////////////////////////////////////////////////////////////////////////
//
// query:
//          all HistoricHomes(order, age)
//
///////////////////////////////////////////////////////////////////////////////
//
// result:
//
// order = [ {Azalea_Drive} 2, {Crepe_Myrtle_Court} 5, {Jasmine_Boulevard} 4,
//
// age =   [ {Azalea_Drive} 1890, {Crepe_Myrtle_Court} 1900,
//           {Jasmine_Boulevard} 1870, {Magnolia_Street} 1920,
//
///////////////////////////////////////////////////////////////////////////////

local Street = Azalea_Drive | Crepe_Myrtle_Court | Jasmine_Boulevard |

local Order = Street->>[1..5]
local Age = Street->>[1860..1920]

pred HistoricHomes(order::Order, age::Age) iff
age(_) = 1860 &
age(_) = 1870 &
age(_) = 1890 &
age(_) = 1900 &
age(_) = 1920 &

// 1. The home on Jasmine is 20 years older than the one on Azalea.
age(Jasmine_Boulevard) = age(Azalea_Drive) - 20 &

// 2. The third home on the tour was built in 1860.
age(house1860) = 1860 & order(house1860) = 3 &

// 3. The tour visited the home on Magnolia sometime before the one built in 1890.
age(house1890) = 1890 &
order(Magnolia_Street) < order(house1890) &

// 4. The tour visited the home on Oleander (which wasn't the last of the five to
//    be built) sometime before it visited the one on Jasmine, which in turn was
//    seen sometime before the one built in 1900.