z3 0.0.20180629 → 0.0.20220203
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -4
- data/Rakefile +15 -8
- data/examples/abc_path +187 -0
- data/examples/abc_path-1.txt +7 -0
- data/examples/algebra_problems +12 -12
- data/examples/aquarium +133 -0
- data/examples/aquarium-1.txt +11 -0
- data/examples/bridges +2 -2
- data/examples/cats_organized_neatly +133 -0
- data/examples/cats_organized_neatly-10.txt +15 -0
- data/examples/cats_organized_neatly-3.txt +8 -0
- data/examples/cats_organized_neatly-48.txt +32 -0
- data/examples/circuit_problems +4 -4
- data/examples/clogic_puzzle +2 -2
- data/examples/color_nonogram +150 -0
- data/examples/color_nonogram-1.txt +23 -0
- data/examples/crossflip +2 -4
- data/examples/dominion +153 -0
- data/examples/dominion-1.txt +8 -0
- data/examples/dominosa +133 -0
- data/examples/dominosa-1.txt +8 -0
- data/examples/eulero +99 -0
- data/examples/eulero-1.txt +5 -0
- data/examples/four_hackers_puzzle +2 -2
- data/examples/futoshiki +128 -0
- data/examples/futoshiki-1.txt +17 -0
- data/examples/kakurasu +73 -0
- data/examples/kakurasu-1.txt +2 -0
- data/examples/kakuro +2 -2
- data/examples/killer_sudoku +88 -0
- data/examples/killer_sudoku-1.txt +17 -0
- data/examples/killer_sudoku-2.txt +53 -0
- data/examples/kinematics_problems +20 -20
- data/examples/knights_puzzle +2 -2
- data/examples/kropki +100 -0
- data/examples/kropki-1.txt +13 -0
- data/examples/letter_connections +2 -2
- data/examples/light_up +2 -2
- data/examples/minisudoku +2 -2
- data/examples/miracle_sudoku +135 -0
- data/examples/miracle_sudoku-1.txt +9 -0
- data/examples/mortal_coil_puzzle +2 -2
- data/examples/nanro +245 -0
- data/examples/nanro-1.txt +8 -0
- data/examples/nine_clocks +106 -0
- data/examples/nonogram +2 -2
- data/examples/pyramid_nonogram +2 -2
- data/examples/regexp_crossword_solver +2 -2
- data/examples/regexp_solver +2 -2
- data/examples/renzoku +124 -0
- data/examples/renzoku-1.txt +17 -0
- data/examples/sandwich_sudoku +101 -0
- data/examples/sandwich_sudoku-1.txt +10 -0
- data/examples/selfref +2 -2
- data/examples/simple_regexp_parser.rb +58 -56
- data/examples/skyscrapers +118 -0
- data/examples/skyscrapers-1.txt +6 -0
- data/examples/skyscrapers-2.txt +11 -0
- data/examples/star_battle +134 -0
- data/examples/star_battle-1.txt +10 -0
- data/examples/stitches +180 -0
- data/examples/stitches-1.txt +11 -0
- data/examples/sudoku +2 -2
- data/examples/suguru +199 -0
- data/examples/suguru-1.txt +17 -0
- data/examples/verbal_arithmetic +2 -2
- data/examples/yajilin +268 -0
- data/examples/yajilin-1.txt +10 -0
- data/lib/z3/ast.rb +8 -0
- data/lib/z3/expr/expr.rb +16 -15
- data/lib/z3/low_level.rb +6 -2
- data/lib/z3/low_level_auto.rb +180 -36
- data/lib/z3/optimize.rb +4 -4
- data/lib/z3/very_low_level.rb +8 -5
- data/lib/z3/very_low_level_auto.rb +45 -9
- data/spec/expr_spec.rb +62 -0
- data/spec/integration/abc_path_spec.rb +21 -0
- data/spec/integration/aquarium_spec.rb +27 -0
- data/spec/integration/cats_organized_neatly_spec.rb +14 -0
- data/spec/integration/color_nonogram_spec.rb +28 -0
- data/spec/integration/dominion_spec.rb +14 -0
- data/spec/integration/dominosa_spec.rb +21 -0
- data/spec/integration/eulero_spec.rb +11 -0
- data/spec/integration/futoshiki_spec.rb +23 -0
- data/spec/integration/kakurasu_spec.rb +18 -0
- data/spec/integration/killer_sudoku_spec.rb +10 -0
- data/spec/integration/knights_puzzle_spec.rb +11 -11
- data/spec/integration/kropki_spec.rb +19 -0
- data/spec/integration/miracle_sudoku_spec.rb +15 -0
- data/spec/integration/mortal_coil_puzzle_spec.rb +8 -6
- data/spec/integration/nanro_spec.rb +39 -0
- data/spec/integration/nine_clocks_spec.rb +30 -0
- data/spec/integration/oneofus_spec.rb +7 -15
- data/spec/integration/regexp_crossword_solver_spec.rb +1 -1
- data/spec/integration/renzoku_spec.rb +23 -0
- data/spec/integration/sandwich_sudoku_spec.rb +15 -0
- data/spec/integration/skyscraper_spec.rb +10 -0
- data/spec/integration/star_battle_spec.rb +27 -0
- data/spec/integration/stitches_spec.rb +25 -0
- data/spec/integration/suguru_spec.rb +23 -0
- data/spec/integration/yajilin_spec.rb +25 -0
- data/spec/optimize_spec.rb +6 -4
- data/spec/set_expr_spec.rb +14 -8
- data/spec/solver_spec.rb +4 -5
- data/spec/spec_helper.rb +15 -0
- metadata +105 -25
@@ -1,19 +1,11 @@
|
|
1
|
+
# This puzzle is ambiguous and different z3 versions return different result,
|
2
|
+
# so just checking that it doesn't crash
|
3
|
+
|
1
4
|
describe "OneOfUs" do
|
2
|
-
|
3
|
-
expect("oneofus").to have_output <<EOF
|
4
|
-
grey Triangle grey Circle grey Triangle
|
5
|
-
purple Square grey Triangle purple Triangle
|
6
|
-
grey Triangle grey Square grey Triangle
|
5
|
+
let(:binary) { Pathname(__dir__) + "../../examples/oneofus" }
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
Click 3: 1,2 - grey Square
|
12
|
-
Click 4: 1,1 - grey Triangle
|
13
|
-
Click 5: 1,0 - grey Circle
|
14
|
-
Click 6: 2,0 - grey Triangle
|
15
|
-
Click 7: 0,0 - grey Triangle
|
16
|
-
Click 8: 0,2 - grey Triangle
|
17
|
-
EOF
|
7
|
+
it do
|
8
|
+
output = `#{binary}`.chomp
|
9
|
+
expect(output.lines.size).to eq(13)
|
18
10
|
end
|
19
11
|
end
|
@@ -15,7 +15,7 @@ describe "Regexp Crossword Solver" do
|
|
15
15
|
let(:rows) { example.last(row_number) }
|
16
16
|
|
17
17
|
it "matches output" do
|
18
|
-
output_rows = `#{binary} #{example_path}`.split("\n").map(&:chomp)
|
18
|
+
output_rows = `#{binary} #{example_path}`.split("\n").map(&:chomp).map{|x| x.gsub("\\r", "\r")}
|
19
19
|
output_cols = output_rows.map(&:chars).transpose.map(&:join)
|
20
20
|
expect(output_rows.size).to eq(rows.size)
|
21
21
|
expect(output_cols.size).to eq(cols.size)
|
@@ -0,0 +1,23 @@
|
|
1
|
+
describe "Renzoku" do
|
2
|
+
it do
|
3
|
+
expect("renzoku").to have_output <<EOF
|
4
|
+
2 4 7 1 3 9.8 5.6
|
5
|
+
. . . .
|
6
|
+
6.5 8.9 4 1.2.3 7
|
7
|
+
. .
|
8
|
+
7 9 2 5.6 3.4 1 8
|
9
|
+
|
10
|
+
4 7.6 3.2 8 1 9 5
|
11
|
+
. . .
|
12
|
+
5 8 1 4 9 2 7.6 3
|
13
|
+
.
|
14
|
+
8 3.4 7 1 5.6 2 9
|
15
|
+
. .
|
16
|
+
1.2 9 6.5 7 3 8 4
|
17
|
+
. .
|
18
|
+
9 1 3 8.7.6.5.4 2
|
19
|
+
. .
|
20
|
+
3 6.5 2 8 4 9 7 1
|
21
|
+
EOF
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
describe "Sandwich Sudoku" do
|
2
|
+
it do
|
3
|
+
expect("sandwich_sudoku").to have_output <<EOF
|
4
|
+
4 8 5 6 7 9 3 2 1
|
5
|
+
3 2 9 5 8 1 6 4 7
|
6
|
+
7 1 6 2 3 4 5 9 8
|
7
|
+
1 7 2 9 5 3 8 6 4
|
8
|
+
6 9 4 8 1 2 7 3 5
|
9
|
+
8 5 3 7 4 6 9 1 2
|
10
|
+
5 3 1 4 9 7 2 8 6
|
11
|
+
9 6 8 1 2 5 4 7 3
|
12
|
+
2 4 7 3 6 8 1 5 9
|
13
|
+
EOF
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
describe "Star Battle" do
|
2
|
+
it do
|
3
|
+
expect("star_battle").to have_output <<EOF
|
4
|
+
+-+-+-+-+-+-+-+-+-+-+
|
5
|
+
| * |*|
|
6
|
+
+ +-+ +-+ + +
|
7
|
+
|*| | |*| | |
|
8
|
+
+ + + + +-+-+-+-+-+ +
|
9
|
+
| | | | * |* |
|
10
|
+
+-+ +-+ +-+-+ +-+ +
|
11
|
+
| *| |* | | |
|
12
|
+
+ +-+-+ +-+ + +-+-+-+
|
13
|
+
|*| | | | |*| |
|
14
|
+
+-+ +-+-+ + + + +
|
15
|
+
| * | | | *|
|
16
|
+
+ +-+-+-+-+ +-+ +
|
17
|
+
| | * |* | |
|
18
|
+
+ +-+-+-+ + +-+ +
|
19
|
+
| |* *| | | |
|
20
|
+
+-+ +-+-+-+ + + +
|
21
|
+
| | | | |*| |* |
|
22
|
+
+ +-+-+ + +-+ +-+-+
|
23
|
+
| * *| |
|
24
|
+
+-+-+-+-+-+-+-+-+-+-+
|
25
|
+
EOF
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
describe "Stitches" do
|
2
|
+
it do
|
3
|
+
expect("stitches").to have_output_no_color <<EOF
|
4
|
+
* *-*
|
5
|
+
|
|
6
|
+
* * *-* *-*
|
7
|
+
|
|
8
|
+
* * * *
|
9
|
+
| | |
|
10
|
+
* * * * * *
|
11
|
+
| | |
|
12
|
+
* * * *-* * *-*
|
13
|
+
|
|
14
|
+
* * * *
|
15
|
+
| | |
|
16
|
+
* * * * * *
|
17
|
+
| | |
|
18
|
+
* * * * * *-* *
|
19
|
+
| | |
|
20
|
+
* * * * *
|
21
|
+
| |
|
22
|
+
* *
|
23
|
+
EOF
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
describe "Suguru" do
|
2
|
+
it do
|
3
|
+
expect("suguru").to have_output <<EOF
|
4
|
+
+---+-----+
|
5
|
+
|1 3|1 4 3|
|
6
|
+
| | +---+
|
7
|
+
|2 6|5|6 2|
|
8
|
+
| | | |
|
9
|
+
|5 4|2|4 3|
|
10
|
+
+---+-+ |
|
11
|
+
|1 3 6|5 1|
|
12
|
+
| +-+---+
|
13
|
+
|2 4|1 2 7|
|
14
|
+
+-+ +-+ |
|
15
|
+
|1|5 7|6 4|
|
16
|
+
+-+---+ |
|
17
|
+
|2|3 4|5 3|
|
18
|
+
| | +---+
|
19
|
+
|1|5 1 2 6|
|
20
|
+
+-+-------+
|
21
|
+
EOF
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
describe "Yajilin" do
|
2
|
+
it do
|
3
|
+
expect("yajilin").to have_output <<EOF
|
4
|
+
* -* # * -* -* -* # * -*
|
5
|
+
| | | | | |
|
6
|
+
* * -* -* 2↓ # * -* -* *
|
7
|
+
| |
|
8
|
+
* -* # * -* -* -* # * -*
|
9
|
+
| | | |
|
10
|
+
* -* 2↑ * -* -* * 2↑ * #
|
11
|
+
| | | |
|
12
|
+
* * -* 1↓ # * * -* * -*
|
13
|
+
| | | | | |
|
14
|
+
* * * -* -* -* 1→ * # *
|
15
|
+
| | | |
|
16
|
+
* -* * -* -* -* -* * 0→ *
|
17
|
+
| | | |
|
18
|
+
0↑ # * 1← # 1↓ * -* # *
|
19
|
+
| |
|
20
|
+
* -* -* # * -* -* # 2← *
|
21
|
+
| | | |
|
22
|
+
* -* -* -* -* # * -* -* -*
|
23
|
+
EOF
|
24
|
+
end
|
25
|
+
end
|
data/spec/optimize_spec.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# Optimize and Model specs are codependent, so half of functionality of each is tested in other class's tests
|
2
|
+
|
3
|
+
# Disabled as it crashes on Z3 4.8.13
|
2
4
|
module Z3
|
3
|
-
|
5
|
+
xdescribe Optimize do
|
4
6
|
let(:optimize) { Optimize.new }
|
5
7
|
let(:a) { Z3.Int("a") }
|
6
8
|
let(:b) { Z3.Int("b") }
|
@@ -43,14 +45,14 @@ module Z3
|
|
43
45
|
# This is a very simple example of unknown satisfiablity
|
44
46
|
# so we might need more complex one in the future
|
45
47
|
# Unlike Z3::Solver, this is unknown even 4.6.0
|
46
|
-
it "
|
48
|
+
it "unknown satisfiability" do
|
47
49
|
optimize.assert a**3 == a
|
48
50
|
expect(optimize.check).to eq(:unknown)
|
49
51
|
expect{optimize.satisfiable?}.to raise_error("Satisfiability unknown")
|
50
52
|
expect{optimize.unsatisfiable?}.to raise_error("Satisfiability unknown")
|
51
53
|
end
|
52
54
|
|
53
|
-
it "
|
55
|
+
it "unknown satisfiability" do
|
54
56
|
optimize.assert a**a == a
|
55
57
|
expect(optimize.check).to eq(:unknown)
|
56
58
|
expect{optimize.satisfiable?}.to raise_error("Satisfiability unknown")
|
@@ -65,7 +67,7 @@ module Z3
|
|
65
67
|
expect(optimize.model[a].to_i).to eq 9
|
66
68
|
end
|
67
69
|
|
68
|
-
it "
|
70
|
+
it "minimize" do
|
69
71
|
optimize.assert a > 0
|
70
72
|
optimize.assert a < 10
|
71
73
|
optimize.minimize a
|
data/spec/set_expr_spec.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# This test is really bad, all of these have multiple solutions.
|
2
|
+
# And it changes between Z3 versions
|
1
3
|
module Z3
|
2
4
|
describe SetExpr do
|
3
5
|
let(:sort) { SetSort.new(IntSort.new) }
|
@@ -21,13 +23,15 @@ module Z3
|
|
21
23
|
expect([
|
22
24
|
a.include?(1),
|
23
25
|
a.include?(2),
|
26
|
+
!a.include?(3),
|
27
|
+
!b.include?(1),
|
24
28
|
b.include?(2),
|
25
29
|
b.include?(3),
|
26
30
|
c == a.union(b),
|
27
31
|
]).to have_solution(
|
28
|
-
a => "store(
|
29
|
-
b => "store(
|
30
|
-
c => "
|
32
|
+
a => "store(const(true), 3, false)",
|
33
|
+
b => "store(const(true), 1, false)",
|
34
|
+
c => "map(store(const(true), 3, false), store(const(true), 1, false))",
|
31
35
|
)
|
32
36
|
end
|
33
37
|
|
@@ -41,9 +45,9 @@ module Z3
|
|
41
45
|
b.include?(3),
|
42
46
|
c == a.difference(b),
|
43
47
|
]).to have_solution(
|
44
|
-
a => "store(
|
48
|
+
a => "store(const(true), 3, false)",
|
45
49
|
b => "store(const(true), 1, false)",
|
46
|
-
c => "store(const(false), 1, true)",
|
50
|
+
c => "map(store(const(true), 3, false), store(const(false), 1, true))",
|
47
51
|
)
|
48
52
|
end
|
49
53
|
|
@@ -51,13 +55,15 @@ module Z3
|
|
51
55
|
expect([
|
52
56
|
a.include?(1),
|
53
57
|
a.include?(2),
|
58
|
+
!a.include?(3),
|
59
|
+
!b.include?(1),
|
54
60
|
b.include?(2),
|
55
61
|
b.include?(3),
|
56
62
|
c == a.intersection(b),
|
57
63
|
]).to have_solution(
|
58
|
-
a => "store(
|
59
|
-
b => "store(
|
60
|
-
c => "
|
64
|
+
a => "store(const(true), 3, false)",
|
65
|
+
b => "store(const(true), 1, false)",
|
66
|
+
c => "map(store(const(true), 3, false), store(const(true), 1, false))",
|
61
67
|
)
|
62
68
|
end
|
63
69
|
end
|
data/spec/solver_spec.rb
CHANGED
@@ -37,22 +37,21 @@ module Z3
|
|
37
37
|
solver.assert b >= 2
|
38
38
|
solver.assert Z3.Or(a == 2, a == -2)
|
39
39
|
stats = solver.statistics
|
40
|
-
|
41
|
-
expect(stats.keys).to match_array(["rlimit count", "max memory", "memory", "num allocs", "mk bool var"])
|
40
|
+
expect(stats.keys).to match_array(["rlimit count", "max memory", "memory", "num allocs"])
|
42
41
|
end
|
43
42
|
|
44
43
|
# This is a very simple example of unknown satisfiablity
|
45
44
|
# so we might need more complex one in the future
|
46
45
|
# This is now satisfiable in 4.6.0
|
47
46
|
if Z3.version >= "4.6"
|
48
|
-
it "
|
47
|
+
it "unknown satisfiability (until 4.6 fix)" do
|
49
48
|
solver.assert a**3 == a
|
50
49
|
expect(solver.check).to eq(:sat)
|
51
50
|
expect(solver).to be_satisfiable
|
52
51
|
expect(solver).to_not be_unsatisfiable
|
53
52
|
end
|
54
53
|
else
|
55
|
-
it "
|
54
|
+
it "unknown satisfiability (until 4.6 fix)" do
|
56
55
|
solver.assert a**3 == a
|
57
56
|
expect(solver.check).to eq(:unknown)
|
58
57
|
expect{solver.satisfiable?}.to raise_error("Satisfiability unknown")
|
@@ -60,7 +59,7 @@ module Z3
|
|
60
59
|
end
|
61
60
|
end
|
62
61
|
|
63
|
-
it "
|
62
|
+
it "unknown satisfiability" do
|
64
63
|
solver.assert a**a == a
|
65
64
|
expect(solver.check).to eq(:unknown)
|
66
65
|
expect{solver.satisfiable?}.to raise_error("Satisfiability unknown")
|
data/spec/spec_helper.rb
CHANGED
@@ -28,6 +28,21 @@ RSpec::Matchers.define :have_output do |expected|
|
|
28
28
|
match do |file_name|
|
29
29
|
executable_path = "#{__dir__}/../examples/#{file_name}"
|
30
30
|
actual = IO.popen("ruby -r./spec/coverage_helper #{executable_path}").read
|
31
|
+
@expected = expected.gsub(/ *$/, "")
|
32
|
+
@actual = actual.gsub(/ *$/, "")
|
33
|
+
@actual == @expected
|
34
|
+
end
|
35
|
+
|
36
|
+
failure_message do |actual|
|
37
|
+
"Expected:\n#{@expected.chomp}\nBut got:\n#{@actual}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
RSpec::Matchers.define :have_output_no_color do |expected|
|
42
|
+
match do |file_name|
|
43
|
+
executable_path = "#{__dir__}/../examples/#{file_name}"
|
44
|
+
actual = IO.popen("ruby -r./spec/coverage_helper #{executable_path}").read
|
45
|
+
actual = actual.gsub(/\e\[.*?m/, "")
|
31
46
|
actual.gsub(/ *$/, "") == expected.gsub(/ *$/, "")
|
32
47
|
end
|
33
48
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: z3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.20220203
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomasz Wegrzanowski
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pry
|
@@ -30,70 +30,84 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '12'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '12'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '3.8'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '3.8'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: simplecov
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
61
|
+
version: '0.16'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
68
|
+
version: '0.16'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: regexp_parser
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.3'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.3'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: paint
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - ">="
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
89
|
+
version: 2.1.0
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
94
|
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
96
|
+
version: 2.1.0
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: ffi
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
|
-
- - "
|
101
|
+
- - "~>"
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
103
|
+
version: '1.9'
|
90
104
|
type: :runtime
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
|
-
- - "
|
108
|
+
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
110
|
+
version: '1.9'
|
97
111
|
description: Ruby bindings for Z3 Constraint Solver
|
98
112
|
email: Tomasz.Wegrzanowski@gmail.com
|
99
113
|
executables: []
|
@@ -103,29 +117,59 @@ files:
|
|
103
117
|
- ".rspec"
|
104
118
|
- README.md
|
105
119
|
- Rakefile
|
120
|
+
- examples/abc_path
|
121
|
+
- examples/abc_path-1.txt
|
106
122
|
- examples/algebra_problems
|
123
|
+
- examples/aquarium
|
124
|
+
- examples/aquarium-1.txt
|
107
125
|
- examples/basic_int_math
|
108
126
|
- examples/basic_logic
|
109
127
|
- examples/bit_tricks
|
110
128
|
- examples/bridges
|
111
129
|
- examples/bridges-1.txt
|
130
|
+
- examples/cats_organized_neatly
|
131
|
+
- examples/cats_organized_neatly-10.txt
|
132
|
+
- examples/cats_organized_neatly-3.txt
|
133
|
+
- examples/cats_organized_neatly-48.txt
|
112
134
|
- examples/circuit_problems
|
113
135
|
- examples/clogic_puzzle
|
136
|
+
- examples/color_nonogram
|
137
|
+
- examples/color_nonogram-1.txt
|
114
138
|
- examples/crossflip
|
139
|
+
- examples/dominion
|
140
|
+
- examples/dominion-1.txt
|
141
|
+
- examples/dominosa
|
142
|
+
- examples/dominosa-1.txt
|
143
|
+
- examples/eulero
|
144
|
+
- examples/eulero-1.txt
|
115
145
|
- examples/four_hackers_puzzle
|
146
|
+
- examples/futoshiki
|
147
|
+
- examples/futoshiki-1.txt
|
116
148
|
- examples/geometry_problem
|
149
|
+
- examples/kakurasu
|
150
|
+
- examples/kakurasu-1.txt
|
117
151
|
- examples/kakuro
|
118
152
|
- examples/kakuro-1.txt
|
153
|
+
- examples/killer_sudoku
|
154
|
+
- examples/killer_sudoku-1.txt
|
155
|
+
- examples/killer_sudoku-2.txt
|
119
156
|
- examples/kinematics_problems
|
120
157
|
- examples/knights_puzzle
|
158
|
+
- examples/kropki
|
159
|
+
- examples/kropki-1.txt
|
121
160
|
- examples/letter_connections
|
122
161
|
- examples/letter_connections-1.txt
|
123
162
|
- examples/light_up
|
124
163
|
- examples/light_up-1.txt
|
125
164
|
- examples/minisudoku
|
126
165
|
- examples/minisudoku-1.txt
|
166
|
+
- examples/miracle_sudoku
|
167
|
+
- examples/miracle_sudoku-1.txt
|
127
168
|
- examples/mortal_coil_puzzle
|
128
169
|
- examples/mortal_coil_puzzle-9.txt
|
170
|
+
- examples/nanro
|
171
|
+
- examples/nanro-1.txt
|
172
|
+
- examples/nine_clocks
|
129
173
|
- examples/nonogram
|
130
174
|
- examples/oneofus
|
131
175
|
- examples/pyramid_nonogram
|
@@ -151,11 +195,26 @@ files:
|
|
151
195
|
- examples/regexp_crossword_solver
|
152
196
|
- examples/regexp_solver
|
153
197
|
- examples/regexp_string_matcher.rb
|
198
|
+
- examples/renzoku
|
199
|
+
- examples/renzoku-1.txt
|
200
|
+
- examples/sandwich_sudoku
|
201
|
+
- examples/sandwich_sudoku-1.txt
|
154
202
|
- examples/selfref
|
155
203
|
- examples/simple_regexp_parser.rb
|
204
|
+
- examples/skyscrapers
|
205
|
+
- examples/skyscrapers-1.txt
|
206
|
+
- examples/skyscrapers-2.txt
|
207
|
+
- examples/star_battle
|
208
|
+
- examples/star_battle-1.txt
|
209
|
+
- examples/stitches
|
210
|
+
- examples/stitches-1.txt
|
156
211
|
- examples/sudoku
|
157
212
|
- examples/sudoku-1.txt
|
213
|
+
- examples/suguru
|
214
|
+
- examples/suguru-1.txt
|
158
215
|
- examples/verbal_arithmetic
|
216
|
+
- examples/yajilin
|
217
|
+
- examples/yajilin-1.txt
|
159
218
|
- examples/zebra_puzzle
|
160
219
|
- lib/z3.rb
|
161
220
|
- lib/z3/ast.rb
|
@@ -207,30 +266,51 @@ files:
|
|
207
266
|
- spec/goal_spec.rb
|
208
267
|
- spec/int_expr_spec.rb
|
209
268
|
- spec/int_sort_spec.rb
|
269
|
+
- spec/integration/abc_path_spec.rb
|
210
270
|
- spec/integration/algebra_problems_spec.rb
|
271
|
+
- spec/integration/aquarium_spec.rb
|
211
272
|
- spec/integration/basic_int_math_spec.rb
|
212
273
|
- spec/integration/basic_logic_spec.rb
|
213
274
|
- spec/integration/bit_tricks_spec.rb
|
214
275
|
- spec/integration/bridges_spec.rb
|
276
|
+
- spec/integration/cats_organized_neatly_spec.rb
|
215
277
|
- spec/integration/cicruit_problem_spec.rb
|
278
|
+
- spec/integration/color_nonogram_spec.rb
|
216
279
|
- spec/integration/crossflip_spec.rb
|
280
|
+
- spec/integration/dominion_spec.rb
|
281
|
+
- spec/integration/dominosa_spec.rb
|
282
|
+
- spec/integration/eulero_spec.rb
|
217
283
|
- spec/integration/four_hackers_puzzle_spec.rb
|
284
|
+
- spec/integration/futoshiki_spec.rb
|
218
285
|
- spec/integration/geometry_problem_spec.rb
|
286
|
+
- spec/integration/kakurasu_spec.rb
|
219
287
|
- spec/integration/kakuro_spec.rb
|
288
|
+
- spec/integration/killer_sudoku_spec.rb
|
220
289
|
- spec/integration/kinematics_problems_spec.rb
|
221
290
|
- spec/integration/knights_puzzle_spec.rb
|
291
|
+
- spec/integration/kropki_spec.rb
|
222
292
|
- spec/integration/letter_connections_spec.rb
|
223
293
|
- spec/integration/light_up_spec.rb
|
224
294
|
- spec/integration/minisudoku_spec.rb
|
295
|
+
- spec/integration/miracle_sudoku_spec.rb
|
225
296
|
- spec/integration/mortal_coil_puzzle_spec.rb
|
297
|
+
- spec/integration/nanro_spec.rb
|
298
|
+
- spec/integration/nine_clocks_spec.rb
|
226
299
|
- spec/integration/nonogram_spec.rb
|
227
300
|
- spec/integration/oneofus_spec.rb
|
228
301
|
- spec/integration/pyramid_nonogram_spec.rb
|
229
302
|
- spec/integration/regexp_crossword_solver_spec.rb
|
230
303
|
- spec/integration/regexp_solver_spec.rb
|
304
|
+
- spec/integration/renzoku_spec.rb
|
305
|
+
- spec/integration/sandwich_sudoku_spec.rb
|
231
306
|
- spec/integration/selfref_spec.rb
|
307
|
+
- spec/integration/skyscraper_spec.rb
|
308
|
+
- spec/integration/star_battle_spec.rb
|
309
|
+
- spec/integration/stitches_spec.rb
|
232
310
|
- spec/integration/sudoku_spec.rb
|
311
|
+
- spec/integration/suguru_spec.rb
|
233
312
|
- spec/integration/verbal_arithmetic_spec.rb
|
313
|
+
- spec/integration/yajilin_spec.rb
|
234
314
|
- spec/integration/zebra_puzzle_spec.rb
|
235
315
|
- spec/interface_spec.rb
|
236
316
|
- spec/model_spec.rb
|
@@ -251,8 +331,9 @@ files:
|
|
251
331
|
homepage: https://github.com/taw/z3
|
252
332
|
licenses:
|
253
333
|
- MIT
|
254
|
-
metadata:
|
255
|
-
|
334
|
+
metadata:
|
335
|
+
msys2_mingw_dependencies: z3
|
336
|
+
post_install_message:
|
256
337
|
rdoc_options: []
|
257
338
|
require_paths:
|
258
339
|
- lib
|
@@ -267,10 +348,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
267
348
|
- !ruby/object:Gem::Version
|
268
349
|
version: '0'
|
269
350
|
requirements:
|
270
|
-
- z3 library
|
271
|
-
|
272
|
-
|
273
|
-
signing_key:
|
351
|
+
- z3 library (4.8+)
|
352
|
+
rubygems_version: 3.1.2
|
353
|
+
signing_key:
|
274
354
|
specification_version: 4
|
275
355
|
summary: Z3 Constraint Solver
|
276
356
|
test_files: []
|