diff --git a/2022/day08.py b/2022/day08.py new file mode 100755 index 0000000..2453662 --- /dev/null +++ b/2022/day08.py @@ -0,0 +1,91 @@ +#!/usr/bin/python3 +""" +Jour 08 du défi Advent Of Code pour l'année 2022 +""" + +def read_sample(): + """récupère les entrées depuis le fichier texte correspondant""" + with open('inputs/day08.txt', 'r') as f: + sample = f.read().split('\n') + sample = [ [int(j) for j in i] for i in sample if i != '' ] + return sample + +def is_visible(sample, i, j): + vis = True + for k in range(len(sample[i])): + if k != j and sample[i][j] <= sample[i][k]: + vis = False + if k == j and vis: + return 1 + if k == j: + vis = True + if k > j and sample[i][j] <= sample[i][k]: + vis = False + if vis: + return 1 + vis = True + for k in range(len(sample)): + if k != i and sample[i][j] <= sample[k][j]: + vis = False + if k == i and vis: + return 1 + if k == i: + vis = True + if k > i and sample[i][j] <= sample[k][j]: + vis = False + if vis: + return 1 + + + +def part1(sample): + """Partie 1 du défi""" + tot = 0 + for i in range(len(sample)): + for j in range(len(sample[0])): + if is_visible(sample, i, j): + tot += 1 + return tot + + + +def scenic_score(sample, i, j): + left, right, up, down = j, len(sample[0])-j-1, i, len(sample)-i-1 + for k in range(1, j): + if sample[i][k] >= sample[i][j]: + left = j-k + + for k in range(1, len(sample[0])-j): + if sample[i][len(sample[0])-k] >= sample[i][j]: + right = len(sample[0])-j-k + + for k in range(1, i): + if sample[k][j] >= sample[i][j]: + up = i-k + + for k in range(1, len(sample)-i): + if sample[len(sample)-k][j] >= sample[i][j]: + down = len(sample)-i-k + + return left*right*up*down + + + +def part2(sample): + """Partie 2 du défi""" + views = [] + for i in range(1, len(sample)-1): # Edges will be 0 + for j in range(1, len(sample[0])-1): + views.append(scenic_score(sample, i, j)) + + return max(views) + + +def main(): + """Fonction principale""" + sample = read_sample() + print(f"part1: {part1(sample)}") + print(f"part2: {part2(sample)}") + +if __name__ == "__main__": + main()