Skip to content

Commit 0fa7f8a

Browse files
committed
Added a way to display cell possible values
1 parent d7278a5 commit 0fa7f8a

File tree

2 files changed

+44
-4
lines changed

2 files changed

+44
-4
lines changed

lib/sudoku.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -237,9 +237,10 @@ def brute_force(self, level=0):
237237
)
238238
_logger.error("Error was: %s", str(e))
239239
_logger.error("Resulting table was: \n%s\n",
240-
str(new_table)
241-
)
242-
_logger.info('%s solutions found at %s levels of recursion', len(solutions), level)
240+
str(new_table)
241+
)
242+
_logger.info('%s solutions found at %s levels of recursion',
243+
len(solutions), level)
243244
if solutions:
244245
self.copy_from(solutions[0])
245246
return solutions
@@ -575,6 +576,17 @@ def section(self, section):
575576
def mates(self):
576577
return set(self.row.cells + self.column.cells + self.section.cells)
577578

579+
def display_potential_values(self):
580+
values = [
581+
(str(digit)
582+
if (digit in self.potential_values or digit == self.value)
583+
else ' ')
584+
for digit in Sudoku.digits()
585+
]
586+
return '\n'.join([
587+
''.join(row) for row in _split(values)
588+
])
589+
578590

579591
if __name__ == '__main__':
580592
cell = Cell()

test/test_sudoku.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def _string_to_table(st):
2222
else:
2323
raise Exception("wasn't sure what to do with %s" % character)
2424
_logger.info('Setting (%s, %s) to %s based on provided table',
25-
i, j, character)
25+
i, j, character)
2626
if value is not None:
2727
try:
2828
table.set(i, j, value)
@@ -518,6 +518,34 @@ def test_cell_clear_potential_value(self):
518518
cell.clear_potential_value(i)
519519
assert cell.potential_values == [9]
520520

521+
def test_display_potential_values_default(self):
522+
cell = Cell()
523+
result = cell.display_potential_values()
524+
self.assertEquals('123\n'
525+
'456\n'
526+
'789', result)
527+
_logger.info('\n%s\n', result)
528+
529+
def test_display_potential_values_partial(self):
530+
cell = Cell()
531+
cell.clear_potential_value(1)
532+
cell.clear_potential_value(5)
533+
cell.clear_potential_value(9)
534+
result = cell.display_potential_values()
535+
self.assertEquals(' 23\n'
536+
'4 6\n'
537+
'78 ', result)
538+
_logger.info('\n%s\n', result)
539+
540+
def test_display_potential_values_full(self):
541+
cell = Cell()
542+
cell.value = 5
543+
result = cell.display_potential_values()
544+
self.assertEquals(' \n'
545+
' 5 \n'
546+
' ', result)
547+
_logger.info('\n%s\n', result)
548+
521549

522550
class TestRow(unittest.TestCase):
523551
def test_str(self):

0 commit comments

Comments
 (0)