You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.6 KiB
82 lines
2.6 KiB
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]) |