z3 0.0.20180629 → 0.0.20220203

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -4
  3. data/Rakefile +15 -8
  4. data/examples/abc_path +187 -0
  5. data/examples/abc_path-1.txt +7 -0
  6. data/examples/algebra_problems +12 -12
  7. data/examples/aquarium +133 -0
  8. data/examples/aquarium-1.txt +11 -0
  9. data/examples/bridges +2 -2
  10. data/examples/cats_organized_neatly +133 -0
  11. data/examples/cats_organized_neatly-10.txt +15 -0
  12. data/examples/cats_organized_neatly-3.txt +8 -0
  13. data/examples/cats_organized_neatly-48.txt +32 -0
  14. data/examples/circuit_problems +4 -4
  15. data/examples/clogic_puzzle +2 -2
  16. data/examples/color_nonogram +150 -0
  17. data/examples/color_nonogram-1.txt +23 -0
  18. data/examples/crossflip +2 -4
  19. data/examples/dominion +153 -0
  20. data/examples/dominion-1.txt +8 -0
  21. data/examples/dominosa +133 -0
  22. data/examples/dominosa-1.txt +8 -0
  23. data/examples/eulero +99 -0
  24. data/examples/eulero-1.txt +5 -0
  25. data/examples/four_hackers_puzzle +2 -2
  26. data/examples/futoshiki +128 -0
  27. data/examples/futoshiki-1.txt +17 -0
  28. data/examples/kakurasu +73 -0
  29. data/examples/kakurasu-1.txt +2 -0
  30. data/examples/kakuro +2 -2
  31. data/examples/killer_sudoku +88 -0
  32. data/examples/killer_sudoku-1.txt +17 -0
  33. data/examples/killer_sudoku-2.txt +53 -0
  34. data/examples/kinematics_problems +20 -20
  35. data/examples/knights_puzzle +2 -2
  36. data/examples/kropki +100 -0
  37. data/examples/kropki-1.txt +13 -0
  38. data/examples/letter_connections +2 -2
  39. data/examples/light_up +2 -2
  40. data/examples/minisudoku +2 -2
  41. data/examples/miracle_sudoku +135 -0
  42. data/examples/miracle_sudoku-1.txt +9 -0
  43. data/examples/mortal_coil_puzzle +2 -2
  44. data/examples/nanro +245 -0
  45. data/examples/nanro-1.txt +8 -0
  46. data/examples/nine_clocks +106 -0
  47. data/examples/nonogram +2 -2
  48. data/examples/pyramid_nonogram +2 -2
  49. data/examples/regexp_crossword_solver +2 -2
  50. data/examples/regexp_solver +2 -2
  51. data/examples/renzoku +124 -0
  52. data/examples/renzoku-1.txt +17 -0
  53. data/examples/sandwich_sudoku +101 -0
  54. data/examples/sandwich_sudoku-1.txt +10 -0
  55. data/examples/selfref +2 -2
  56. data/examples/simple_regexp_parser.rb +58 -56
  57. data/examples/skyscrapers +118 -0
  58. data/examples/skyscrapers-1.txt +6 -0
  59. data/examples/skyscrapers-2.txt +11 -0
  60. data/examples/star_battle +134 -0
  61. data/examples/star_battle-1.txt +10 -0
  62. data/examples/stitches +180 -0
  63. data/examples/stitches-1.txt +11 -0
  64. data/examples/sudoku +2 -2
  65. data/examples/suguru +199 -0
  66. data/examples/suguru-1.txt +17 -0
  67. data/examples/verbal_arithmetic +2 -2
  68. data/examples/yajilin +268 -0
  69. data/examples/yajilin-1.txt +10 -0
  70. data/lib/z3/ast.rb +8 -0
  71. data/lib/z3/expr/expr.rb +16 -15
  72. data/lib/z3/low_level.rb +6 -2
  73. data/lib/z3/low_level_auto.rb +180 -36
  74. data/lib/z3/optimize.rb +4 -4
  75. data/lib/z3/very_low_level.rb +8 -5
  76. data/lib/z3/very_low_level_auto.rb +45 -9
  77. data/spec/expr_spec.rb +62 -0
  78. data/spec/integration/abc_path_spec.rb +21 -0
  79. data/spec/integration/aquarium_spec.rb +27 -0
  80. data/spec/integration/cats_organized_neatly_spec.rb +14 -0
  81. data/spec/integration/color_nonogram_spec.rb +28 -0
  82. data/spec/integration/dominion_spec.rb +14 -0
  83. data/spec/integration/dominosa_spec.rb +21 -0
  84. data/spec/integration/eulero_spec.rb +11 -0
  85. data/spec/integration/futoshiki_spec.rb +23 -0
  86. data/spec/integration/kakurasu_spec.rb +18 -0
  87. data/spec/integration/killer_sudoku_spec.rb +10 -0
  88. data/spec/integration/knights_puzzle_spec.rb +11 -11
  89. data/spec/integration/kropki_spec.rb +19 -0
  90. data/spec/integration/miracle_sudoku_spec.rb +15 -0
  91. data/spec/integration/mortal_coil_puzzle_spec.rb +8 -6
  92. data/spec/integration/nanro_spec.rb +39 -0
  93. data/spec/integration/nine_clocks_spec.rb +30 -0
  94. data/spec/integration/oneofus_spec.rb +7 -15
  95. data/spec/integration/regexp_crossword_solver_spec.rb +1 -1
  96. data/spec/integration/renzoku_spec.rb +23 -0
  97. data/spec/integration/sandwich_sudoku_spec.rb +15 -0
  98. data/spec/integration/skyscraper_spec.rb +10 -0
  99. data/spec/integration/star_battle_spec.rb +27 -0
  100. data/spec/integration/stitches_spec.rb +25 -0
  101. data/spec/integration/suguru_spec.rb +23 -0
  102. data/spec/integration/yajilin_spec.rb +25 -0
  103. data/spec/optimize_spec.rb +6 -4
  104. data/spec/set_expr_spec.rb +14 -8
  105. data/spec/solver_spec.rb +4 -5
  106. data/spec/spec_helper.rb +15 -0
  107. 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
- it do
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
- Click 0: 0,1 - purple Square
9
- Click 1: 2,1 - purple Triangle
10
- Click 2: 2,2 - grey Triangle
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,10 @@
1
+ describe "Skysrapers" do
2
+ it do
3
+ expect("skyscrapers").to have_output <<EOF
4
+ 2 4 1 3
5
+ 4 2 3 1
6
+ 3 1 4 2
7
+ 1 3 2 4
8
+ EOF
9
+ end
10
+ 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
@@ -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
- describe Optimize do
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 "third way" do
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 "third way" do
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 "maximize" do
70
+ it "minimize" do
69
71
  optimize.assert a > 0
70
72
  optimize.assert a < 10
71
73
  optimize.minimize a
@@ -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(store(const(false), 1, true), 2, true)",
29
- b => "store(store(const(false), 3, true), 2, true)",
30
- c => "store(store(store(const(false), 1, true), 3, true), 2, true)",
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(store(const(false), 1, true), 2, true)",
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(store(const(false), 1, true), 2, true)",
59
- b => "store(store(const(false), 3, true), 2, true)",
60
- c => "store(store(store(const(false), 1, true), 3, true), 2, true)",
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
- # "mk bool var" added in 4.6.0
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 "third way (until 4.6 fix)" do
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 "third way (until 4.6 fix)" do
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 "third way" do
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.20180629
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: 2018-06-29 00:00:00.000000000 Z
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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
- post_install_message:
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
- rubyforge_project:
272
- rubygems_version: 2.7.3
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: []