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

puzzle = puzzlepedia.parse("""
name in {Beth, Charles, David, Frank, Jessica, Karen, Taylor}
design in {diamonds_dots*1, diamonds_stars*1, diamonds_triangles*1, dots_stars*1, dots_triangles*1, stars_triangles*2}
shots in {0, 1*2, 2*2, 3*2}

#1: In setup.

#2:
all(Charles[d] == Taylor[d] for d in design)

#3:
triangles = {diamonds_triangles, dots_triangles, stars_triangles}
# NB: This group contains a duplicate.
sum(t[1] for t in triangles) == 1
sum(t[2] for t in triangles) == 2
sum(t[3] for t in triangles) == 1

#4:
dots = {diamonds_dots, dots_stars, dots_triangles}
# NB: This group does not have the duplicate.
sum(t[0] for t in dots) == 1
sum(t[2] for t in dots) == 1
sum(t[3] for t in dots) == 1

#5:
{Beth, Karen} == {diamonds_stars, dots_stars, stars_triangles}

#6:
# NB: Satisfying this means stars have a duplicate.
for m in [diamonds_dots, diamonds_triangles, dots_triangles]:
  m[1] == 0
  m[3] == 0

#7:
Beth.shots > Charles.shots > 0
Jessica.shots > Karen.shots > 0

#8:
{David} != {diamonds_dots, diamonds_stars, diamonds_triangles}
""")

In [ ]: