Last active
August 29, 2015 14:11
-
-
Save ajweeks/6f7026a9bbb2518d4015 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Largest Product in a Grid | |
s = "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" | |
n = [int(a) for a in s.split()] | |
w = h = 20 # The number of elements per row / col | |
gp = 0 # greatest product so far | |
# horizontal | |
for a in range(len(n)): | |
if (a % w) + 3 >= w: # we're too close to the end of the line | |
break | |
r = n[a] * n[a + 1] * n[a + 2] * n[a + 3] | |
if r > gp: | |
gp = r | |
# vertical | |
for a in range(len(n)): | |
if a >= w*h-h*3: | |
continue | |
r = n[a] * n[a+w] * n[a+w*2] * n[a+w*3] | |
if r > gp: | |
gp = r | |
# diagonal \ | |
for a in range(len(n)): | |
if a >= w*h-h*3 or (a % w) + 3 >= w: | |
continue | |
r = n[a] * n[a+w+1] * n[a+w*3+2] * n[a+w*3+3] | |
if r > gp: | |
gp = r | |
# diagonal / | |
for a in range(len(n)): | |
if a >= w*h-h*3 or a % w < 3 or (a % w) + 3 >= w: | |
continue | |
r = n[a] * n[a+w-1] * n[a+w*2-2] * n[a+w*3-3] | |
if r > gp: | |
gp = r | |
print('greatest product: %d' % gp) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment