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())