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

puzzle = puzzlepedia.parse("""
location in {A, B, C, D, E, F, G}
captive in {yes*1, no*6}

def locate(a, b):
  return (a | b) - (a & b)

#1:
s1 = sum(l == yes for l in locate({A, E, F}, {A, B, C, D})) == 1

#2:
s2 = sum(l == yes for l in {G, F} | {A, B}) == 1

#3:
s3 = sum(l == yes for l in locate({F, G}, {A, B, C, E, F, G})) == 1

#4:
s4 = sum(l == yes for l in locate({A, B, C, D}, {B, G, C, D})) == 1

#5:
s5 = sum(l == yes for l in locate({A, B}, {A, E, F})) == 1

statements = [s1, s2, s3, s4, s5]
sum(statements) == 4

for i, s in enumerate(statements):
  print('#%s is' % i, s)
""")


#0 is True == ((location["F"].captive["yes"] + location["B"].captive["yes"] + location["C"].captive["yes"] + location["D"].captive["yes"] + location["E"].captive["yes"]) == 1)
#1 is True == ((location["B"].captive["yes"] + location["G"].captive["yes"] + location["A"].captive["yes"] + location["F"].captive["yes"]) == 1)
#2 is True == ((location["E"].captive["yes"] + location["A"].captive["yes"] + location["B"].captive["yes"] + location["C"].captive["yes"]) == 1)
#3 is False == ((location["G"].captive["yes"] + location["A"].captive["yes"]) == 1)
#4 is True == ((location["B"].captive["yes"] + location["E"].captive["yes"] + location["F"].captive["yes"]) == 1)

In [ ]: