# Project Euler Problem 11

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?

http://projecteuler.net/problem=11

20*20の格子の上下左右・斜め方向に連続する4つの数の列の最大値を求める問題。

Problem 8 (http://xaro.hatenablog.jp/entry/2013/01/08/003315)のときに用いたosモジュールを用いる。取り込む際にmap(int,line.rstrip().split(" "))とすることで改行文字を除き空白を元に区切り、文字から整数に変換というのを一発で行う。他にいい方法はあるかもしれないが。

----

import os
os.chdir("PATH")

target = [map(int,line.rstrip().split(" ")) for line in open('Problem_011.txt', 'r')]
print target

tatesum = max([target[tate][yoko]*target[tate][yoko+1]*target[tate][yoko+2]*target[tate][yoko+3] \
for tate in xrange(len(target)) for yoko in xrange(len(target)-3)])

yokosum =  max([target[tate][yoko]*target[tate+1][yoko]*target[tate+2][yoko]*target[tate+3][yoko] \
for tate in xrange(len(target)-3) for yoko in xrange(len(target))])
miginanamesum = max([target[tate][yoko]*target[tate+1][yoko+1]*target[tate+2][yoko+2]*target[tate+3][yoko+3] \
for tate in xrange(len(target)-3) for yoko in xrange(len(target)-3)])

hidarinanamesum = max([target[tate][yoko+3]*target[tate+1][yoko+2]*target[tate+2][yoko+1]*target[tate+3][yoko] \
for tate in xrange(len(target)-3) for yoko in xrange(len(target)-3)])
print max([tatesum,yokosum,miginanamesum,hidarinanamesum])
----