my solutions for advent of code 2022
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
2.8 KiB

def expandGrid(direct):
if direct == "U":
gridVisited.insert(0, [])
for _ in range(len(gridVisited[1])):
gridVisited[0].append('.')
posHead[0] = posHead[0] + 1
posTail[0] = posTail[0] + 1
elif direct == "R":
for i in range(len(gridVisited)):
gridVisited[i].append('.')
elif direct == "D":
gridVisited.append([])
tempx = len(gridVisited) - 1
for _ in range(len(gridVisited[0])):
gridVisited[tempx].append('.')
elif direct == "L":
for i in range(len(gridVisited)):
gridVisited[i].insert(0, '.')
posHead[1] = posHead[1] + 1
posTail[1] = posTail[1] + 1
def checkDist():
tempa = posHead[1] - posTail[1]
tempb = posHead[0] - posTail[0]
tempc = tempa + tempb
if posHead[0] == posTail[0]:
if not(tempa == 1 or tempa == -1):
if tempa > 0:
posTail[1] += 1
elif tempa < 0:
posTail[1] -= 1
elif posHead[1] == posTail[1]:
tempa = posHead[0] - posTail[0]
if not(tempb == 1 or tempb == -1):
if tempb > 0:
posTail[0] += 1
elif tempb < 0:
posTail[0] -= 1
elif (tempc == -1 or tempc == 1) and tempb < 0:
posTail[0] -= 1
posTail[1] += 1
elif tempc == 3:
posTail[0] += 1
posTail[1] += 1
elif (tempc == -1 or tempc == 1) and tempb > 0:
posTail[0] += 1
posTail[1] -= 1
elif tempc == -3:
posTail[0] -= 1
posTail[1] -= 1
gridVisited[posTail[0]][posTail[1]] = '#'
gridVisited =[['#']]
posHead = [0, 0]
posTail = [0, 0]
with open('input9.txt','r') as f:
inp = f.read().splitlines(keepends=False)
direction = []
distance = []
for i in inp:
tempa, tempb = i.split(' ')
direction.append(tempa)
distance.append(int(tempb))
for x in range(len(direction)):
if direction[x] == 'U':
for y in range(distance[x]):
if posHead[0] == 0:
expandGrid("U")
posHead[0] -= 1
checkDist()
elif direction[x] == 'R':
for y in range(distance[x]):
if posHead[1] == len(gridVisited[0])-1:
expandGrid("R")
posHead[1] += 1
checkDist()
elif direction[x] == 'D':
for y in range(distance[x]):
if posHead[0] == len(gridVisited) - 1:
expandGrid("D")
posHead[0] += 1
checkDist()
elif direction[x] == 'L':
for y in range(distance[x]):
if posHead[1] == 0:
expandGrid("L")
posHead[1] -= 1
checkDist()
visited = 0
for i in gridVisited:
for x in i:
if x == '#':
visited += 1
print(visited)