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

puzzle = puzzlepedia.parse("""
name in {Beth, Charles, David, Frank, Jessica, Karen, Taylor}
crime in {guilty*2, innocent*5}
plans in {overheard*3, oblivious*4}

#1: Timeline setup.

#2: 2 criminals. (Implied by dimensions.)

#3: Only one guilty individual overheard plans.
sum(n.guilty and n.overheard for n in name) == 1

#4:
Beth.guilty | Charles.guilty | Jessica.guilty | Karen.guilty

#5:
Charles.guilty | Frank.guilty | Karen.guilty | Taylor.guilty

#6:
Beth.guilty | Frank.guilty | Karen.guilty | Taylor.guilty
if Karen == guilty: David == innocent

#7:
if Beth == guilty:
  Karen == innocent
  Taylor == innocent
if Charles == guilty:
  Taylor == innocent
if Karen == guilty:
  Frank == innocent
  Charles == innocent

#8, 9, 10, 11: Pointless.

#12, 13, 14:
Jessica == overheard
Karen == overheard
Taylor == overheard
""")


 *	guilty	innocent		overheard	oblivious	
Beth	0	1		0	1	
Charles	0	1		0	1	
David	0	1		0	1	
Frank	1	0		0	1	
Jessica	1	0		1	0	
Karen	0	1		1	0	
Taylor	0	1		1	0	

overheard	0	3	
oblivious	2	2	


 *	guilty	innocent		overheard	oblivious	
Beth	0	1		0	1	
Charles	0	1		0	1	
David	0	1		0	1	
Frank	1	0		0	1	
Jessica	1	0		1	0	
Karen	0	1		1	0	
Taylor	0	1		1	0	

overheard	1	2	
oblivious	1	3	


 *	guilty	innocent		overheard	oblivious	
Beth	0	1		0	1	
Charles	0	1		0	1	
David	0	1		0	1	
Frank	1	0		0	1	
Jessica	1	0		1	0	
Karen	0	1		1	0	
Taylor	0	1		1	0	

overheard	2	1	
oblivious	0	4	

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 [ ]: