Save and restore functionality implemented
[getaclue.git] / crosswordpuzzle.py
index 9617897..8091d3d 100644 (file)
@@ -50,6 +50,11 @@ class NoWordException (Exception):
        def __init__ (self, row, col):
                self.pos = (row, col)
 
+# exception when no words are present in the grid
+class NoWordsException (Exception):
+       def __init__ (self):
+               self.msg = "No words in grid"
+
 class CrosswordPuzzle:
        def __init__ (self, rows, cols):
                # define number of rows and columns
@@ -68,6 +73,38 @@ class CrosswordPuzzle:
                        for j in range (cols):
                                self.data[i].append (GridItem ())
 
+       # get all the clues for across
+       def get_clues_across (self):
+               clues = []
+               # traverse the grid
+               for row in range (self.rows):
+                       for col in range (self.cols):
+                               if (self.data[row][col].occupied_across is True and
+                               self.data[row][col].across_start is True):
+                                       word_across = self.get_word_across (row, col)
+                                       clues.append ((word_across, self.data[row][col].clue_across))
+               # if no across words are found at all
+               if not clues:
+                       raise NoWordsException
+
+               return clues
+
+       # get all the clues for down
+       def get_clues_down (self):
+               clues = []
+               # traverse the grid
+               for row in range (self.rows):
+                       for col in range (self.cols):
+                               if (self.data[row][col].occupied_down is True and
+                               self.data[row][col].down_start is True):
+                                       word_down = self.get_word_down (row, col)
+                                       clues.append ((word_down, self.data[row][col].clue_down))
+               # if no down words are found at all
+               if not clues:
+                       raise NoWordsException
+
+               return clues
+
        # getting a down word at a position
        def get_word_down (self, row, col):
                # if index is out of bounds