Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # bestand lezen en in stukjes hakken:
- bestand = open('input.txt', 'r')
- alles = bestand.readlines()
- for x in range(len(alles)):
- alles[x] = '.'+alles[x].replace('\n', '')+'.'
- symbolen = ['#', '$', '%', '&', '*', '+', '-', '/', '=', '@']
- getallen = []
- for x in range(len(alles)):
- # print(alles[x])
- getallen.append(alles[x].split('.'))
- for y in range(len(symbolen)):
- while symbolen[y] in getallen[x]:
- getallen[x].remove(symbolen[y])
- while '' in getallen[x]:
- getallen[x].remove('')
- antwoorda = 0
- #horizontaal zoeken:
- for x in range(len(getallen)):
- for y in range(len(getallen[x])):
- for z in range(len(symbolen)):
- if symbolen[z] in getallen[x][y]:
- gevonden = getallen[x][y].split(symbolen[z])
- if '' in gevonden:
- gevonden.remove('')
- for a in range(len(gevonden)):
- antwoorda += int(gevonden[a])
- getallen[x][y] = ''
- while '' in getallen[x]:
- getallen[x].remove('')
- #verticaal zoeken:
- for x in range(len(getallen)):
- for y in range(len(getallen[x])):
- teltdeze = 0
- start = alles[x].find('.'+getallen[x][y]+'.')+1
- eind = start+len(getallen[x][y])
- if x > 0:
- for z in range(len(symbolen)):
- if symbolen[z] in alles[x-1][start-1:eind+1]:
- teltdeze = 1
- if x < len(alles)-1:
- for z in range(len(symbolen)):
- if symbolen[z] in alles[x+1][start-1:eind+1]:
- teltdeze = 1
- antwoorda += int(getallen[x][y]) * teltdeze
- print(antwoorda)
- #gear ratios:
- def linkergetal(lijn, plek):
- getal = '0'
- for x in range(plek):
- if alles[lijn][plek-x-1].isnumeric():
- getal = alles[lijn][plek-x-1] + getal
- else:
- return(int(getal)/10)
- return(int(getal))
- def rechtergetal(lijn, plek):
- getal = '0'
- for x in range(plek):
- if alles[lijn][plek+x+1].isnumeric():
- getal += alles[lijn][plek+x+1]
- else:
- return(int(getal))
- return(int(getal))
- def bovengetal(lijn,plek):
- getal = '0'
- gevonden = 0
- for x in range(3):
- if alles[lijn-1][plek+1-x].isnumeric():
- gevonden = plek+1-x
- if gevonden > 0:
- while alles[lijn-1][gevonden-1].isnumeric():
- gevonden -= 1
- for x in range(4):
- if alles[lijn-1][gevonden+x].isnumeric():
- getal += alles[lijn-1][gevonden+x]
- else:
- return(int(getal))
- return(int(getal))
- def ondergetal(lijn,plek):
- getal = '0'
- gevonden = 0
- for x in range(3):
- if alles[lijn+1][plek+1-x].isnumeric():
- gevonden = plek+1-x
- if gevonden > 0:
- while alles[lijn+1][gevonden-1].isnumeric():
- gevonden -= 1
- for x in range(4):
- if alles[lijn+1][gevonden+x].isnumeric():
- getal += alles[lijn+1][gevonden+x]
- else:
- return(int(getal))
- return(int(getal))
- def dubbelonder(lijn, plek):
- if alles[lijn+1][plek-1].isnumeric() and alles[lijn+1][plek+1].isnumeric() and alles[lijn+1][plek] == '.':
- return(True)
- def linksonder(lijn, plek):
- getal = ''
- for x in range(3):
- if alles[lijn+1][plek-x-1].isnumeric():
- getal = alles[lijn+1][plek-x-1] + getal
- return(int(getal))
- def rechtsonder(lijn,plek):
- getal = ''
- for x in range(3):
- if alles[lijn+1][plek+x+1].isnumeric():
- getal += alles[lijn+1][plek+x+1]
- return(int(getal))
- def dubbelboven(lijn, plek):
- if alles[lijn-1][plek-1].isnumeric() and alles[lijn-1][plek+1].isnumeric() and alles[lijn-1][plek] == '.':
- return(True)
- def linksboven(lijn, plek):
- getal = ''
- for x in range(3):
- if alles[lijn-1][plek-x-1].isnumeric():
- getal = alles[lijn-1][plek-x-1] + getal
- return(int(getal))
- def rechtsboven(lijn,plek):
- getal = ''
- for x in range(3):
- if alles[lijn-1][plek+x+1].isnumeric():
- getal += alles[lijn-1][plek+x+1]
- return(int(getal))
- def tandwiel(lijn,plek):
- deze = []
- if lijn > 0:
- if dubbelboven(lijn,plek):
- deze = [linksboven(lijn,plek), rechtsboven(lijn,plek)]
- return(deze)
- elif bovengetal(lijn,plek) > 0:
- deze.append(bovengetal(lijn,plek))
- if rechtergetal(lijn,plek) > 0:
- deze.append(rechtergetal(lijn,plek))
- if lijn < len(alles)-1:
- if dubbelonder(lijn,plek):
- deze = [linksonder(lijn,plek), rechtsonder(lijn,plek)]
- return(deze)
- elif ondergetal(lijn,plek) > 0:
- deze.append(ondergetal(lijn,plek))
- if linkergetal(lijn,plek) > 0:
- deze.append(linkergetal(lijn,plek))
- return(deze)
- antwoordb = 0
- for x in range(len(alles)):
- for y in range(len(alles[x])):
- if alles[x][y] == '*':
- deze = tandwiel(x,y)
- if len(deze) == 2:
- antwoordb += deze[0] * deze[1]
- print(antwoordb)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement