X-Git-Url: http://git.veekun.com/pseudoku.git/blobdiff_plain/5f305518adfcb89e940eac9073a337054d8c695c..30f8ff60eb4bd6d8b6f4467ba0b7bbe29a8a92ee:/pseudoku/grid/__init__.py?ds=inline diff --git a/pseudoku/grid/__init__.py b/pseudoku/grid/__init__.py index caf135d..83e358f 100644 --- a/pseudoku/grid/__init__.py +++ b/pseudoku/grid/__init__.py @@ -82,6 +82,13 @@ class Grid(object): size = property(attrgetter('_size')) constraints = property(attrgetter('_constraints')) + def _is_filled(self): + for cell in self._cells: + if cell.value == None: + return False + return True + filled = property(_is_filled) + ### Constructors def __init__(self, box_height=3, box_width=None): @@ -180,29 +187,14 @@ class Grid(object): def cell(self, row, column): return self._cells[self._cellidx(row, column)] - def is_filled(self): - for cell in self._cells: - if cell.value == None: - return False - return True - ### Solving - def check(self): - """Returns True iff the grid is solved. Raises an exception if an - integrity problem is found, such as a value appearing twice in a row. - """ - # TODO remove this; name sucks and concept also sucks - return None - - def normalize_cells(self): """Normalizes every cell in the grid. Returns the number of cell changes.""" cell_changes = 0 - for cell in self._cells: cell_changes += cell.normalize() @@ -215,7 +207,6 @@ class Grid(object): Returns the number of cell changes.""" cell_changes = 0 - for constraint in self.constraints: cell_changes += constraint.resolve_uniques() @@ -229,18 +220,15 @@ class Grid(object): def solve(self): """Attempts to solve the grid by running through various methods of elimination one at a time, from simplest to most complex.""" - # XXX track how many cells are changed and repeat as appropriate - - while not self.is_filled(): - cell_changes = 0 + while True: for method in self._solution_steps: - cell_changes += method(self) + cell_changes = method(self) # If we changed something, start over with simple steps again - if x != 0: + if cell_changes: break - # If we didn't do anything this round, we're stuck - if cell_changes == 0: + # If we didn't do anything this round, we're done + if not cell_changes: break