• + 0 comments

    Python3 Section

    def plusSection(r, c, k):
        cells = {(r, c)}
        for i in range(1, k+1):
            cells.add((r+i, c))
            cells.add((r-i, c))
            cells.add((r, c+i))
            cells.add((r, c-i))
        return cells
    
    
    def areaOfTwoPluses(p1, p2):
        r1, c1, area1, count1 = p1
        r2, c2, area2, count2 = p2
    
        cells1 = plusSection(r1, c1, count1)
        cells2 = plusSection(r2, c2, count2)
    
        if cells1 & cells2: 
            return max(area1, area2)
    
        return area1 * area2
    
        
    def savePlusess(r, c, grid):
        row, col = len(grid), len(grid[0])
        count = 1
        
        plusess = []
        
        while True: 
            if r + count >= row:
                break
            if r - count < 0:
                break
            if c + count >= col:
                break
            if c - count < 0:
                break
            if grid[r+count][c] != "G":
                break
            if grid[r-count][c] != "G":
                break 
            if grid[r][c+count] != "G":
                break
            if grid[r][c-count] != "G":
                break
            
            count += 1
            
            plusess.append((1 + 4*(count-1), count-1))
                
        return plusess
    
    def twoPluses(grid):
        row, col = len(grid), len(grid[0])
        plusess = []
    
        for r in range(row):
            for c in range(col):
                if grid[r][c] == "G":
                    currPlusess = savePlusess(r, c, grid)
                    for pluses in currPlusess:
                        area = pluses[0]
                        count = pluses[1]
                        plusess.append((r, c, area, count))
          
        if len(plusess) == 1:
            return plusess[0][2]
        
        res = 1
        for i in range(len(plusess)):
            for j in range(i+1, len(plusess)):
                area = areaOfTwoPluses(plusess[i], plusess[j])
                if area > res:
                    res = area
            
        return res