51 lines
1.7 KiB
Python
51 lines
1.7 KiB
Python
|
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())
|