@@ -8,72 +8,57 @@ def problem0011(_square_matrix: list[list[int]], _interval: int) -> int:
8
8
9
9
top = len (_square_matrix )
10
10
result = 0
11
- acum = 0
12
11
13
- for i in range (0 , top ):
12
+ quadrant_size = _interval
13
+ matrix_limit = len (_square_matrix ) - (_interval - 1 )
14
+
15
+ for i in range (0 , matrix_limit ):
14
16
if top != len (_square_matrix [i ]):
15
17
raise AttributeError ("Not a square matrix" )
16
18
17
- for j in range (0 , top ):
18
- logger .debug ('i: %i, j: %i' , i , j )
19
-
20
- acum = 1
21
-
22
- if i < top - (_interval - 1 ):
23
- logger .debug ('---- VERTICAL ------------------------------------------' )
24
- # vertical
25
-
26
- for k in range (0 , _interval ):
27
- logger .debug (
28
- 'row: i %i, column: %i, step %i => %i' ,
29
- i + k , j , k , _square_matrix [i + k ][j ]
30
- )
31
-
32
- acum *= _square_matrix [i + k ][j ]
33
-
34
- result = maximum (acum , result )
35
-
36
- acum = 1
37
- if j < top - (_interval - 1 ):
38
- logger .debug ('---- HORIZONTAL ----------------------------------------' )
39
- # horizontal
40
- for k in range (0 , _interval ):
19
+ for j in range (0 , matrix_limit ):
20
+ logger .debug ('start point => i: %i, j: %i' , i , j )
21
+
22
+ # reset diagonals
23
+ diag1_acum = 1
24
+ diag2_acum = 1
25
+ for k in range (0 , quadrant_size ):
26
+ logger .debug (
27
+ 'diag1 coordinate: (i, j) = (%i, %i)' ,
28
+ i + k ,
29
+ j + k
30
+ )
31
+ logger .debug (
32
+ 'diag2 coordinate: (i, j) = (%i, %i)' ,
33
+ i + k ,
34
+ j + (quadrant_size - 1 ) - k
35
+ )
36
+
37
+ diag1_acum *= _square_matrix [i + k ][j + k ]
38
+ diag2_acum *= _square_matrix [i + k ][j + (quadrant_size - 1 ) - k ]
39
+ result = maximum (diag1_acum , result )
40
+ result = maximum (diag2_acum , result )
41
+
42
+ # reset lines
43
+ vertical_acum = 1
44
+ horizontal_acum = 1
45
+ for t_l in range (0 , quadrant_size ):
41
46
logger .debug (
42
- 'row: i %i, column: %i, step %i => %i' ,
43
- i , j + k , k , _square_matrix [i ][j + k ]
44
- )
45
- acum *= _square_matrix [i ][j + k ]
46
-
47
- result = maximum (acum , result )
48
-
49
- acum = 1
50
- if i + (_interval - 1 ) < top and j + (_interval - 1 ) < top :
51
- # diagonal top left -> bottom right
52
- logger .debug ('---- DIAG \\ ---------------------------------------------' )
53
- for k in range (0 , _interval ):
54
- logger .debug (
55
- 'row: i %i, column: %i, step %i => %i' ,
56
- i + k , j + k , k , _square_matrix [i + k ][j + k ]
47
+ 'vertical coordinate: (i, j) = (%i, %i)' ,
48
+ i + k ,
49
+ j + t_l
57
50
)
58
- acum *= _square_matrix [i + k ][j + k ]
59
-
60
- result = maximum (acum , result )
61
-
62
- acum = 1
63
- if i + (_interval - 1 ) < top and j + (_interval - 1 ) < top :
64
- # diagonal top rigth -> bottom left
65
- logger .debug ('---- DIAG / ---------------------------------------------' )
66
- for k in range (0 , _interval ):
67
51
logger .debug (
68
- 'row: i %i, column: %i, step %i => %i' ,
69
- i + k ,
70
- j + (_interval - 1 ) - k ,
71
- _interval ,
72
- _square_matrix [i + k ][j + (_interval - 1 ) - k ]
52
+ 'horizontal coordinate: (i, j) = (%i, %i)' ,
53
+ i ,
54
+ j + k
73
55
)
74
- acum *= _square_matrix [i + k ][j + (_interval - 1 ) - k ]
75
56
76
- result = maximum (acum , result )
57
+ vertical_acum *= _square_matrix [i + k ][j + t_l ]
58
+ horizontal_acum *= _square_matrix [i + t_l ][j + k ]
59
+
60
+ result = maximum (vertical_acum , result )
61
+ result = maximum (horizontal_acum , result )
77
62
78
63
logger .info ('Problem 0011 result: %i' , result )
79
64
return result
0 commit comments