Rename square -> box

This commit is contained in:
Eryn Wells 2017-10-10 12:51:11 -07:00
parent 35647fc8c9
commit e5d00debc7
2 changed files with 19 additions and 16 deletions

View file

@ -29,7 +29,10 @@ class Sudoku:
return self.size ** 4 return self.size ** 4
@property @property
def all_squares(self): def all_boxes(self):
'''
Iterator of xy-coordinates for every box in the grid.
'''
return itertools.product(range(self.size), repeat=2) return itertools.product(range(self.size), repeat=2)
@property @property
@ -49,8 +52,8 @@ class Sudoku:
return self._apply_index_ranges(self.index_columns) return self._apply_index_ranges(self.index_columns)
@property @property
def squares(self): def boxes(self):
return self._apply_index_ranges(self.index_squares) return self._apply_index_ranges(self.index_boxes)
@property @property
def index_rows(self): def index_rows(self):
@ -67,19 +70,19 @@ class Sudoku:
return (self._column(i) for i in range(self.row_size)) return (self._column(i) for i in range(self.row_size))
@property @property
def index_squares(self): def index_boxes(self):
''' '''
Return an iterable of ranges of indexes into the board, each defining a square. Return an iterable of ranges of indexes into the board, each defining a box.
''' '''
return (self._square(x, y) for (x,y) in self.all_squares) return (self._box(x, y) for (x,y) in self.all_boxes)
def peers(self, x, y): def peers(self, x, y):
return {self._board[i] for i in self.index_peers(x, y) if self._board[i] != 0} return {self._board[i] for i in self.index_peers(x, y) if self._board[i] != 0}
def index_peers(self, x, y): def index_peers(self, x, y):
sz = self.size sz = self.size
sqx, sqy = int(x / sz), int(y / sz) box = int(x / sz), int(y / sz)
return set(self._row(y)) | set(self._column(x)) | set(self._square(sqx, sqy)) return set(self._row(y)) | set(self._column(x)) | set(self._box(*box))
def _row(self, r): def _row(self, r):
row_size = self.row_size row_size = self.row_size
@ -88,7 +91,7 @@ class Sudoku:
def _column(self, c): def _column(self, c):
return range(c, self.grid_size, self.row_size) return range(c, self.grid_size, self.row_size)
def _square(self, x, y): def _box(self, x, y):
size = self.size size = self.size
row_size = self.row_size row_size = self.row_size
offx, offy = (x * size, y * size * row_size) offx, offy = (x * size, y * size * row_size)
@ -103,7 +106,7 @@ class Sudoku:
@property @property
def solved(self): def solved(self):
expected = self.possible_values expected = self.possible_values
all_groups = itertools.chain(self.rows, self.columns, self.squares) all_groups = itertools.chain(self.rows, self.columns, self.boxes)
return all(expected == set(g) for g in all_groups) return all(expected == set(g) for g in all_groups)
def _apply_index_ranges(self, ranges): def _apply_index_ranges(self, ranges):

12
test.py
View file

@ -40,17 +40,17 @@ class Sudoku4BasicTests(Sudoku4TestCase):
with self.subTest(col=col_list, ex=excol): with self.subTest(col=col_list, ex=excol):
self.assertEqual(col_list, excol) self.assertEqual(col_list, excol)
def test_squares(self): def test_boxes(self):
expected_squares = { expected_boxes = {
(0,0): set([ 0, 1, 4, 5]), (0,0): set([ 0, 1, 4, 5]),
(1,0): set([ 2, 3, 6, 7]), (1,0): set([ 2, 3, 6, 7]),
(0,1): set([ 8, 9, 12, 13]), (0,1): set([ 8, 9, 12, 13]),
(1,1): set([10, 11, 14, 15]), (1,1): set([10, 11, 14, 15]),
} }
for (coord, exsq) in expected_squares.items(): for (coord, exbox) in expected_boxes.items():
with self.subTest(sq=coord, ex=exsq): with self.subTest(sq=coord, ex=exbox):
sq = set(self.board._square(*coord)) sq = set(self.board._box(*coord))
self.assertEqual(sq, exsq) self.assertEqual(sq, exbox)
def test_peers(self): def test_peers(self):
expected_peers = { expected_peers = {