-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpuzzle.py
55 lines (44 loc) · 1.27 KB
/
puzzle.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
from logic import *
people = ["Gilderoy", "Pomona", "Minerva", "Horace"]
houses = ["Gryffindor", "Hufflepuff", "Ravenclaw", "Slytherin"]
symbols = []
knowledge = And()
for person in people:
for house in houses:
symbols.append(Symbol(f"{person}{house}"))
# Each person belongs to a house.
for person in people:
knowledge.add(Or(
Symbol(f"{person}Gryffindor"),
Symbol(f"{person}Hufflepuff"),
Symbol(f"{person}Ravenclaw"),
Symbol(f"{person}Slytherin")
))
# Only one house per person.
for person in people:
for h1 in houses:
for h2 in houses:
if h1 != h2:
knowledge.add(
Implication(Symbol(f"{person}{h1}"), Not(Symbol(f"{person}{h2}")))
)
# Only one person per house.
for house in houses:
for p1 in people:
for p2 in people:
if p1 != p2:
knowledge.add(
Implication(Symbol(f"{p1}{house}"), Not(Symbol(f"{p2}{house}")))
)
knowledge.add(
Or(Symbol("GilderoyGryffindor"), Symbol("GilderoyRavenclaw"))
)
knowledge.add(
Not(Symbol("PomonaSlytherin"))
)
knowledge.add(
Symbol("MinervaGryffindor")
)
for symbol in symbols:
if model_check(knowledge, symbol):
print(symbol)