In [16]:
import forge
from puzzle.puzzlepedia import puzzlepedia

puzzle = puzzlepedia.parse("""
name in {Beth, Charles, David, Frank, Jessica, Karen, Taylor}
weapon in {bookend, candlestick, lamp, paperweight, owl, trivet, vase}
# Revenge == 2 per #5. Anger == 2 per #10?
motive in {anger*2, blackmail, fear, greed, revenge*2}
crime in {innocent*6, guilty}

#1: Setup.

#2: Setup.

#3: 1 killer.

#4:
for w in [lamp, paperweight, trivet]:
  {w} != {anger, blackmail}
for w in [bookend, vase]:
  {w} != {fear, greed}
for w in [candlestick, owl]:
  w != revenge

#5:
David == revenge
Jessica == revenge

#6:
{Jessica} == {bookend, candlestick, owl, vase}

#7:
{Beth, Karen, Taylor} != {fear, greed, revenge}

#8:
if Beth.innocent:
  lamp != greed
  lamp != anger
  lamp != revenge
  Beth != owl

#9:
if Charles.innocent:
  Charles != lamp

#10:
if David.innocent:
  candlestick != anger

#11:
if Frank.innocent:
  Frank != lamp

#12:
if Jessica.innocent:
  Charles != trivet
  Frank != trivet

#13:
if Karen.innocent:
  revenge == bookend

#14:
if Taylor.innocent:
  Karen != blackmail
  Karen != owl
  owl != blackmail
  Frank != fear
""")

In [ ]: