-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathproblem_011.py
More file actions
88 lines (76 loc) · 4.16 KB
/
Copy pathproblem_011.py
File metadata and controls
88 lines (76 loc) · 4.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# coding: utf-8
'''
In the 20×20 grid below, four numbers along a diagonal line have been marked in red.
08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95
78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48
The product of these numbers is 26 × 63 × 78 × 14 = 1788696.
'''
L = [
[int(i) for i in "08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08".split()],
[int(i) for i in "49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00".split()],
[int(i) for i in "81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65".split()],
[int(i) for i in "52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91".split()],
[int(i) for i in "22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80".split()],
[int(i) for i in "24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50".split()],
[int(i) for i in "32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70".split()],
[int(i) for i in "67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21".split()],
[int(i) for i in "24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72".split()],
[int(i) for i in "21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95".split()],
[int(i) for i in "78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92".split()],
[int(i) for i in "16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57".split()],
[int(i) for i in "86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58".split()],
[int(i) for i in "19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40".split()],
[int(i) for i in "04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66".split()],
[int(i) for i in "88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69".split()],
[int(i) for i in "04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36".split()],
[int(i) for i in "20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16".split()],
[int(i) for i in "20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54".split()],
[int(i) for i in "01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48".split()],
]
def main():
# 20 rows of 20 integers
_max = 0
for i in range(20):
for j in range(16):
# horizontal products
product = L[i][j] * L[i][j + 1] * L[i][j + 2] * L[i][j + 3]
if product > _max:
_max = product
# up/down products
product = L[j][i] * L[j + 1][i] * L[j + 2][i] * L[j + 3][i]
if product > _max:
_max = product
# diagonal products left to right
for i in range(16):
for j in range(16):
product = L[i][j] * L[i + 1][j + 1] * L[i + 2][j + 2] * L[i + 3][j + 3]
if product > _max:
_max = product
# diagonal products right to left
for i in range(3, 20):
for j in range(16):
product = L[i][j] * L[i - 1][j + 1] * L[i - 2][j + 2] * L[i - 3][j + 3]
if product > _max:
_max = product
return _max
if __name__ == '__main__':
print(main())
# 70600674 in 578usec