diff --git a/d03/run2.py b/d03/run2.py new file mode 100644 index 0000000..93ae41c --- /dev/null +++ b/d03/run2.py @@ -0,0 +1,51 @@ +import sys + +myList = list(list(map(str,s)) for s in sys.stdin.read().splitlines()) + +def if_symbol_adj(l, n, i): + for m in [n-1, n, n+1]: + if m < 0 or m > len(l)-1: continue + for j in [i-1, i, i+1]: + if j < 0 or j > len(l[m])-1: continue + if l[m][j] == "*" : + return True, m, j + else: + pass + return False, 0, 0 + +def gear(list_etoile, etoile_en_cours, liste_nb): + for idx in range(len(list_etoile)): + if list_etoile.count(list_etoile[idx]) == 2 and etoile_en_cours == list_etoile[idx]: + return int(liste_nb[idx]) + return 0 + +def main(S = 0): + list_etoile = [] + liste_nb = [] + etoile_en_cours = [0,0] + # de haut en bas + for n in range(len(myList)): + nb = "" + if_sum = False + # de gauche à droite + for i in range(len(myList[n])): + if myList[n][i].isdigit(): + nb = "".join([nb, myList[n][i]]) + result, x, y = if_symbol_adj(myList, n, i) + if_sum = if_sum or result + etoile_en_cours = [max(x, etoile_en_cours[0]) , max(y, etoile_en_cours[1])] + + if not myList[n][i].isdigit() or i == len(myList[n]) -1: + # soit pas encore un nombre soit la fin d'un nombre, soit la fin d'une ligne + if nb!="": + #print(nb, if_sum) + list_etoile.append((etoile_en_cours)) + liste_nb.append((nb)) + if if_sum: S+= (int(nb) * gear(list_etoile, etoile_en_cours, liste_nb)) + if_sum = False + nb = "" + etoile_en_cours = [0,0] + return S + +if __name__ == '__main__': + print(main()) \ No newline at end of file