这个比前面的要复杂点,但找对了规律,还是可以的。
我逻辑思维不强,只好画图来数数列的下标了。
分四次计算,存入最大值。
左右一次,上下一次,左斜一次,右斜一次。
In the 2020 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 2020 grid?
str = "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 "
numList = str.split()
print numList
print len(numList)
maxNum = 0
for i in xrange(0,len(numList)-3):
if (i % 20 == 18) or (i % 20 == 19) or (i % 20 == 17) :
continue
curNum = int(numList[i])*int(numList[i+1])*int(numList[i+2])*int(numList[i+3])
if curNum > maxNum:
maxNum = curNum
#print i,curNum,maxNumfor i in xrange(0,len(numList)):
if (i >= 340):
break
curNum = int(numList[i])*int(numList[i+20])*int(numList[i+40])*int(numList[i+60])
if curNum > maxNum:
maxNum = curNum
#print i,curNum,maxNumfor i in xrange(0,len(numList)):
if (i >= 340):
break
if (i % 20 == 18) or (i % 20 == 19) or (i % 20 == 17) :
continue
curNum = int(numList[i])*int(numList[i+21])*int(numList[i+42])*int(numList[i+63])
if curNum > maxNum:
maxNum = curNum
#print i,curNum,maxNumfor i in xrange(0,len(numList)):
if (i < 60):
continue
if (i % 20 == 18) or (i % 20 == 19) or (i % 20 == 17) :
continue
curNum = int(numList[i])*int(numList[i-19])*int(numList[i-38])*int(numList[i-57])
if curNum > maxNum:
maxNum = curNum
#print numList[i],numList[i-19],numList[i-38],numList[i-57],curNum,maxNumprint maxNum