Created
December 13, 2017 18:58
-
-
Save phrz/fb73d0aab6ee30a85bcc47e79aaf420e to your computer and use it in GitHub Desktop.
Project Euler Problem #11, golfed to hell (369B not counting comments and matrix string)
This file contains hidden or 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
| ''' | |
| Project Euler | |
| Problem 11 | |
| In the 20×20 grid below, four numbers along a diagonal line have been marked in red. | |
| [omitted] | |
| 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? | |
| ANSWER | |
| 70600674 | |
| First, parse the string to a 2D array. | |
| We build four arrays of groups, where a group is a 4-array of | |
| 2-tuples representing 2D coordinates. Each group is a set | |
| of positions whose corresponding values need to be multiplied | |
| together to find the products for this problem. | |
| Below we generate horizontal, vertical, right-diagonal, and | |
| left-diagonal groups (in that order). | |
| We map each coordinate tuple to its corresponding value, then | |
| reduce each group by multiplication. We find the max. | |
| ''' | |
| t = ''' | |
| 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 | |
| ''' | |
| from functools import reduce | |
| R,a=range,[[*map(int,line.split())]for line in t.strip().split('\n')] | |
| I,F,P=R(4),R(20),R(17) | |
| print(max([reduce(lambda x,y:x*y,[a[r][c]for r,c in g])for g in[[(r,c+i)for i in I]for r in F for c in P]+[[(r+i,c)for i in I]for r in P for c in F]+[[(r+i,c+i)for i in I]for r in P for c in P]+[[(r+i,c-i)for i in I]for r in P for c in R(3,20)]])) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment