42 lines
1.0 KiB
Python
42 lines
1.0 KiB
Python
def count(a: list[list[int]], i: int, j: int) -> list[int]:
|
|
|
|
if i == len(a) or j == len(a[0]):
|
|
return None
|
|
|
|
if (a[i][j] > 100 and a[i][j] < 500) or (a[i][j] > -400 and a[i][j] < 0):
|
|
return None
|
|
|
|
r = count(a, i, j+1)
|
|
b = count(a, i+1, j)
|
|
|
|
c = a[i][j]
|
|
|
|
if r == None and b == None and i == len(a)-1 and j == len(a[0])-1:
|
|
return [[c, [[i, j]]], [c, [[i, j]]]]
|
|
if r == None and b == None:
|
|
return None
|
|
if r == None:
|
|
return [[c + b[0][0], [*b[0][1], [i, j]]], [c + b[1][0], [*b[1][1], [i, j]]]]
|
|
if b == None:
|
|
return [[c + r[0][0], [*r[0][1], [i, j]]], [c + r[1][0], [*r[1][1], [i, j]]]]
|
|
|
|
mmax = max(r[0][0], b[0][0])
|
|
mmin = min(r[1][0], b[1][0])
|
|
|
|
Marr = r[0][1] if mmax == r[0][0] else b[0][1]
|
|
marr = r[1][1] if mmin == r[1][0] else b[1][1]
|
|
|
|
return [[c + mmax, [*Marr, [i, j]]], [c + mmin, [*marr, [i, j]]]]
|
|
|
|
|
|
with open("dat/18-13.csv", 'r') as f:
|
|
# with open("24.csv", 'r') as f:
|
|
a = [[int(i.strip()) for i in row.split(';')] for row in f.readlines()]
|
|
|
|
ret = count(a, 0, 0)
|
|
|
|
print(ret[0])
|
|
print(ret[1])
|
|
|
|
# 1535 975
|