-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsudoku3.rb
192 lines (147 loc) · 7.03 KB
/
sudoku3.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
#########refactored sudoku ###############
class Game
def initialize(gamematrix)
@start=gamematrix.map { |e| e.map { |f| f } }
@rows=gamematrix#.map { |e| e.map { |f| f } }
@nilspaces=findnils
@startnils=findnils.map { |e| e.map { |f| f } }
end
def findnils
#puts "finding the nils"
#sleep 0.1
nils=[]
for g in ([email protected])
for p in ([email protected])
if @rows[g][p] != nil
#puts "[#{g}][#{p}]"
else
#puts " [#{g}][#{p}] :found a nil!!!"
nils<<[p,g]
end
end
end
return nils
end
######### main game method #############
######### main game method #############
def sudku
puts "we\'re in the sudku method our start matrix is #{@start}"
#sleep 0.8
#while !win?
#while [email protected]?
while @rows.any? { |e| e.any? { |f| f==nil } }
# begin
#puts '5 now our @nilspaces array now looks like this: '
#puts "nils: [#{@nilspaces}] length #{@nilspaces.length}"
#sleep 0.4
[email protected] #randomly find an empty nil space, find its coordinates in the matrix
#puts "out current nilspace coordinate is [#{current}]"
#sleep 0.2
@nilspaces.delete(current)
#puts "after deleting the picked nilspace: [#{@nilspaces}] length #{@nilspaces.length}"
#sleep 0.2
#then use the guessNum method to guess based on the coordinates
if current!=nil
guessedN=guessNum(@rows.transpose[current[0]], @rows[current[1]])
else
reset
end
#puts "guessed: #{guessedN}"
#sleep 0.2
#assign out guessed number to replace the nil
if guessedN != nil
if current!=nil
@rows[current[1]][current[0]]=guessedN
else
reset
end
#@start[current[0]][current[1]]=nil
#sleep 0.1
#puts "guessed returns a number(#{guessedN}) so @rows is #{@rows[current[0]][current[1]]}"
#puts ''
#puts "start matrix - #{@start}"
#puts "row matrix - #{@rows}"
#puts " =====> =====> =====> start matrix: #{@start==@rows} <===== <===== <====="
#puts " =====> =====> =====> start nils: #{@startnils} length #{@startnils.length} <===== <===== <====="
#puts ''
else
#puts " == returned nil so now we must reset == "
reset
end
display
#sleep 0.4
end
puts "SUDOKU!!!!!"
end
def reset
# puts "=========================="
# sleep 1.0
#reset
# puts "resets everything"
#sleep 0.8
@[email protected] { |e| e.map { |f| f } }
# puts "rows reset?: #{@rows==@start} #{@start} "
@[email protected] { |e| e.map { |f| f } }
# puts "nils reset?: #{@nilspaces==@startnils} #{@startnils} length #{@nilspaces.length}"
#puts "=========================="
#sleep 2.0
end
def guessNum(vset, hset)
#p "selecting numbers for #{vset} and #{hset}"
#create an array of numbers to choose from
#subtract everything in the choice array thats in the hset and vset
#then return a sampled #number from it
([email protected]).to_a.delete_if {|e| (hset.include?(e) || vset.include?(e))}.sample
nums=([email protected]).to_a
#p "our starting pool: #{nums}"
#sleep 0.5
#p "subtracts #{hset}"
#sleep 0.5
nums.delete_if {|e| hset.include?(e) }
#sleep 0.5
#p "our remaining set #{nums}"
#sleep 0.5
#p "subtracts #{vset}"
#sleep 0.5
nums.delete_if {|e| vset.include?(e) }
#sleep 0.5
#p "our remaining set #{nums}"
#sleep 0.5
return nums.sample
end
def display
# puts "--------------------"
for g in @rows
out=" "
for l in g
out+= "#{'%03s' % l.to_s}"
end
out+=" \n"
puts out
end
# puts "--------------------"
end
def win?
@rows.all? { |e| [email protected] } && @rows.transpose.all? { |e| [email protected] } && @rows.all? { |e| e.all? { |f| f!=nil } }
end
end
easygame3x3=[[1,nil,nil],[2,3,nil],[nil,nil,2]]
easygame4x4=[[4,nil,nil,nil],[nil,3,4,nil],[nil,1,2,nil],[nil,nil,nil,1]]
mediumgame6x6=[[nil,nil,nil,1,5,nil],[4,nil,3,nil,nil,nil],[nil,nil,nil,nil,nil,nil],[nil,3,nil,5,nil,2],[nil,nil,nil,nil,2,nil],[nil,nil,nil,nil,1,nil]]
hardfuckingame9x9=[[nil,nil,2,nil,3,nil,nil,nil,nil],[5,nil,nil,9,nil,nil,nil,2,7],[4,nil,6,nil,nil,2,5,nil,nil],[nil,4,nil,nil,nil,nil,9,nil,nil],[9,nil,nil,4,8,7,nil,nil,3],[nil,nil,5,nil,nil,nil,nil,7,nil],[nil,nil,4,2,nil,nil,3,nil,8],[8,3,nil,nil,nil,4,nil,nil,2],[nil,nil,nil,nil,6,nil,7,nil,nil]]
gameone=Game.new(hardfuckingame9x9)
gameone.sudku
#gameone.original
#puts sudoku([[1,nil,nil],[2,3,nil],[nil,nil,2]])
#puts sudoku([[4,nil,nil,nil],[nil,3,4,nil],[nil,1,2,nil],[nil,nil,nil,1]])
#puts sudoku([[nil,nil,nil,nil,3],[nil,2,nil,nil,nil],[nil,nil,nil,nil,5],[nil,nil,2,1,nil],[1,nil,nil,nil,nil]])
######### hard problems ############
#puts sudoku([[nil,nil,nil,1,5,nil],[4,nil,3,nil,nil,nil],[nil,nil,nil,nil,nil],[nil,3,nil,5,nil,2],[nil,nil,nil,nil,2,nil],[nil,nil,nil,nil,1,nil]])
#puts sudoku([[nil,nil,3,nil,5,nil,8,nil,nil],[nil,8,nil,nil,nil,nil,nil,2,nil],[5,nil,nil,nil,nil,1,nil,nil,6],[nil,nil,1,9,nil,4,nil,nil,nil],[7,nil,nil,nil,nil,nil,nil,nil,1],[nil,nil,nil,6,nil,8,9,nil,nil],[6,nil,nil,2,nil,nil,nil,nil,9],[nil,2,nil,nil,nil,nil,nil,7,nil],[nil,nil,9,nil,6,nil,3,nil,nil]])
#puts sudoku([[nil,nil,nil,nil,nil],[nil,4,nil,nil,nil],[nil,nil,nil,5,nil],[1,nil,nil,nil,nil],[nil,nil,5,nil,2]])
#puts sudoku([[nil,2,nil,4,nil],[nil,nil,3,nil,nil],[nil,1,nil,2,nil],[nil,4,nil,nil,nil],[nil,nil,nil,nil,4]])
#puts sudoku([[5,nil,nil,nil,nil],[nil,nil,nil,5,nil],[nil,4,nil,nil,nil],[nil,nil,1,nil,nil],[nil,nil,nil,3,nil]])
#puts sudoku([[nil,nil,4,6,nil,nil],[nil,3,nil,nil,nil,nil],[3,4,nil,2,nil,nil],[5,nil,2,nil,6,nil],[2,5,nil,nil,3,nil],[nil,nil,nil,nil,nil,1]])
##puts sudoku([[nil,5,nil,nil,nil,2],[nil,nil,nil,nil,nil,4],[nil,nil,4,1,nil,nil],[1,nil,3,2,nil,nil],[2,nil,nil,nil,6,nil],[nil,4,1,5,2,nil]])
#puts sudoku([[nil,nil,2,nil,3,nil,nil,nil,nil],[5,nil,nil,9,nil,nil,nil,2,7],[4,nil,6,nil,nil,2,5,nil,nil],[nil,4,nil,nil,nil,nil,9,nil,nil],[9,nil,nil,4,8,7,nil,nil,3],[nil,nil,5,nil,nil,nil,nil,7,nil],[nil,nil,4,2,nil,nil,3,nil,8],[8,3,nil,nil,nil,4,nil,nil,2],[nil,nil,nil,nil,6,nil,7,nil,nil]])