namero 0.0.3 → 0.0.4
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/lib/namero/board.rb +20 -55
- data/lib/namero/solver.rb +6 -6
- data/lib/namero/solver_extensions.rb +13 -13
- data/lib/namero/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4ec3f119c8411016246a15c40422b349db2b79eda32597a34ed3bca564821311
|
4
|
+
data.tar.gz: f2e5c017ca3b45fa298607d83d5cc70b270bc139cda30ecb540c9f0fc8bf760d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cca575989a770f0383c3fc62e3f95e3f663465b0a776f266110bfbd950f4142eae14dc4060c9d8431145597aeec5f64347f5d5cb19e1825820af9b899b33b914
|
7
|
+
data.tar.gz: 585ee296abb31a139033b7d4a062b4508d032f9039d376a3f18bb5e1b30613bedfb3b1d564d03190ec17157a962a37c1e23e49e964f75719291f22d57d02ec40
|
data/lib/namero/board.rb
CHANGED
@@ -23,40 +23,22 @@ module Namero
|
|
23
23
|
raise ArgumentError if values.size != n**2
|
24
24
|
@n = n
|
25
25
|
@values = values
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
n.times do |i|
|
37
|
-
@values[start+i] = value[i]
|
38
|
-
end
|
39
|
-
when :column
|
40
|
-
x = idx % n
|
41
|
-
n.times do |i|
|
42
|
-
@values[i * n + x] = value[i]
|
43
|
-
end
|
44
|
-
when :block
|
45
|
-
x = idx % n
|
46
|
-
y = idx / n
|
47
|
-
start_x = x / root_n * root_n
|
48
|
-
start_y = y / root_n * root_n
|
49
|
-
|
50
|
-
value_idx = 0
|
26
|
+
@rows = Array.new(n) do |i|
|
27
|
+
start = i * n
|
28
|
+
values[start...start+n]
|
29
|
+
end
|
30
|
+
@columns = Array.new(n) do |x|
|
31
|
+
Array.new(n) { |i| values[i * n + x] }
|
32
|
+
end
|
33
|
+
@blocks = Array.new(n) do |i|
|
34
|
+
idx = i % root_n * root_n + (i / root_n) * n * root_n
|
35
|
+
block = []
|
51
36
|
root_n.times do |y_offset|
|
52
37
|
root_n.times do |x_offset|
|
53
|
-
|
54
|
-
self[start_x + x_offset + (start_y + y_offset) * n] = value[value_idx]
|
55
|
-
value_idx += 1
|
38
|
+
block << values[idx + x_offset + y_offset * n]
|
56
39
|
end
|
57
40
|
end
|
58
|
-
|
59
|
-
raise "Unknown type: #{type}"
|
41
|
+
block
|
60
42
|
end
|
61
43
|
end
|
62
44
|
|
@@ -65,25 +47,12 @@ module Namero
|
|
65
47
|
when :index
|
66
48
|
@values[idx]
|
67
49
|
when :row
|
68
|
-
|
69
|
-
@values[start...start+@n]
|
50
|
+
@rows[idx / n]
|
70
51
|
when :column
|
71
52
|
x = idx % n
|
72
|
-
|
53
|
+
@columns[x]
|
73
54
|
when :block
|
74
|
-
|
75
|
-
y = idx / n
|
76
|
-
start_x = x / root_n * root_n
|
77
|
-
start_y = y / root_n * root_n
|
78
|
-
|
79
|
-
[].tap do |res|
|
80
|
-
root_n.times do |y_offset|
|
81
|
-
root_n.times do |x_offset|
|
82
|
-
|
83
|
-
res << self[start_x + x_offset + (start_y + y_offset) * n]
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
55
|
+
@blocks[idx / n / root_n * root_n + idx % n / root_n]
|
87
56
|
else
|
88
57
|
raise "Unknown type: #{type}"
|
89
58
|
end
|
@@ -101,14 +70,12 @@ module Namero
|
|
101
70
|
end
|
102
71
|
end
|
103
72
|
|
104
|
-
def each_affected_group
|
73
|
+
def each_affected_group(&block)
|
105
74
|
return enum_for(__method__) unless block_given?
|
106
75
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
yield self[(i % root_n) * root_n + (i / root_n) * n * root_n, :block]
|
111
|
-
end
|
76
|
+
@rows.each(&block)
|
77
|
+
@columns.each(&block)
|
78
|
+
@blocks.each(&block)
|
112
79
|
end
|
113
80
|
|
114
81
|
def complete?
|
@@ -185,9 +152,7 @@ module Namero
|
|
185
152
|
out
|
186
153
|
end
|
187
154
|
|
188
|
-
private
|
189
|
-
|
190
|
-
def root_n
|
155
|
+
private def root_n
|
191
156
|
Integer.sqrt(n)
|
192
157
|
end
|
193
158
|
end
|
data/lib/namero/solver.rb
CHANGED
@@ -38,20 +38,20 @@ module Namero
|
|
38
38
|
def fill_candidate_for(v)
|
39
39
|
board[v.index, :row].each do |v2|
|
40
40
|
unless v2.value
|
41
|
-
v2.candidates.delete(v.value)
|
42
|
-
updated_candidate_queue << v2.index
|
41
|
+
changed = v2.candidates.delete(v.value)
|
42
|
+
updated_candidate_queue << v2.index if changed
|
43
43
|
end
|
44
44
|
end
|
45
45
|
board[v.index, :column].each do |v2|
|
46
46
|
unless v2.value
|
47
|
-
v2.candidates.delete(v.value)
|
48
|
-
updated_candidate_queue << v2.index
|
47
|
+
changed = v2.candidates.delete(v.value)
|
48
|
+
updated_candidate_queue << v2.index if changed
|
49
49
|
end
|
50
50
|
end
|
51
51
|
board[v.index, :block].each do |v2|
|
52
52
|
unless v2.value
|
53
|
-
v2.candidates.delete(v.value)
|
54
|
-
updated_candidate_queue << v2.index
|
53
|
+
changed = v2.candidates.delete(v.value)
|
54
|
+
updated_candidate_queue << v2.index if changed
|
55
55
|
end
|
56
56
|
end
|
57
57
|
v.candidates = [v.value]
|
@@ -17,22 +17,22 @@ module Namero
|
|
17
17
|
|
18
18
|
def solve
|
19
19
|
board.each_affected_group do |group|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
box = value
|
29
|
-
end
|
20
|
+
table = []
|
21
|
+
group.each do |value|
|
22
|
+
next if value.value
|
23
|
+
value.candidates.each do |c|
|
24
|
+
if table[c].nil?
|
25
|
+
table[c] = value
|
26
|
+
elsif table[c]
|
27
|
+
table[c] = false
|
30
28
|
end
|
31
29
|
end
|
30
|
+
end
|
32
31
|
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
table.each.with_index do |value, idx|
|
33
|
+
if value
|
34
|
+
value.candidates = [idx]
|
35
|
+
queue << value.index
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
data/lib/namero/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: namero
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masataka Pocke Kuwabara
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-05-
|
11
|
+
date: 2020-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|