[문제]
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?
[풀이]
text='''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'''
def multipleCompare(s, result):
#multiple
mul = 1
for i in s:
mul *=int(i)
#compare
if mul>result: return mul
else: return result
result = 0
#splitText=list(map(lambda a: a.split(' '), text.split('\n')))
splitText=[a.split(' ') for a in text.split('\n')]
for yidx, yValue in enumerate(splitText):
for xidx, xValue in enumerate(yValue):
if xidx+3<len(yValue):
resutl = multipleCompare(yValue[xidx:xidx+4],result)
if yidx+3<len(splitText):
result = multipleCompare([splitText[yidx][xidx],splitText[yidx+1][xidx],splitText[yidx+2][xidx],splitText[yidx+3][xidx]],result)
if xidx+3<len(yValue) and yidx+3<len(splitText):
result = multipleCompare([splitText[yidx][xidx],splitText[yidx+1][xidx+1],splitText[yidx+2][xidx+2],splitText[yidx+3][xidx+3]],result)
if yidx+3<len(splitText) and xidx-3>0:
result = multipleCompare([splitText[yidx][xidx],splitText[yidx+1][xidx-1],splitText[yidx+2][xidx-2],splitText[yidx+3][xidx-3]],result)
print(result)
'''
일단 너무 지저분하게 짜놔서 부끄럽긴하지만..
소스 피드백을 받았다!
피드백 받은 부분은 2가지 정도이다.
1. List Comprehension을 사용해볼 것
2. 배열을 사용해서 인덱싱 해볼 것
1번은 완료했다!
2번은.. 일단 더 생각해보기로 했다.
multipleCompare의 multiple부분은 reduce로 바꿀 수 있을 듯 하다!
오늘 배운 것은 List Comprehension, reduce!
'''
'파이썬' 카테고리의 다른 글
[Project Euler]13. Large sum (0) | 2021.06.07 |
---|---|
[Project Euler]12. Highly divisible triangular number (0) | 2021.06.06 |
[Project Euler]10. Summation of primes (0) | 2021.06.01 |
[Project Euler]9. Special Pythagorean triplet (0) | 2021.05.29 |
[Project Euler]8. Largest product in a series (0) | 2021.05.28 |