sudoku-jedi 1.0.0 → 1.0.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 715508f1c610092734bdf40ae65db9024929c0ff
4
- data.tar.gz: 9931aab8641b370f75f7953b9edfdbf6de5407b5
3
+ metadata.gz: f4a65264e38d3e9e78a2e0cbdf9e433e91efcb25
4
+ data.tar.gz: 3aed78fd176a87dab990ea30b04e1b0f51392c7f
5
5
  SHA512:
6
- metadata.gz: e915a77d5f995f351b277794d81b49bb181a1eef971b7ea6887c2c71f8a0447341a52289c991b0f3625414f61cd68c6f8bd46503148e3ea8d1552ab45541ecf4
7
- data.tar.gz: 385477d7091398a3a9755d77ee87f8fbfd17e630733e27ea24460a9de1b6a2a20d3046113a9fb7b9e2ce9b05d675f7beca9906a6adeca4ecfbdd1e618858ad2d
6
+ metadata.gz: 1b138a51927e75eb17fd5091635c705f6e65e7dd89a974295400836e9772a021af6d25981480b9dabba4cf273049c19dc3e89f28ca19dc1e9555a29ca40757f1
7
+ data.tar.gz: fb7154e8cf0595d188695d97b9319889a638c92feed36fa4dd6691243a3f60da2246a82f3b24126d2c5a1d3ecd1860942d905f83f69205b395d4ff65c00ff578
data/README.md CHANGED
@@ -4,6 +4,8 @@
4
4
  [![Gem Version](https://badge.fury.io/rb/sudoku-jedi.svg)](http://badge.fury.io/rb/sudoku-jedi)
5
5
 
6
6
  Currently solves easy to moderate sudoku puzzles in a flash!
7
+ This sudoku solver implementation uses solution tactics such as naked pairs, hidden pairs, box/line reduction, and X-wing strategies for tougher puzzles.
8
+ You can read about these techniques [here](http://www.sudokuwiki.org/sudoku.htm)
7
9
 
8
10
  ## Installation
9
11
 
@@ -19,7 +21,7 @@ And then execute:
19
21
 
20
22
  Or install it yourself as:
21
23
 
22
- $ gem install sudoku_solver
24
+ $ gem install sudoku-jedi
23
25
 
24
26
  ## Usage
25
27
 
data/lib/sudoku_solver.rb CHANGED
@@ -1,8 +1,4 @@
1
1
  require "sudoku_solver/version"
2
- require "sudoku_solver/cell"
3
- require "sudoku_solver/box"
4
- require 'sudoku_solver/row'
5
- require 'sudoku_solver/column'
6
2
  require 'sudoku_solver/grid'
7
3
  require 'sudoku_solver/cli'
8
4
  module SudokuSolver
@@ -1,4 +1,3 @@
1
- require_relative 'box'
2
1
  require_relative 'point'
3
2
  require 'set'
4
3
 
@@ -12,7 +11,7 @@ class Grid
12
11
  end
13
12
  end
14
13
 
15
- @points.select { |po| po.value == 0 }.each do |poi|
14
+ remaining_points.each do |poi|
16
15
  poi.nums = Array(1..9) - (get_box(poi.box) + get_row(poi.y) + get_column(poi.x))
17
16
  end
18
17
  end
@@ -191,8 +190,6 @@ class Grid
191
190
 
192
191
  def hidden_pairs
193
192
  all_naked_pairs
194
- # @points.select { |p| p.x == 6 && p.y == 4 }.first.nums = @points.select { |p| p.x == 6 && p.y == 4 }.first.nums - [1,5]
195
- # @points.select { |p| p.x == 6 && p.y == 6 }.first.nums = @points.select { |p| p.x == 6 && p.y == 6 }.first.nums - [3,6]
196
193
 
197
194
  remaining_points.each do |point|
198
195
  next if point.nums.count <= 1
@@ -219,12 +216,17 @@ class Grid
219
216
  [:x, :y].each do |symbol|
220
217
  arr = @points.select{ |p| p.nums.include?(num) && p.send(flip(symbol)) == point.send(flip(symbol)) && p.value == 0 }
221
218
  if arr.count == 2 && @points.select { |p| p.value == num && p.send(flip(symbol)) == point.send(flip(symbol)) }.count == 0
222
- last = @points.select { |p| p.nums.include?(num) && arr.map{ |a| a.send(symbol) }.include?(p.send(symbol)) && (!arr.include?(p)) && p.value == 0 && check_row(p.y,p,num,symbol) }
223
- if last.all? { |x| x.send(flip(symbol)) == last.first.send(flip(symbol)) } && last.count == 2 && @points.select { |p| p.value == num && p.send(flip(symbol)) == last.first.send(flip(symbol)) }.count == 0
224
- final = arr + last
225
- places = final.map { |m| m.send(symbol) }.uniq
226
- remaining_points.select { |p| places.include?(p.send(symbol)) && (!final.include?(p)) }.each do |poi|
227
- poi.nums = poi.nums - [num]
219
+ last = @points.select { |p| p.nums.include?(num) &&
220
+ arr.map{ |a| a.send(symbol) }.include?(p.send(symbol)) &&
221
+ (!arr.include?(p)) &&
222
+ p.value == 0 && check_row(p.y,p,num,symbol) }
223
+ if last.all? { |x| x.send(flip(symbol)) == last.first.send(flip(symbol)) } &&
224
+ last.count == 2 &&
225
+ @points.select { |p| p.value == num && p.send(flip(symbol)) == last.first.send(flip(symbol)) }.count == 0
226
+ final = arr + last
227
+ places = final.map { |m| m.send(symbol) }.uniq
228
+ remaining_points.select { |p| places.include?(p.send(symbol)) && (!final.include?(p)) }.each do |poi|
229
+ poi.nums = poi.nums - [num]
228
230
  end
229
231
  end
230
232
  end
@@ -1,4 +1,3 @@
1
- require_relative 'container'
2
1
  require 'set'
3
2
 
4
3
  class Point
@@ -16,7 +15,6 @@ class Point
16
15
  @nums.sort
17
16
  end
18
17
 
19
-
20
18
  def share(point)
21
19
  a = []
22
20
  a << :box if @box == point.box
@@ -62,10 +60,5 @@ class Point
62
60
  @position.y
63
61
  end
64
62
 
65
- def blank_spaces
66
- [(position.y / 3) * 3 + (position.x / 3), position.y, position.x]
67
- end
68
-
69
-
70
63
  end
71
64
 
@@ -1,3 +1,3 @@
1
1
  module SudokuSolver
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sudoku-jedi
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - ajn123
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-18 00:00:00.000000000 Z
11
+ date: 2015-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -183,17 +183,10 @@ files:
183
183
  - Rakefile
184
184
  - bin/sudoku-jedi
185
185
  - lib/sudoku_solver.rb
186
- - lib/sudoku_solver/box.rb
187
- - lib/sudoku_solver/cell.rb
188
186
  - lib/sudoku_solver/cli.rb
189
- - lib/sudoku_solver/column.rb
190
- - lib/sudoku_solver/container.rb
191
187
  - lib/sudoku_solver/grid.rb
192
188
  - lib/sudoku_solver/point.rb
193
- - lib/sudoku_solver/row.rb
194
189
  - lib/sudoku_solver/version.rb
195
- - spec/box_spec.rb
196
- - spec/cell_spec.rb
197
190
  - spec/grid_spec.rb
198
191
  - spec/spec_helper.rb
199
192
  - sudoku_solver.gemspec
@@ -222,7 +215,5 @@ signing_key:
222
215
  specification_version: 4
223
216
  summary: Solves a sudoku puzzle
224
217
  test_files:
225
- - spec/box_spec.rb
226
- - spec/cell_spec.rb
227
218
  - spec/grid_spec.rb
228
219
  - spec/spec_helper.rb
@@ -1,16 +0,0 @@
1
- require_relative 'container'
2
-
3
- class Box < Container
4
- attr_accessor :box, :position
5
-
6
- def initialize(arr, y=0, x=0)
7
- super(arr)
8
- Struct.new("Coordinate", :x, :y) if !Struct::const_defined? "Coordinate"
9
- @position = Struct::Coordinate.new(x, y)
10
- end
11
-
12
- def blank_spaces
13
- [(position.y / 3) * 3 + (position.x / 3), position.y, position.x]
14
- end
15
-
16
- end
@@ -1,6 +0,0 @@
1
- class Cell
2
- attr_accessor :num
3
- def initialize(num)
4
- @num = num
5
- end
6
- end
@@ -1,6 +0,0 @@
1
- require_relative 'container'
2
- class Column < Container
3
-
4
-
5
-
6
- end
@@ -1,35 +0,0 @@
1
- class Container
2
-
3
- attr_accessor :arr, :remaining_blocks
4
- def initialize(arr)
5
- @arr = arr
6
- end
7
- # Find the missing elements in the section
8
- def difference
9
- complete
10
- remaining
11
- end
12
-
13
- def remaining
14
- Array(1..9) - arr
15
- end
16
-
17
- def arr
18
- @arr.map!(&:to_i)
19
- end
20
-
21
- def contain?(num)
22
- complete
23
- arr.include? num
24
- end
25
-
26
- def pencil_in
27
- end
28
-
29
-
30
- def complete
31
- if remaining.count == 1
32
- arr.map { |elem| elem == 0 ? remaining.first : elem }
33
- end
34
- end
35
- end
@@ -1,4 +0,0 @@
1
- require_relative 'container'
2
- class Row < Container
3
-
4
- end
data/spec/box_spec.rb DELETED
@@ -1,25 +0,0 @@
1
- require 'spec_helper'
2
- describe Box do
3
- let(:box) { Box.new([1,2,4,5,6,7,8,9], 0, 5)}
4
- context "Coordinates" do
5
- it "is correct" do
6
- expect(box.blank_spaces).to eql([1, 0, 5])
7
- @let_box = Box.new([], 8, 8)
8
- expect(@let_box.blank_spaces).to eql([8, 8, 8])
9
- end
10
- end
11
- context "#differance" do
12
- it "shows the incorrect differance" do
13
- expect(box.difference).to_not eql(Array(5..9))
14
- end
15
- it "show the correct differance" do
16
- expect(box.difference).to eql([3])
17
- end
18
- end
19
- context "#complete" do
20
- it "completes the cell" do
21
- @in_box = Box.new([1,0,3,4,5,6,7,8,9])
22
- expect(@in_box.complete).to eql(Array(1..9))
23
- end
24
- end
25
- end
data/spec/cell_spec.rb DELETED
@@ -1,8 +0,0 @@
1
- require 'spec_helper'
2
- describe Cell do
3
- let(:cell) { Cell.new(234) }
4
- it "#num" do
5
- expect(cell.num).to eql(234)
6
- end
7
-
8
- end