您的位置:首页 > 理论基础 > 计算机网络

https://projecteuler.net/problem=11

2016-02-28 21:52 489 查看
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.

What is the greatest product of four adjacent numbers in the same direction (up, down, left, right, or diagonally) in the 20×20 grid?

代码如下,其实可以直接判断元素的位置,就可以判断出哪几个方向可以计算,而不需要一个元素一个元素的判断,目前的算法浪费时间了,回头再优化吧。

datalist = []
for line in open('data.txt','r'):
numlist = list(map(int,line.split(',')))
datalist.append(numlist)
print(datalist)

result = 0

def biggestProduct():
result = 0
for i in range(0,len(datalist)):
for j in range(0,len(datalist[0])):
temp = bigProduct(i,j)
if result < temp:
result = temp
return result

def bigProduct(i,j):
right = directProduct(i,j,'right')
down = directProduct(i,j,'down')
rightdown = directProduct(i,j,'rightdown')
leftdown = directProduct(i,j,'leftdown')
return max([right,down,rightdown,leftdown])

def directProduct(i,j,direct):
result = 1
if direct == 'right':
for k in range(0,4):
if j + k < len(datalist[0]):
result *= datalist[i][j+k]
else:
return 0
elif direct == 'down':
for k in range(0,4):
if i + k < len(datalist):
result *= datalist[i+k][j]
else:
return 0
elif direct == 'rightdown':
for k in range(0,4):
if i+k < len(datalist) and j+k < len(datalist[0]):
result *= datalist[i+k][j+k]
else:
return 0
elif direct == 'leftdown':
for k in range(0,4):
if i + k < len(datalist) and j - k >= 0:
result *= datalist[i+k][j-k]
else:
return 0
else:
pass
return result

print(biggestProduct())


4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: