Files
SolutionEuler/solutions/0011.grid/eular_11.py
Sidney Zhang fbfbfd25b4 feat(eular_11.py):添加欧拉项目第11题的解决方案,使用NumPy计算网格中四个相邻数字的最大乘积
 feat(eular_12.py):添加欧拉项目第12题的解决方案,计算第一个拥有超过500个因数的三角数
📝 docs(readme.md):添加三角数的详细文档,涵盖数学概念、应用领域和博弈论中的实际例子
2025-12-16 18:13:58 +08:00

46 lines
1.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import numpy as np
def max_product_grid_numpy(grid: list[list[int]]) -> int:
g = np.array(grid)
# 四个方向的原位切片无Python循环
right = g[:, :-3] * g[:, 1:-2] * g[:, 2:-1] * g[:, 3:]
down = g[:-3, :] * g[1:-2, :] * g[2:-1, :] * g[3:, :]
diag = g[:-3, :-3] * g[1:-2, 1:-2] * g[2:-1, 2:-1] * g[3:, 3:]
anti = g[:-3, 3:] * g[1:-2, 2:-1] * g[2:-1, 1:-2] * g[3:, :-3]
return max(right.max(), down.max(), diag.max(), anti.max())
def main() -> None:
txt = """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"""
data = txt.split("\n")
data = [(i.split(" ")) for i in data]
data = [[int(j) for j in i] for i in data]
res = max_product_grid_numpy(data)
print(res)
if __name__ == "__main__":
main()