Files
aoc/2024/day10.py
2024-12-14 21:41:56 +01:00

84 lines
2.3 KiB
Python

# AOC Day Script Day XX
# Date : 20XX.12.XX
# Python Code
# Developer : David Bandeira
import sys,time
from helpingFunctions import *
from collections import defaultdict
setSampleMode(False)
aocDay = identifyDay(sys.argv[0])
aocYear = identifyYear(sys.argv[0])
path = getPath2Data(aocDay,aocYear)
filename = getFilename2Data(aocDay)
def createGrid(data):
grid = {}
for gridY in range(len(data)):
for gridX in range(len(data[0])):
grid[gridX,gridY]=int(data[gridY][gridX])
return grid
def findTrails(grid):
trails = {}
trailStartList = [k for k,v in grid.items() if v == 0]
return trailStartList
def findNextinTrail(pos,trail,grid,p2=False):
ret = []
trailX,trailY = trail
for moveX,moveY in [(-1,0),(0,-1),(1,0),(0,1)]:
try:
value = grid[(trailX+moveX,trailY+moveY)]
except:
value = -1
if value == 9 and pos == 8:
ret.append((trailX+moveX,trailY+moveY))
elif value == pos + 1:
ret = ret + findNextinTrail(pos+1,(trailX+moveX,trailY+moveY),grid,p2)
if p2 == False:
ret = list(set(ret))
return list(ret)
def taskA (data) -> int:
gameScoreA = 0
grid = createGrid(data)
trailList = findTrails(grid)
for trail in trailList:
gameScoreA += len(findNextinTrail(0,trail,grid))
return gameScoreA
def taskB (data) -> int:
gameScoreB = 0
grid = createGrid(data)
trailList = findTrails(grid)
for trail in trailList:
gameScoreB += len(findNextinTrail(0,trail,grid,True))
return gameScoreB
def task(task: int,data) -> int:
score=0
if task == 1:
score = taskA(data)
elif task == 2:
score = taskB(data)
return score
def main():
showSampleMode()
try:
data = open(path+'/'+filename).read().strip().split('\n')
except:
print ('no inputfile found')
print ('please check file %s on path %s' % (filename, path))
quit()
st=time.time()
print ('Day '+aocDay+': Tasks 1: '+ str(task(1,data))+ ' executation time: ' + str(int((time.time()-st)*1000)) + 'ms')
st=time.time()
print ('Day '+aocDay+': Tasks 2: '+ str(task(2,data))+ ' executation time: ' + str(int((time.time()-st)*1000)) + 'ms')
if __name__ == "__main__":
main()