Skip to content

Instantly share code, notes, and snippets.

@ayoformayo
Created June 9, 2013 23:42
Show Gist options
  • Save ayoformayo/5745738 to your computer and use it in GitHub Desktop.
Save ayoformayo/5745738 to your computer and use it in GitHub Desktop.
# row coordinate logic
ROW_1 = MY_BOARD[0]
ROW_2 = MY_BOARD[1]
ROW_3 = MY_BOARD[2]
ROW_4 = MY_BOARD[3]
ROW_5 = MY_BOARD[4]
ROW_6 = MY_BOARD[5]
ROW_7 = MY_BOARD[6]
ROW_8 = MY_BOARD[7]
ROW_9 = MY_BOARD[8]
# column coordinate logic
COLUMN_1 = [
MY_BOARD[0][0],MY_BOARD[1][0],MY_BOARD[2][0],
MY_BOARD[3][0],MY_BOARD[4][0],MY_BOARD[5][0],
MY_BOARD[6][0],MY_BOARD[7][0],MY_BOARD[8][0]
]
COLUMN_2 = [
MY_BOARD[0][1],MY_BOARD[1][1],MY_BOARD[2][1],
MY_BOARD[3][1],MY_BOARD[4][1],MY_BOARD[5][1],
MY_BOARD[6][1],MY_BOARD[7][1],MY_BOARD[8][1]
]
COLUMN_3 = [
MY_BOARD[0][2],MY_BOARD[1][2],MY_BOARD[2][2],
MY_BOARD[3][2],MY_BOARD[4][2],MY_BOARD[5][2],
MY_BOARD[6][2],MY_BOARD[7][2],MY_BOARD[8][2]
]
COLUMN_4 = [
MY_BOARD[0][3],MY_BOARD[1][3],MY_BOARD[2][3],
MY_BOARD[3][3],MY_BOARD[4][3],MY_BOARD[5][3],
MY_BOARD[6][3],MY_BOARD[7][3],MY_BOARD[8][3]
]
COLUMN_5 = [
MY_BOARD[0][4],MY_BOARD[1][4],MY_BOARD[2][4],
MY_BOARD[3][4],MY_BOARD[4][4],MY_BOARD[5][4],
MY_BOARD[6][4],MY_BOARD[7][4],MY_BOARD[8][4]
]
COLUMN_6 = [
MY_BOARD[0][5],MY_BOARD[1][5],MY_BOARD[2][5],
MY_BOARD[3][5],MY_BOARD[4][5],MY_BOARD[5][5],
MY_BOARD[6][5],MY_BOARD[7][5],MY_BOARD[8][5]
]
COLUMN_7 = [
MY_BOARD[0][6],MY_BOARD[1][6],MY_BOARD[2][6],
MY_BOARD[3][6],MY_BOARD[4][6],MY_BOARD[5][6],
MY_BOARD[6][6],MY_BOARD[7][6],MY_BOARD[8][6]
]
COLUMN_8 = [
MY_BOARD[0][7],MY_BOARD[1][7],MY_BOARD[2][7],
MY_BOARD[3][7],MY_BOARD[4][7],MY_BOARD[5][7],
MY_BOARD[6][7],MY_BOARD[7][7],MY_BOARD[8][7]
]
COLUMN_9 = [
MY_BOARD[0][8],MY_BOARD[1][8],MY_BOARD[2][8],
MY_BOARD[3][8],MY_BOARD[4][8],MY_BOARD[5][8],
MY_BOARD[6][8],MY_BOARD[7][8],MY_BOARD[8][8]
]
#SECTOR_ coordinate logic
SECTOR_1 = [
MY_BOARD[0][0],MY_BOARD[0][1],MY_BOARD[0][2],
MY_BOARD[1][0],MY_BOARD[1][1],MY_BOARD[1][2],
MY_BOARD[2][0],MY_BOARD[2][1],MY_BOARD[2][2]
]
SECTOR_2 = [
MY_BOARD[0][3],MY_BOARD[0][4],MY_BOARD[0][5],
MY_BOARD[1][3],MY_BOARD[1][4],MY_BOARD[1][5],
MY_BOARD[2][3],MY_BOARD[2][4],MY_BOARD[2][5]
]
SECTOR_3 = [
MY_BOARD[0][6],MY_BOARD[0][7],MY_BOARD[0][8],
MY_BOARD[1][6],MY_BOARD[1][7],MY_BOARD[1][8],
MY_BOARD[2][6],MY_BOARD[2][7],MY_BOARD[2][8]
]
SECTOR_4 = [
MY_BOARD[3][0],MY_BOARD[3][1],MY_BOARD[3][2],
MY_BOARD[4][0],MY_BOARD[4][1],MY_BOARD[4][2],
MY_BOARD[5][0],MY_BOARD[5][1],MY_BOARD[5][2]
]
SECTOR_5 = [
MY_BOARD[3][3],MY_BOARD[3][4],MY_BOARD[3][5],
MY_BOARD[4][3],MY_BOARD[4][4],MY_BOARD[4][5],
MY_BOARD[5][3],MY_BOARD[5][4],MY_BOARD[5][5]
]
SECTOR_6 = [
MY_BOARD[3][6],MY_BOARD[3][7],MY_BOARD[3][8],
MY_BOARD[4][6],MY_BOARD[4][7],MY_BOARD[4][8],
MY_BOARD[5][6],MY_BOARD[5][7],MY_BOARD[5][8]
]
SECTOR_7 = [
MY_BOARD[6][0],MY_BOARD[6][1],MY_BOARD[6][2],
MY_BOARD[7][0],MY_BOARD[7][1],MY_BOARD[7][2],
MY_BOARD[8][0],MY_BOARD[8][1],MY_BOARD[8][2]
]
SECTOR_8 = [
MY_BOARD[6][3],MY_BOARD[6][4],MY_BOARD[6][5],
MY_BOARD[7][3],MY_BOARD[7][4],MY_BOARD[7][5],
MY_BOARD[8][3],MY_BOARD[8][4],MY_BOARD[8][5]
]
SECTOR_9 = [
MY_BOARD[6][6],MY_BOARD[6][7],MY_BOARD[6][8],
MY_BOARD[7][6],MY_BOARD[7][7],MY_BOARD[7][8],
MY_BOARD[8][6],MY_BOARD[8][7],MY_BOARD[8][8]
]
board_string = File.readlines('sample.unsolved.txt').first.chomp
initial_board_array = board_string.split("")
def to_number(board)
board.map! do |number|
number.to_i
end
end
def create_rows(board)
rows = []
x = board.each_slice(9) {|row| rows << row}
return rows
end
def inject_possibilities(board)
board = to_number(board)
board_with_rows = create_rows(board)
board_with_rows.map! do |rows|
rows.map! do |tile|
tile_array = []
tile == 0 ? (tile_array = [1,2,3,4,5,6,7,8,9]) : (tile_array << tile)
end
end
end
MY_BOARD = inject_possibilities(initial_board_array)
load './board_coords.rb'
def solve!(array)
8.times do
array.each do |tile|
if tile.length == 1
array.each do |box|
if box.length > 1
box.delete_if { |num| num == tile[0] }
end
end
end
end
end
solver_2(array)
end
def solver_2(array)
array.each do |tile|
if tile.length > 1
tile.each_with_index do |element, i|
if array.flatten.count(element) == 1
tile.map! { element }.uniq!
end
end
end
end
end
def print_board(board)
board.each do |row|
row.each do |tile|
print tile.to_s.ljust(2)
end
print ("\n")
end
end
9.times do
solve!(ROW_1)
solve!(ROW_2)
solve!(ROW_3)
solve!(ROW_4)
solve!(ROW_5)
solve!(ROW_6)
solve!(ROW_7)
solve!(ROW_8)
solve!(ROW_9)
solve!(COLUMN_1)
solve!(COLUMN_2)
solve!(COLUMN_3)
solve!(COLUMN_4)
solve!(COLUMN_5)
solve!(COLUMN_6)
solve!(COLUMN_7)
solve!(COLUMN_8)
solve!(COLUMN_9)
solve!(SECTOR_1)
solve!(SECTOR_2)
solve!(SECTOR_3)
solve!(SECTOR_4)
solve!(SECTOR_5)
solve!(SECTOR_6)
solve!(SECTOR_7)
solve!(SECTOR_8)
solve!(SECTOR_9)
end
print_board(MY_BOARD)
096040001100060004504810390007950043030080000405023018010630059059070830003590007
105802000090076405200400819019007306762083090000061050007600030430020501600308900
005030081902850060600004050007402830349760005008300490150087002090000600026049503
096040001100060004504810390007950043030080000405023018010630059059070830003590007
105802000090076405200400819019007306762083090000061050007600030430020501600308900
005030081902850060600004050007402830349760005008300490150087002090000600026049503
290500007700000400004738012902003064800050070500067200309004005000080700087005109
080020000040500320020309046600090004000640501134050700360004002407230600000700450
608730000200000460000064820080005701900618004031000080860200039050000100100456200
370000001000700005408061090000010000050090460086002030000000000694005203800149500
000689100800000029150000008403000050200005000090240801084700910500000060060410000
030500804504200010008009000790806103000005400050000007800000702000704600610300500
000075400000000008080190000300001060000000034000068170204000603900000020530200000
300000000050703008000028070700000043000000000003904105400300800100040000968000200
302609005500730000000000900000940000000000109000057060008500006000000003019082040
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment