Puzzle via Logic
In [ ]:
Copied!
from logic import *
from logic import *
In [ ]:
Copied!
people = ["Gilderoy", "Pomona", "Minerva", "Horace"]
houses = ["Gryffindor", "Hufflepuff", "Ravenclaw", "Slytherin"]
people = ["Gilderoy", "Pomona", "Minerva", "Horace"]
houses = ["Gryffindor", "Hufflepuff", "Ravenclaw", "Slytherin"]
In [ ]:
Copied!
symbols = []
symbols = []
In [ ]:
Copied!
knowledge = And()
knowledge = And()
In [ ]:
Copied!
for person in people:
for house in houses:
symbols.append(Symbol(f"{person}{house}"))
for person in people:
for house in houses:
symbols.append(Symbol(f"{person}{house}"))
In [ ]:
Copied!
# 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")
))
# 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")
))
In [ ]:
Copied!
# 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 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}")))
)
In [ ]:
Copied!
# 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}")))
)
# 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}")))
)
In [ ]:
Copied!
knowledge.add(
Or(Symbol("GilderoyGryffindor"), Symbol("GilderoyRavenclaw"))
)
knowledge.add(
Or(Symbol("GilderoyGryffindor"), Symbol("GilderoyRavenclaw"))
)
In [ ]:
Copied!
knowledge.add(
Not(Symbol("PomonaSlytherin"))
)
knowledge.add(
Not(Symbol("PomonaSlytherin"))
)
In [ ]:
Copied!
knowledge.add(
Symbol("MinervaGryffindor")
)
knowledge.add(
Symbol("MinervaGryffindor")
)
In [ ]:
Copied!
for symbol in symbols:
if model_check(knowledge, symbol):
print(symbol)
for symbol in symbols:
if model_check(knowledge, symbol):
print(symbol)