z3 0.0.20181229 → 0.0.20211213

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.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -2
  3. data/Rakefile +8 -1
  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/skyscrapers +118 -0
  57. data/examples/skyscrapers-1.txt +6 -0
  58. data/examples/skyscrapers-2.txt +11 -0
  59. data/examples/star_battle +134 -0
  60. data/examples/star_battle-1.txt +10 -0
  61. data/examples/stitches +180 -0
  62. data/examples/stitches-1.txt +11 -0
  63. data/examples/sudoku +2 -2
  64. data/examples/suguru +199 -0
  65. data/examples/suguru-1.txt +17 -0
  66. data/examples/verbal_arithmetic +2 -2
  67. data/examples/yajilin +268 -0
  68. data/examples/yajilin-1.txt +10 -0
  69. data/lib/z3/expr/expr.rb +3 -3
  70. data/lib/z3/low_level_auto.rb +138 -10
  71. data/lib/z3/optimize.rb +1 -0
  72. data/lib/z3/very_low_level.rb +5 -1
  73. data/lib/z3/very_low_level_auto.rb +35 -3
  74. data/spec/integration/abc_path_spec.rb +21 -0
  75. data/spec/integration/aquarium_spec.rb +27 -0
  76. data/spec/integration/cats_organized_neatly_spec.rb +14 -0
  77. data/spec/integration/color_nonogram_spec.rb +28 -0
  78. data/spec/integration/dominion_spec.rb +14 -0
  79. data/spec/integration/dominosa_spec.rb +21 -0
  80. data/spec/integration/eulero_spec.rb +11 -0
  81. data/spec/integration/futoshiki_spec.rb +23 -0
  82. data/spec/integration/kakurasu_spec.rb +18 -0
  83. data/spec/integration/killer_sudoku_spec.rb +10 -0
  84. data/spec/integration/knights_puzzle_spec.rb +11 -11
  85. data/spec/integration/kropki_spec.rb +19 -0
  86. data/spec/integration/miracle_sudoku_spec.rb +15 -0
  87. data/spec/integration/mortal_coil_puzzle_spec.rb +8 -6
  88. data/spec/integration/nanro_spec.rb +39 -0
  89. data/spec/integration/nine_clocks_spec.rb +30 -0
  90. data/spec/integration/regexp_crossword_solver_spec.rb +1 -1
  91. data/spec/integration/renzoku_spec.rb +23 -0
  92. data/spec/integration/sandwich_sudoku_spec.rb +15 -0
  93. data/spec/integration/skyscraper_spec.rb +10 -0
  94. data/spec/integration/star_battle_spec.rb +27 -0
  95. data/spec/integration/stitches_spec.rb +25 -0
  96. data/spec/integration/suguru_spec.rb +23 -0
  97. data/spec/integration/yajilin_spec.rb +25 -0
  98. data/spec/optimize_spec.rb +3 -1
  99. data/spec/set_expr_spec.rb +15 -9
  100. data/spec/solver_spec.rb +1 -2
  101. data/spec/spec_helper.rb +15 -0
  102. metadata +86 -7
@@ -0,0 +1,10 @@
1
+ describe "Killer Sudoku" do
2
+ it do
3
+ expect("killer_sudoku").to have_output <<EOF
4
+ 4 2 3 1
5
+ 3 1 2 4
6
+ 2 4 1 3
7
+ 1 3 4 2
8
+ EOF
9
+ end
10
+ end
@@ -1,5 +1,5 @@
1
1
  # There are multiple solutions, so this test is nondeterministic
2
- # Changing it to one returned by z3 4.7.1, but perhaps it needs some serious fixing
2
+ # This is what Z3 4.8.13 returns
3
3
  describe "Knights Swap Puzzle" do
4
4
  it do
5
5
  expect("knights_puzzle").to have_output <<EOF
@@ -9,28 +9,28 @@ bbb.
9
9
  xbxw
10
10
  ..ww
11
11
  x.xw
