2014年3月5日水曜日

#11(0.15 sec): http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2011

こういう問題は嫌いだな。

import numpy 
N=20

def l2r(ls):
    cl = []
    for l in ls:
        for i in range(0, N-3):
            if "00" in l[i:i+4]: break
            else: cl.append(l[i]*l[i+1]*l[i+2]*l[i+3])
    return max(cl)

def tl2br(ls):
    cl = []
    for l in range(0, N-3):
        for c in range(0, N-3):
            t = [ls[l+i, c+i] for i in range(0, 4)]
            if "00" in t: break
            else: cl.append(t[0]*t[1]*t[2]*t[3])
    return max(cl)

def tr2bl(ls):
    cl = []
    for l in range(0, N-3):
        for c in range(3, N):
            t = [ls[l+i, c-i] for i in range(0, 4)]
            if "00" in t: break
            else: cl.append(t[0]*t[1]*t[2]*t[3])
    return max(cl)

ls = numpy.loadtxt('input.dat', dtype='int')
candidates = [l2r(ls), l2r(ls.T), tl2br(ls), tr2bl(ls)]
print(max(candidates))

0 件のコメント:

コメントを投稿