From b1ba162f06177e9ccd5456e378069aafe6b2a916 Mon Sep 17 00:00:00 2001 From: Harishankar Date: Sat, 4 Dec 2010 17:36:43 +0530 Subject: [PATCH] Made some logic changes to word intersection code Refined the word intersection detection code a bit but it is still not perfect. --- crosswordpuzzle.py | 65 ++++++++++++++++++++++----------------- crosswordpuzzlecreator.py | 4 +-- 2 files changed, 39 insertions(+), 30 deletions(-) diff --git a/crosswordpuzzle.py b/crosswordpuzzle.py index fb9ada5..56807cd 100644 --- a/crosswordpuzzle.py +++ b/crosswordpuzzle.py @@ -46,17 +46,6 @@ class FrozenGridException (Exception): self.msg = "Grid is frozen and cannot be edited" class CrosswordPuzzle: - # ansi color codes for grid display - BRICKRED = '\033[44;1;31m' - # bold - BOLD = '\033[33m' - # blue - BLUE = '\033[34m' - # grey - GREY = '\033[30m' - # disable colors - ENDCOL = '\033[0m' - def __init__ (self, rows, cols): # define number of rows and columns self.rows = rows @@ -89,14 +78,23 @@ class CrosswordPuzzle: # on the same column if self.data[row+i][col].occupied_down is True: raise IntersectWordException (word, len(word)) - # on the previous column - if col > 0 and self.data[row+i][col-1].occupied_down is True: - raise IntersectWordException (word, len(word)) - # on the next column - if (col < (len(word) - 1) and - (self.data[row+i][col+1].occupied_down is True or - self.data[row+i][col+1].across_start is True)): - raise IntersectWordException (word, len(word)) + # on the previous column except first column + if col > 0: + # except the first and last col + if i > 0 and i < len(word) - 1: + if self.data[row+i][col-1].occupied_down is True: + 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 + # down word in previous column + if i > 0 and i < len(word) - 1: + if self.data[row+i][col+1].occupied_down is True: + raise IntersectWordException (word, len(word)) + # check if there is any across word starting in the + # next column + if self.data[row+i][col+1].across_start is True: + raise IntersectWordException (word, len(word)) # also check the character before and after if (row > 0 and self.data[row-1][col].occupied_down is True @@ -127,17 +125,26 @@ class CrosswordPuzzle: # is the word intersecting any other word? for i in range (len(word)): - # on the same line + # on the same row if self.data[row][col+i].occupied_across is True: raise IntersectWordException (word, len(word)) - # on a previous line except the last column - if row > 0 and self.data[row-1][col+i].occupied_across is True: - raise IntersectWordException (word, len(word)) - # on a next line except the last column - if (row < (self.rows - 1) and - (self.data[row+1][col+i].down_start is True - or self.data[row+1][col+i].occupied_across is True)): - raise IntersectWordException (word, len(word)) + # on a previous row except first row + if row > 0: + # if not the first or last col + if i > 0 and i < len(word) - 1: + if self.data[row-1][col+i].occupied_across is True: + raise IntersectWordException (word, len(word)) + # on a next row + if (row < (self.rows - 1)): + # except the first and last letter check if there is + # any across intersection + 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 a down word is starting at any column below the + # word + if self.data[row+1][col+i].down_start is True: + raise IntersectWordException (word, len(word)) # also check the character beyond and before and after if (col > 0 and (self.data[row][col-1].occupied_across is True or @@ -184,3 +191,5 @@ class CrosswordPuzzle: self.data[row][col].occupied_down is False): self.data[row][col].char = '.' + self.frozen_grid = False + diff --git a/crosswordpuzzlecreator.py b/crosswordpuzzlecreator.py index 42d4fdd..4098cd3 100644 --- a/crosswordpuzzlecreator.py +++ b/crosswordpuzzlecreator.py @@ -19,9 +19,9 @@ class CrosswordPuzzleCreator: # Black background white text BLACK_BG = '\033[40;1;37m' # white background black text - WHITE_BG = '\033[47;0;30m' + WHITE_BG = '\033[47;1;30m' # white background red text - REDWHITE_BG = '\033[47;0;31m' + REDWHITE_BG = '\033[47;1;31m' # disable colors ENDCOL = '\033[0m' -- 2.20.1