12
- b: 0,0 -> 1,2
12
+ w: 2,2 -> 3,0
13
13
 
14
14
  State 1:
15
- .bb.
15
+ bbbw
16
16
  xbxw
17
- .bww
17
+ ...w
18
18
  x.xw
19
- w: 2,2 -> 3,0
19
+ b: 1,0 -> 2,2
20
20
 
21
21
  State 2:
22
- .bbw
22
+ b.bw
23
23
  xbxw
24
- .b.w
24
+ ..bw
25
25
  x.xw
26
- b: 1,0 -> 2,2
26
+ w: 3,1 -> 1,0
27
27
 
28
28
  State 3:
29
+ bwbw
30
+ xbx.
29
31
  ..bw
30
- xbxw
31
- .bbw
32
32
  x.xw
33
- w: 3,1 -> 1,0
33
+ b: 0,0 -> 1,2
34
34
 
35
35
  State 4:
36
36
  .wbw
@@ -0,0 +1,19 @@
1
+ describe "Kropki" do
2
+ it do
3
+ expect("kropki").to have_output <<EOF
4
+ +-+-+-+-+-+-+
5
+ |5|1*2|6*3o4|
6
+ +-+-+-+*+o+*+
7
+ |1|6o5|3o4*2|
8
+ +-+-+o+o+-+-+
9
+ |3o4|6|2o1|5|
10
+ +*+o+-+-+o+-+
11
+ |6*3o4o5|2*1|
12
+ +-+-+-+o+-+-+
13
+ |2|5|1|4|6*3|
14
+ +*+-+-+-+o+*+
15
+ |4*2o3|1|5o6|
16
+ +-+-+-+-+-+-+
17
+ EOF
18
+ end
19
+ end
@@ -0,0 +1,15 @@
1
+ describe "Miracle Sudoku" do
2
+ it do
3
+ expect("miracle_sudoku").to have_output <<EOF
4
+ 4 8 3 7 2 6 1 5 9
5
+ 7 2 6 1 5 9 4 8 3
6
+ 1 5 9 4 8 3 7 2 6
7
+ 8 3 7 2 6 1 5 9 4
8
+ 2 6 1 5 9 4 8 3 7
9
+ 5 9 4 8 3 7 2 6 1
10
+ 3 7 2 6 1 5 9 4 8
11
+ 6 1 5 9 4 8 3 7 2
12
+ 9 4 8 3 7 2 6 1 5
13
+ EOF
14
+ end
15
+ end
@@ -1,12 +1,14 @@
1
+ # There are multiple solutions, so this test is nondeterministic
2
+ # This is what Z3 4.8.13 returns
1
3
  describe "Mortal Coil Puzzle" do
2
4
  it do
3
5
  expect("mortal_coil_puzzle").to have_output <<EOF
4
- 22 21 20 ### 14 13
5
- 23 ### 19 ### 15 12
6
- 24 1 18 17 16 11
7
- 25 2 3 4 ### 10
8
- 26 ### 30 5 ### 9
9
- 27 28 29 6 7 8
6
+ 4 3 2 ### 20 19
7
+ 5 ### 1 ### 21 18
8
+ 6 25 24 23 22 17
9
+ 7 26 27 28 ### 16
10
+ 8 ### 30 29 ### 15
11
+ 9 10 11 12 13 14
10
12
  EOF
11
13
  end
12
14
  end
