Files
AdventOfCode2025/Problem4_2.py
2025-12-06 10:23:09 -05:00

96 lines
2.2 KiB
Python

def checkRolls(x: int, y: int) :
rolls = 0
#!Check row above
if y > 0 :
#Check above left
if x > 0 and inputGrid[y - 1][x - 1] == "@" :
rolls += 1
#Check directly above
if inputGrid[y - 1][x] == "@" :
rolls += 1
#Check above right
if x < len(inputGrid[y - 1]) - 1 and inputGrid[y - 1][x + 1] == "@" :
rolls += 1
#!Check same row
#Check left
if x > 0 and inputGrid[y][x - 1] == "@" :
rolls += 1
#Check right
if x < len(inputGrid[y]) - 1 and inputGrid[y][x + 1] == "@":
rolls += 1
#!Check row below
if y < len(inputGrid) - 1 :
#Check below left
if x > 0 and inputGrid[y + 1][x - 1] == "@" :
rolls += 1
#Check directly below
if inputGrid[y + 1][x] == "@" :
rolls += 1
#Check below right
if x < len(inputGrid[y]) - 1 and inputGrid[y + 1][x + 1] == "@" :
rolls += 1
return rolls
testInput = [
"..@@.@@@@.",
"@@@.@.@.@@",
"@@@@@.@.@@",
"@.@@@@..@.",
"@@.@@@@.@@",
".@@@@@@@.@",
".@.@.@.@@@",
"@.@@@.@@@@",
".@@@@@@@@.",
"@.@.@@@.@."
]
def readFile() :
ary = []
with open("files/Problem4.txt", "r") as file :
for line in file :
ary.append(line.replace("\n", ""))
return ary
def printGrid() :
for line in inputGrid :
print(line)
print("")
def clearGrid() :
for y in range(len(inputGrid)) :
newLine = inputGrid[y]
newLine = newLine.replace("x", ".")
inputGrid[y] = newLine
#inputGrid = testInput
inputGrid = readFile()
removableRoles = 0
x = 0
y = 0
rollLocations = []
#If accessible roles are found, remove them from the grid and begin again until no more are found
while True :
#printGrid()
#clearGrid()
for y in range(len(inputGrid)) :
for x in range(len(inputGrid[y])) :
if inputGrid[y][x] == "@" :
rollsAround = checkRolls(x, y)
#print(f"roll at ({x}, {y}) with {rollsAround} rolls around")
if rollsAround < 4 :
removableRoles += 1
#Save X,Y of accessible rolls
rollLocations.append((x, y))
#print(f"Accessible roll at ({x}, {y}) with {rollsAround} rolls around")
if len(rollLocations) == 0 :
break
for loc in rollLocations :
inputGrid[loc[1]] = inputGrid[loc[1]][:loc[0]] + "x" + inputGrid[loc[1]][loc[0] + 1:]
rollLocations = []
#printGrid()
print(f"Total removable roles = {removableRoles}")
#Too low = 8316