Advent of code

 8 décembre 2022 

  Treetop Tree House : Vue depuis les arbres façon jeu sky-skraper
020110220332333020110144320304
   
002120010112022233203323334422
   
000000000301021002423224442341
   
               
  1. code.py
################################
###   MODIFIÉ LE 9 DÉCEMBRE  ###
### (isStrictementPlusGrand) ###
################################

def vues(foret, i, j):
    yield foret[i][j:]    # droite
    yield foret[i][j::-1] # gauche
    yield [ foret[i2][j] for i2 in range(i, len(foret)) ]  # bas
    yield [ foret[i2][j] for i2 in range(i, -1, -1) ]  # haut

# Pour partie 1
def isStrictementPlusGrand(valeur, autresValeurs):
    return all(map(lambda x: x<valeur, autresValeurs))

def isStrictementPlusGrand_vieilleVersion(valeur, autresValeurs):
    if len(autresValeurs) == 0:
        return True
    return valeur > max(autresValeurs)

def isVisible(foret, i, j):
    for vue in vues(foret, i, j):
        if isStrictementPlusGrand(vue[0], vue[1:]):
            return True
    return False

# Pour partie 2
def calcScoreVue(vue):
    tailleBase = vue[0]
    nb = 0
    for i in range(1, len(vue)):
        nb += 1
        if vue[i] >= tailleBase:
            break
    return nb

def calcScore(vue, i, j):
    score = 1
    for vue in vues(vue, i, j):
        score *= calcScoreVue(vue)
    return score



f = open("input.txt", 'r')
foret = [list(map(int, line[:-1])) for line in f.readlines()]

nbVisibles = 0
scoreMax = 0
for i in range(len(foret)):
    for j in range(len(foret[0])):
        # Partie 1
        if isVisible(foret, i, j):
            nbVisibles += 1

        # Partie 2
        score = calcScore(foret, i, j)
        if score > scoreMax:
            scoreMax = score

print("Réponse partie 1:", nbVisibles)
print("Réponse partie 2:", scoreMax)