sp
4 weeks ago
3 changed files with 124 additions and 0 deletions
-
32Lecture2/example-colours.py
-
77Lecture2/example-maestria-in-class.py
-
15Lecture2/example_xkcd_287.py
@ -0,0 +1,32 @@ |
|||
from itertools import combinations |
|||
from z3 import * |
|||
|
|||
solver = Solver() |
|||
|
|||
Colours = Datatype("Colours") |
|||
Colours.declare("RED") |
|||
Colours.declare("BLUE") |
|||
Colours.declare("GREEN") |
|||
Colours.declare("YELLOW") |
|||
|
|||
Colour = Colours.create() |
|||
f = Function('f', IntSort(), Colour) |
|||
|
|||
variables = list() |
|||
for i in range(0,5): |
|||
variables.append(Int(i)) |
|||
solver.add(0 <= variables[-1]) |
|||
solver.add(variables[-1] <= 5) |
|||
|
|||
solver.add(Distinct(variables)) |
|||
|
|||
""" |
|||
|cell 1|cell 2|cell 3|cell 4|cell 5| |
|||
|
|||
""" |
|||
|
|||
# neighbouring cells needs to be coloured differently |
|||
|
|||
result = solver.check() |
|||
if result == sat: |
|||
print(solver.model()) |
@ -0,0 +1,77 @@ |
|||
# coding: utf-8 |
|||
import os, sys |
|||
from z3 import * |
|||
import string |
|||
# get the playground information |
|||
directory = os.path.dirname(os.path.realpath(__file__)) |
|||
fname = directory + "/" + "level0.txt" |
|||
|
|||
if len(sys.argv) == 2: |
|||
fname = sys.argv[1] |
|||
|
|||
with open(fname) as f: |
|||
playground = f.read() |
|||
playground = [[c for c in row] for row in playground.strip().split("\n")] |
|||
|
|||
# get the playground size |
|||
size_y = len(playground) |
|||
assert(size_y != 0) |
|||
size_x = len(playground[0]) |
|||
assert(size_x != 0) |
|||
for row in playground: |
|||
assert(len(row) == size_x) |
|||
|
|||
bells = {} |
|||
for i in range(size_y): |
|||
for j in range(size_x): |
|||
c = playground[i][j] |
|||
if ord(c) in range(ord("1"), ord("9") + 1): |
|||
assert(int(c) not in bells.keys()) |
|||
bells[int(c)] = (j, i) |
|||
|
|||
################################### Maestria ################################### |
|||
|
|||
|
|||
print(f"Playground size : {size_x} x {size_y}") |
|||
print("Playground:") |
|||
print("\n".join(["".join(i) for i in playground])) |
|||
print("Bell positions:") |
|||
print(bells) |
|||
print("\n") |
|||
|
|||
# create the solver |
|||
solver = Solver() |
|||
|
|||
fudge_x, fudge_y = Ints("fudge_x fudge_y") |
|||
|
|||
|
|||
# call the solver and check satisfiability |
|||
while solver.check() == sat: |
|||
m = solver.model() |
|||
if fudge_x is not None and fudge_y is not None: |
|||
pos_x = m[fudge_x].as_long() |
|||
pos_y = m[fudge_y].as_long() |
|||
playground[pos_y][pos_x] = "F" |
|||
solver.add(Or(fudge_x != pos_x, fudge_y != pos_y)) |
|||
|
|||
################################################################################ |
|||
|
|||
from colorama import Fore, Back, Style |
|||
|
|||
cols = [Fore.BLUE, Fore.GREEN, Fore.RED, Fore.YELLOW, Fore.MAGENTA, Fore.CYAN] |
|||
tones = [Style.BRIGHT, Style.DIM] |
|||
cols = sum([[c + t for c in cols] for t in tones], []) |
|||
|
|||
if sys.stdout.isatty(): |
|||
for bell in sorted(list(bells.keys())): |
|||
x, y = bells[bell] |
|||
playground[y][x] = Back.BLACK + cols[bell - 1] + playground[y][x] + Style.RESET_ALL |
|||
for y in range(size_y): |
|||
for x in range(size_x): |
|||
c = playground[y][x] |
|||
if c == "_": playground[y][x] = Fore.BLACK + Back.WHITE + c + Style.RESET_ALL |
|||
if c == "X": playground[y][x] = Fore.WHITE + Back.BLACK + c + Style.RESET_ALL |
|||
if c == "F": playground[y][x] = Fore.BLACK + Back.WHITE + c + Style.RESET_ALL |
|||
|
|||
text = "\n".join(["".join([c for c in row]) for row in playground]) |
|||
print(text) |
@ -0,0 +1,15 @@ |
|||
#!/usr/bin/python3 |
|||
|
|||
from z3 import * |
|||
|
|||
# Prices: 215, 275, 335, 355, 420, 580 |
|||
# Sum: 1505 |
|||
|
|||
s = Solver() |
|||
|
|||
a,b,c,d,e,f = Ints("a b c d e f") |
|||
|
|||
|
|||
if s.check() == sat: |
|||
m = s.model() |
|||
print(m) |
Write
Preview
Loading…
Cancel
Save
Reference in new issue