Little bit o' cleanup

This commit is contained in:
Eryn Wells 2017-10-08 08:04:29 -07:00
parent 3fabd4b420
commit b5ac48bc10

View file

@ -22,27 +22,20 @@ class Sudoku:
@property @property
def rows(self): def rows(self):
return self._apply_index_range_list(self.index_rows) return self._apply_index_ranges(self.index_rows)
@property @property
def columns(self): def columns(self):
return self._apply_index_range_list(self.index_columns) return self._apply_index_ranges(self.index_columns)
@property @property
def squares(self): def squares(self):
return self._apply_index_range_list(self.index_squares) return self._apply_index_ranges(self.index_squares)
def _apply_index_range_list(self, ranges):
return (self._apply_index_range(r) for r in ranges)
def _apply_index_range(self, rng):
return (self.board[i] for i in rng)
@property @property
def index_rows(self): def index_rows(self):
''' '''
Return a list of ranges of indexes into the board, each Return an iterable of ranges of indexes into the board, each defining a row.
defining a row.
''' '''
sz = self.size sz = self.size
return (range(i * sz, i * sz + sz) for i in range(sz)) return (range(i * sz, i * sz + sz) for i in range(sz))
@ -50,8 +43,7 @@ class Sudoku:
@property @property
def index_columns(self): def index_columns(self):
''' '''
Return a list of ranges of indexes into the board, each Return an iterable of ranges of indexes into the board, each defining a column.
defining a column.
''' '''
sz = self.size sz = self.size
sz2 = sz ** 2 sz2 = sz ** 2
@ -60,8 +52,7 @@ class Sudoku:
@property @property
def index_squares(self): def index_squares(self):
''' '''
Return a list of ranges of indexes into the board, each Return an iterable of ranges of indexes into the board, each defining a square.
defining a square.
''' '''
dim = self.dimension dim = self.dimension
return (self.square(x, y) for y in range(dim) for x in range(dim)) return (self.square(x, y) for y in range(dim) for x in range(dim))
@ -89,6 +80,9 @@ class Sudoku:
ranges = itertools.chain(*[_range(i) for i in range(dim)]) ranges = itertools.chain(*[_range(i) for i in range(dim)])
return ranges return ranges
def _apply_index_ranges(self, ranges):
return ((self.board[i] for i in rng) for r in ranges)
def __str__(self): def __str__(self):
field_width = len(str(self.size)) field_width = len(str(self.size))
dim = int(math.sqrt(self.size)) dim = int(math.sqrt(self.size))