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

puzzle = puzzlepedia.parse("""
name in {Beth, Charles, David, Frank, Jessica, Karen, Taylor}
magazine in {CI, FF, FW, FD, HW, PS, VH}
time in {1, 2, 3, 4}
crime in {innocent, guilty}

#1a: Killer acted alone.
sum(n.guilty for n in name) == 1

#1b: BFJT sub to CI, FF, FW, VH
bfjt = [Beth, Frank, Jessica, Taylor]
subs = [CI, FF, FW, VH]
for n in bfjt:
  any(n[s] for s in subs)

#2: one of these is true
(Charles == FD) or (David == HW) or (Karen == PS)
(Beth == CI) or (Frank == FF) or (Jessica == VH) or (Taylor == FW)

#3a: max 2 people per time
for i in time:
  sum(n[i] for n in name) <= 2

#3b: Knife @ 2:30 - 3:30
for n in name:
  if n.guilty: n == 3

#4:
if Beth == FF: Taylor == VH
if Taylor == VH: Karen != HW

#5:
if Charles == PS: Karen == HW

#6:
if Taylor == FF: Jessica == CI

#7:
(Charles == PS) or (Jessica == CI) or (Taylor == FF)

#8:
if Beth.innocent:
  Beth == 4
  HW == 4

#9:
if Charles.innocent:
  Charles == 4
  FW == 4

#10:
if David.innocent:
  David == 4
  FD == 4

#11:
if Frank.innocent:
  Frank == 2

#12:
if Jessica.innocent:
  Jessica == 3
  FW != 3
  HW != 3

#13:
if Karen.innocent:
  Karen == 2

#14:
if Taylor.innocent:
  Taylor == 1
""")


Widget Javascript not detected.  It may not be installed properly. Did you enable the widgetsnbextension? If not, then run "jupyter nbextension enable --py --sys-prefix widgetsnbextension"

In [ ]: