sp
2 years ago
4 changed files with 114 additions and 0 deletions
-
21Assignment1/branchless_min.py
-
70Assignment1/square.py
-
3Assignment1/test0.txt
-
20Assignment1/transposition.py
@ -0,0 +1,21 @@ |
|||
# coding: utf-8 |
|||
from z3 import * |
|||
|
|||
# Create an instance of a z3 solver |
|||
|
|||
solver = Solver() |
|||
|
|||
min_ite = BitVec("min", 32) |
|||
x = BitVec("x", 32) |
|||
y = BitVec("y", 32) |
|||
# Declare additional z3 variables |
|||
|
|||
solver.add(min_ite == If(x < y, x, y)) |
|||
|
|||
# solver.add(...) |
|||
|
|||
# Check and print the result. |
|||
result = solver.check() |
|||
print(result) |
|||
if result == sat: |
|||
print(solver.model()) |
@ -0,0 +1,70 @@ |
|||
# coding: utf-8 |
|||
import os, sys |
|||
from z3 import * |
|||
|
|||
# get the playground information |
|||
if len(sys.argv) != 2: |
|||
print("Usage: python3 square.py <test-file>") |
|||
sys.exit(0) |
|||
|
|||
with open(sys.argv[1]) as f: |
|||
playground = f.read() |
|||
rows = playground.strip().split("\n") |
|||
playground = [[None if x == "_" else int(x) for x in r.split()] for r in rows] |
|||
|
|||
# get the playground size |
|||
size_y = len(playground) |
|||
assert(size_y != 0) |
|||
size_x = len(playground[0]) |
|||
assert(size_x != 0) |
|||
assert(size_x == size_y) |
|||
|
|||
#################################### Square #################################### |
|||
|
|||
# create the solver |
|||
solver = Solver() |
|||
|
|||
# todo: create an integer variable for each playground cell |
|||
# hint: use something like the coordinates as part of the variable name |
|||
numbers = [[None for _j in range(size_x)] for _j in range(size_y)] |
|||
for i in range(size_y): |
|||
for j in range(size_x): |
|||
pass # ... replace this with your code ... |
|||
|
|||
# todo: assign each known number the corresponding value from playground |
|||
for i in range(size_y): |
|||
for j in range(size_x): |
|||
pass # ... replace this with your code ... |
|||
|
|||
# todo: declare a variable for the sum of all columns, rows and diagonals |
|||
# ... your code goes here ... |
|||
|
|||
# todo: enfoce that each column sums up to the declared variable |
|||
for j in range(size_x): |
|||
pass # ... replace this with your code ... |
|||
|
|||
# todo: enfoce that each row sums up to the declared variable |
|||
for i in range(size_y): |
|||
pass # ... replace this with your code ... |
|||
|
|||
# todo: enfoce that both diagonals sum up to the declared variable |
|||
# ... your code goes here ... |
|||
diag1 = [numbers[i][i] for i in range(size_y)] |
|||
diag2 = [numbers[i][size_y - i - 1] for i in range(size_y)] |
|||
|
|||
# call the solver and check satisfiability |
|||
res = solver.check() |
|||
if res != sat: |
|||
print("unsat") |
|||
sys.exit(1) |
|||
|
|||
# print the model |
|||
m = solver.model() |
|||
for i in range(size_y): |
|||
results = [] |
|||
for j in range(size_x): |
|||
num = numbers[i][j] |
|||
results.append("_" if num is None else m[num].as_long()) |
|||
print(("%4s" * len(results)) % tuple(results)) |
|||
|
|||
################################################################################ |
@ -0,0 +1,3 @@ |
|||
_ _ 28 |
|||
_ 35 21 |
|||
_ 7 _ |
@ -0,0 +1,20 @@ |
|||
# coding: utf-8 |
|||
from z3 import * |
|||
|
|||
# Create an instance of a z3 solver |
|||
|
|||
solver = None |
|||
|
|||
# Declare needed z3 variables |
|||
|
|||
# Add the needed constraints to check equivalence of the two formulae. |
|||
|
|||
# solver.add(...) |
|||
|
|||
|
|||
# Check and print the result. |
|||
|
|||
result = solver.check() |
|||
print(result) |
|||
if result == sat: |
|||
print(solver.model()) |
Write
Preview
Loading…
Cancel
Save
Reference in new issue