import sys basins = [] class basin: def __init__(self, y, x): self.startpoi = [y , x] def generate(self, gri): self.poi = [] self.poi.append(self.startpoi) for i in self.poi: if i[1] == 0: pass elif int(gri.y[i[0]][i[1]]) < int(gri.y[i[0]][i[1] - 1]) and int(gri.y[i[0]][i[1] - 1]) != 9: if not [i[0], i[1] - 1] in self.poi: self.poi.append([i[0], i[1] - 1]) if i[1] == len(gri.y[i[0]]) - 1: pass elif int(gri.y[i[0]][i[1]]) < int(gri.y[i[0]][i[1] + 1]) and int(gri.y[i[0]][i[1] + 1]) != 9: if not [i[0], i[1] + 1] in self.poi: self.poi.append([i[0], i[1] + 1]) if i[0] == 0: pass elif int(gri.y[i[0]][i[1]]) < int(gri.y[i[0] - 1][i[1]]) and int(gri.y[i[0] - 1][i[1]]) != 9: if not [i[0] - 1, i[1]] in self.poi: self.poi.append([i[0] - 1, i[1]]) if i[0] == len(gri.y) - 1: pass elif int(gri.y[i[0]][i[1]]) < int(gri.y[i[0] + 1][i[1]]) and int(gri.y[i[0] + 1][i[1]]) != 9: if not [i[0] + 1, i[1]] in self.poi: self.poi.append([i[0] + 1, i[1]]) return len(self.poi) class grid: def __init__(self): self.y = [] def addinp(self, inp): self.y.append(inp) def locate(self): solucounter = 0 for i in range(len(self.y)): for t in range(len(self.y[i])): counter = 0 if t == 0: counter += 1 elif int(self.y[i][t]) < int(self.y[i][t - 1]): counter += 1 if t == len(self.y[i]) - 1: counter += 1 elif int(self.y[i][t]) < int(self.y[i][t + 1]): counter += 1 if i == 0: counter += 1 elif int(self.y[i][t]) < int(self.y[i - 1][t]): counter += 1 if i == len(self.y) - 1: counter += 1 elif int(self.y[i][t]) < int(self.y[i + 1][t]): counter += 1 if counter == 4: basins.append(basin(i, t)) solucounter += 1 + int(self.y[i][t]) return solucounter grit = grid() solv = [] with open(sys.argv[1], 'r') as f: for i in f.readlines(): i = i.strip() grit.addinp(i) print(grit.locate()) for i in basins: solv.append(i.generate(grit)) solv = sorted(solv, reverse = True) print(solv[0:3]) print(solv[0] * solv[1] * solv[2])