문제 : 아래와 같은 20×20 격자가 있습니다.
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
위에서 대각선 방향으로 연속된 붉은 숫자 네 개의 곱은 26 × 63 × 78 × 14 = 1788696 입니다.
그러면 수평, 수직, 또는 대각선 방향으로 연속된 숫자 네 개의 곱 중 최대값은 얼마입니까?
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 | def anyMax(): 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" max = 0 str = str.split(" ") for i in range(0, 20): for j in range(i*20, i*20 + 20): print "i : %d / j : %d" % (i, j) tmp = 0 if j < 340: tmp = int(str[j]) * int(str[j + 20]) * int(str[j + 20 * 2]) * int(str[j+20 * 3]) print "Vertical : %d" % tmp if tmp>max: max = tmp if j+3 == i*20 + 20: break else: tmp = int(str[j]) * int(str[j+1]) * int(str[j+2]) * int(str[j+3]) print "Horizontal : %d" % tmp if tmp > max: max = tmp if j<340: tmp = int(str[j]) * int(str[j+20+1]) * int(str[j+20*2+2]) * int(str[j+20*3+3]) print "\ : %d" % tmp if tmp > max: max = tmp tmp = int(str[j+3]) * int(str[j+20+2]) * int(str[j+20*2+1]) * int(str[j+20*3]) print "/ : %d" % tmp if tmp > max: max = tmp print "maximum value is %d" % max anyMax() | cs |
i : 19 / j : 393
Horizontal : 199004
i : 19 / j : 394
Horizontal : 87932
i : 19 / j : 395
Horizontal : 113297
i : 19 / j : 396
Horizontal : 5438256
i : 19 / j : 397
maximum value is 70600674
C:\Users\soicem's com\Desktop>
왜 안되나 했더니 맨마지막 *를 +로 적었었네. 이런 +
'* Computer Science > Project Euler' 카테고리의 다른 글
project euler 13. problem (0) | 2016.07.23 |
---|---|
project euler 12. problem (0) | 2016.07.22 |
project euler 10. problem (0) | 2016.07.20 |
project euler 9. problem (0) | 2016.07.19 |
project euler 8. problem (0) | 2016.07.18 |