28 lines
854 B
Common Lisp
28 lines
854 B
Common Lisp
# Problem statement
|
|
(be dwelling (@Tenants)
|
|
(permute (Baker Cooper Fletcher Miller Smith) @Tenants)
|
|
(not (topFloor Baker @Tenants))
|
|
(not (bottomFloor Cooper @Tenants))
|
|
(not (or ((topFloor Fletcher @Tenants)) ((bottomFloor Fletcher @Tenants))))
|
|
(higherFloor Miller Cooper @Tenants)
|
|
(not (adjacentFloor Smith Fletcher @Tenants))
|
|
(not (adjacentFloor Fletcher Cooper @Tenants)) )
|
|
|
|
# Utility rules
|
|
(be topFloor (@Tenant @Lst)
|
|
(equal (@ @ @ @ @Tenant) @Lst) )
|
|
|
|
(be bottomFloor (@Tenant @Lst)
|
|
(equal (@Tenant @ @ @ @) @Lst) )
|
|
|
|
(be higherFloor (@Tenant1 @Tenant2 @Lst)
|
|
(append @ @Rest @Lst)
|
|
(equal (@Tenant2 . @Higher) @Rest)
|
|
(member @Tenant1 @Higher) )
|
|
|
|
(be adjacentFloor (@Tenant1 @Tenant2 @Lst)
|
|
(append @ @Rest @Lst)
|
|
(or
|
|
((equal (@Tenant1 @Tenant2 . @) @Rest))
|
|
((equal (@Tenant2 @Tenant1 . @) @Rest)) ) )
|