@@ -0,0 +1,39 @@
1
+ describe "Nanro" do
2
+ it do
3
+ expect("nanro").to have_output <<~EOF
4
+ *---*---*---*---*---*---*---*---*
5
+ | | | |
6
+ | 6 6 6 6 | 1 | 3 3 |
7
+ | | | |
8
+ * *---* *---* * *
9
+ | | | | | | |
10
+ | 6 | 1 | 6 | 1 | | 3 |
11
+ | | | | | | |
12
+ *---* *---*---*---* *---* *
13
+ | | | | | | | |
14
+ | 1 | | 1 | 2 | | 3 | |
15
+ | | | | | | | |
16
+ *---*---*---*---* *---* * *
17
+ | | | | | | | | |
18
+ | | 2 | 1 | | 2 | 1 | 3 | |
19
+ | | | | | | | | |
20
+ * * *---* * *---* *---*
21
+ | | | | | | |
22
+ | 1 | 2 | 1 | | 3 | 4 |
23
+ | | | | | | |
24
+ * *---* *---*---*---*---* *
25
+ | | | | | | | |
26
+ | | 1 | | 2 | 1 | 3 | 4 |
27
+ | | | | | | | |
28
+ * *---*---* *---* * *
29
+ | | | | | | |
30
+ | | 2 | 1 | 2 | 3 3 | 4 |
31
+ | | | | | | |
32
+ *---* * *---*---*---*---* *
33
+ | | | | | | |
34
+ | 1 | 2 | | 1 | 2 2 | 4 |
35
+ | | | | | | |
36
+ *---*---*---*---*---*---*---*---*
37
+ EOF
38
+ end
39
+ end
@@ -0,0 +1,30 @@
1
+ describe "Nine Clocks" do
2
+ it do
3
+ expect("nine_clocks").to have_output <<EOF
4
+ IN:
5
+ 1 0 1
6
+ 0 2 3
7
+ 1 3 2
8
+ OUT:
9
+ 1 0 0
10
+ 0 0 0
11
+ 0 0 0
12
+ IN:
13
+ 0 2 0
14
+ 2 3 2
15
+ 3 3 3
16
+ OUT:
17
+ 0 1 0
18
+ 0 0 0
19
+ 0 0 0
20
+ IN:
21
+ 2 3 2
22
+ 3 1 3
23
+ 2 3 2
24
+ OUT:
25
+ 0 0 0
26
+ 0 1 0
27
+ 0 0 0
28
+ EOF
29
+ end
30
+ 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") }
@@ -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 => "(lambda ((x!1 Int)) (or (= x!1 1) (= x!1 2)))",
29
- b => "(lambda ((x!1 Int)) (or (= x!1 3) (= x!1 2)))",
30
- c => "(lambda ((x!1 Int)) (or (= x!1 1) (= x!1 3) (= x!1 2)))",
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 => "(lambda ((x!1 Int)) (or (= x!1 1) (= x!1 2)))",
45
- b => "(lambda ((x!1 Int)) (not (= x!1 1)))",
46
- c => "(lambda ((x!1 Int)) (= x!1 1))",
48
+ a => "store(const(true), 3, false)",
49
+ b => "store(const(true), 1, false)",
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 => "(lambda ((x!1 Int)) (or (= x!1 1) (= x!1 2)))",
59
- b => "(lambda ((x!1 Int)) (or (= x!1 3) (= x!1 2)))",
60
- c => "(lambda ((x!1 Int)) (or (= x!1 1) (= x!1 3) (= x!1 2)))",
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,8 +37,7 @@ 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
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.20181229
4
+ version: 0.0.20211213
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-12-29 00:00:00.000000000 Z
11
+ date: 2021-12-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '1.3'
83
+ - !ruby/object:Gem::Dependency
84
+ name: paint
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 2.1.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: 2.1.0
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: ffi
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -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
@@ -252,7 +332,7 @@ homepage: https://github.com/taw/z3
252
332
  licenses:
253
333
  - MIT
254
334
  metadata: {}
255
- post_install_message:
335
+ post_install_message:
256
336
  rdoc_options: []
257
337
  require_paths:
258
338
  - lib
@@ -268,9 +348,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
268
348
  version: '0'
269
349
  requirements:
270
350
  - z3 library (4.8+)
271
- rubyforge_project:
272
- rubygems_version: 2.7.6
273
- signing_key:
351
+ rubygems_version: 3.1.2
352
+ signing_key:
274
353
  specification_version: 4
275
354
  summary: Z3 Constraint Solver
276
355
  test_files: []