Improved word intersection logic
authorHarishankar <v.harishankar@gmail.com>
Mon, 6 Dec 2010 06:10:42 +0000 (11:40 +0530)
committerHarishankar <v.harishankar@gmail.com>
Mon, 6 Dec 2010 06:10:42 +0000 (11:40 +0530)
Now checks whether the previous row or column is the end of a
down or across word in order to avoid bad word intersections.

crosswordpuzzle.py

index 57878b8..3c0ab4e 100644 (file)
@@ -199,8 +199,9 @@ class CrosswordPuzzle:
                        html_contents.append ("<h2>Across clues</h2>")
                        html_contents.append ("<p>")
                        for word, clue in clues_across:
+                               # clue should be: <num> - clue text (chars)
                                clue_str = str (self.data[word[1]][word[2]].numbered) + " - " \
-                                                       + clue
+                                                       + clue + " (" + str (word[3]) + ")"
                                html_contents.append (clue_str)
                                html_contents.append ("<br />")
                        html_contents.append ("</p>")
@@ -209,7 +210,7 @@ class CrosswordPuzzle:
                        html_contents.append ("<p>")
                        for word, clue in clues_down:
                                clue_str = str (self.data[word[1]][word[2]].numbered) + " - " \
-                                                       + clue
+                                                       + clue + " (" + str (word[3]) + ")"
                                html_contents.append (clue_str)
                                html_contents.append ("<br />")
                        html_contents.append ("</p>")
@@ -391,6 +392,11 @@ class CrosswordPuzzle:
                                if i > 0 and i < len(word) - 1:
                                        if self.data[row+i][col-1].occupied_down is True:
                                                raise IntersectWordException (word, len(word))
+                               # if the previous column is the end of an across word
+                               if (self.data[row+i][col-1].occupied_across is True and
+                                       self.data[row+i][col].occupied_across is False):
+                                       raise IntersectWordException (word, len(word))
+
                        # on the next column except last column
                        if col < len(word) - 1:
                                # except the first and last row check if there is any
@@ -441,6 +447,11 @@ class CrosswordPuzzle:
                                if i > 0 and i < len(word) - 1:
                                        if self.data[row-1][col+i].occupied_across is True:
                                                raise IntersectWordException (word, len(word))
+                               # if the previous row is the end of a down word
+                               if (self.data[row-1][col+i].occupied_down is True and
+                                       self.data[row][col+i].occupied_down is False):
+                                       raise IntersectWordException (word, len(word))
+
                        # on a next row
                        if (row < (self.rows - 1)):
                                # except the first and last letter check if there is