In [19]:
import forge
from puzzle.puzzlepedia import puzzlepedia
puzzle = puzzlepedia.parse("""
date in range(1, 11+1)
name in {Beth, Charles, David, Frank, Jessica, Karen, Taylor, Nolan, Vacant*3}
#1a: Never unoccupied 2 in a row...
# For every pair of days at least one day is not vacant.
for first, second in zip(range(1, 10+1), range(2, 11+1)):
Vacant[first] + Vacant[second] != 2
#1b: ...nor first or last.
Vacant[1] == False
Vacant[11] == False
#2:
Beth.date == Karen.date + 1
Jessica.date == Beth.date + 1
#3:
Frank.date == David.date + 1
Taylor.date == Frank.date + 1
#4:
Charles.date > Frank.date
Charles.date < Nolan.date
#5:
not Karen[1]
for d in range(3, 11+1):
if Karen[d]: Vacant[d - 1] and not any(Vacant[x] for x in range(1, d - 1))
""")
In [ ]: