You are viewing a single comment's thread. Return to all comments →
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
Seems like cookies are disabled on this browser, please enable them to open this website
Ema's Supercomputer
You are viewing a single comment's thread. Return to all comments →
Python3 Section