• # python procédural, moche mais efficace

    Posté par . En réponse au message Avent du Code, jour 8. Évalué à 3.

    Même méthode pour les deux parties : un parcours de chaque position d'une matrice. Pour chaque position, regarder à gauche, à droite, en haut, en bas. Ça donne pas un code très beau mais ça marche.

    part 1

    import sys
    L = list(list(map(int,s)) for s in sys.stdin.read().splitlines())
    W = len(L[0]) ; H = len(L)
    N=0
    for i in range(H):
     for j in range(W):
     v = L[i][j]
     # look right
     r = all(L[i][k]<v for k in range(j+1, W))
     # look left
     l = all(L[i][k]<v for k in range(j))
     # look up
     u = all(L[k][j]<v for k in range(i))
     # look down
     d = all(L[k][j]<v for k in range(i+1,H))
     N += (r|l|u|d)
    print(N, W*H)

    part 2

    Encore plus moche car le code à répéter quatre fois est plus long.

    import sys
    L = list(list(map(int,s)) for s in sys.stdin.read().splitlines())
    W = len(L[0]) ; H = len(L)
    S=0
    for i in range(H):
     for j in range(W):
     v = L[i][j]
     # look right
     r = 0
     for k in range(j+1, W):
     r += 1
     if L[i][k]>=v:
     break
     # look left
     l = 0
     for k in range(j-1,-1,-1):
     l+=1
     if L[i][k]>=v:
     break
     # look up
     u = 0
     for k in range(i-1,-1,-1):
     u+=1
     if L[k][j]>=v:
     break
     # look down
     d = 0
     for k in range(i+1,H):
     d += 1
     if L[k][j]>=v:
     break
     S = max(S,r*l*u*d)
    print(S)