X-Git-Url: https://harishankar.org/repos/?p=getaclue.git;a=blobdiff_plain;f=crosswordpuzzle.py;h=7ee206fc53ed4bdf20eb0c2c09949eea446a6352;hp=319a4fcfa3b33ededbefb9f05626b8482547c6d4;hb=50103f2c3cb70ee8fad1b13e1ab6864a57c36c29;hpb=1f9de52c4798a22293aaf2c32611090a099d0ce4 diff --git a/crosswordpuzzle.py b/crosswordpuzzle.py index 319a4fc..7ee206f 100644 --- a/crosswordpuzzle.py +++ b/crosswordpuzzle.py @@ -119,6 +119,11 @@ class NoWordsException (Exception): def __init__ (self): self.msg = "No words in grid" +# exception to raise when solution is imcomplete when trying to verify it +class IncompleteSolutionException (Exception): + def __init__ (self): + self.msg = "Solution incomplete" + class CrosswordPuzzle: def __init__ (self, rows, cols): # define number of rows and columns @@ -636,5 +641,38 @@ class CrosswordPuzzle: break r += 1 + # reveal/hide the entire solution by resetting revealed flag at all cells + def reveal_solution (self, revealed=True): + # run through the grid and set revealed to False + for row in range (self.rows): + for col in range (self.cols): + self.data[row][col].revealed = revealed + # clear the guesses for the board + def clear_guesses (self): + # run through the grid and set the guesses to None + for row in range (self.rows): + for col in range (self.cols): + self.data[row][col].guess = None + + # verify the solution - return True if all guessed characters are correct + # return False if some of them are wrong. + # if the board is not completed as yet, raise a IncompleteSolutionException + def is_solution_correct (self): + # run through the grid and check for each character in occupied cells + flag = True + for row in range (self.rows): + for col in range (self.cols): + if (self.data[row][col].occupied_across is True or + self.data[row][col].occupied_down is True): + # if there is no guess at a particular location raise + # the incomplete solution exception + if not self.data[row][col].guess: + raise IncompleteSolutionException + # if a character doesn't match, return False + if self.data[row][col].char <> self.data[row][col].guess: + flag = False + + # finally return result + return flag