# Answer for https://stackoverflow.com/questions/65445073/number-of-ways-to-bottom-right-of-matrix-with-obstacles-with-any-size-skips-righ
rows = 4
cols = 3
matrix = """
...
.*.
...
...
"""
M = [list(r) for r in matrix.split()]
print(M)
#(num_ways_here, cumulative_from_north, cumulative_from_east)
one = [None] * cols
two = [None] * cols
for i, r in enumerate(M):
for j, c in enumerate(r):
if (0, 0) == (i, j):
two[j] = (1, 1, 1)
elif M[i][j] == "*":
two[j] = (0, 0, 0)
elif i == 0:
(c, n, e) = two[j-1]
curr = e
two[j] = (e, curr, e + curr)
elif j == 0:
(c, n, e) = one[j]
curr = n
two[j] = (curr, n + curr, curr)
else:
(cw, nw, ew) = two[j-1]
(cn, nn, en) = one[j]
curr = ew + nn
two[j] = (curr, nn + curr, ew + curr)
one = two
two = [None] * cols
print(one)
print(one[cols-1][0])
IyBBbnN3ZXIgZm9yIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzY1NDQ1MDczL251bWJlci1vZi13YXlzLXRvLWJvdHRvbS1yaWdodC1vZi1tYXRyaXgtd2l0aC1vYnN0YWNsZXMtd2l0aC1hbnktc2l6ZS1za2lwcy1yaWdoCgpyb3dzID0gNApjb2xzID0gMwoKbWF0cml4ID0gIiIiCiAgICAuLi4KICAgIC4qLgogICAgLi4uCiAgICAuLi4KIiIiCgpNID0gW2xpc3QocikgZm9yIHIgaW4gbWF0cml4LnNwbGl0KCldCnByaW50KE0pCgojKG51bV93YXlzX2hlcmUsIGN1bXVsYXRpdmVfZnJvbV9ub3J0aCwgY3VtdWxhdGl2ZV9mcm9tX2Vhc3QpCm9uZSA9IFtOb25lXSAqIGNvbHMKdHdvID0gW05vbmVdICogY29scwoKZm9yIGksIHIgaW4gZW51bWVyYXRlKE0pOgogIGZvciBqLCBjIGluIGVudW1lcmF0ZShyKToKICAgIGlmICgwLCAwKSA9PSAoaSwgaik6CiAgICAgIHR3b1tqXSA9ICgxLCAxLCAxKQogICAgZWxpZiBNW2ldW2pdID09ICIqIjoKICAgICAgdHdvW2pdID0gKDAsIDAsIDApCiAgICBlbGlmIGkgPT0gMDoKICAgICAgKGMsIG4sIGUpID0gdHdvW2otMV0KICAgICAgY3VyciA9IGUKICAgICAgdHdvW2pdID0gKGUsIGN1cnIsIGUgKyBjdXJyKQogICAgZWxpZiBqID09IDA6CiAgICAgIChjLCBuLCBlKSA9IG9uZVtqXQogICAgICBjdXJyID0gbgogICAgICB0d29bal0gPSAoY3VyciwgbiArIGN1cnIsIGN1cnIpCiAgICBlbHNlOgogICAgICAoY3csIG53LCBldykgPSB0d29bai0xXQogICAgICAoY24sIG5uLCBlbikgPSBvbmVbal0KICAgICAgY3VyciA9IGV3ICsgbm4KICAgICAgdHdvW2pdID0gKGN1cnIsIG5uICsgY3VyciwgZXcgKyBjdXJyKQogIG9uZSA9IHR3bwogIHR3byA9IFtOb25lXSAqIGNvbHMKICBwcmludChvbmUpCgpwcmludChvbmVbY29scy0xXVswXSk=
[['.', '.', '.'], ['.', '*', '.'], ['.', '.', '.'], ['.', '.', '.']]
[(1, 1, 1), (1, 1, 2), (2, 2, 4)]
[(1, 2, 1), (0, 0, 0), (2, 4, 2)]
[(2, 4, 2), (2, 2, 4), (8, 12, 12)]
[(4, 8, 4), (6, 8, 10), (22, 34, 32)]
22