Day 14 2022
This commit is contained in:
parent
5b4ff86cfe
commit
369d2dbc6d
3 changed files with 234 additions and 0 deletions
88
Python/2022/14/main.py
Normal file
88
Python/2022/14/main.py
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
input = open("input", 'r')
|
||||
# input = open("sample", 'r')
|
||||
|
||||
data = []
|
||||
total = 0
|
||||
|
||||
minx = 1000
|
||||
miny = 0
|
||||
maxx = 500
|
||||
maxy = 0
|
||||
for line in input:
|
||||
nums = line.strip().split(" -> ")
|
||||
tempdata = []
|
||||
for string in nums:
|
||||
x, y = string.split(",")
|
||||
minx = min(minx, int(x))
|
||||
miny = min(miny, int(y))
|
||||
maxx = max(maxx, int(x))
|
||||
maxy = max(maxy, int(y))
|
||||
tempdata.append((int(x), int(y)))
|
||||
data.append(tempdata)
|
||||
|
||||
minx -= maxy
|
||||
|
||||
grid = [["." for _ in range(maxx-minx+1+maxy)] for _ in range(maxy-miny+1)]
|
||||
|
||||
for line in data:
|
||||
for one, two in zip(line, line[1:]):
|
||||
if one[0] == two[0]:
|
||||
i = min(one[1], two[1])
|
||||
a = max(one[1], two[1])
|
||||
for y in range(i, a+1):
|
||||
grid[y-miny][one[0]-minx] = "#"
|
||||
else:
|
||||
i = min(one[0], two[0])
|
||||
a = max(one[0], two[0])
|
||||
for x in range(i, a+1):
|
||||
grid[one[1]-miny][x-minx] = "#"
|
||||
|
||||
# Send sand
|
||||
falling = False
|
||||
while not falling:
|
||||
settled = False
|
||||
sandpos = (500-minx, 0-miny)
|
||||
while not settled:
|
||||
if sandpos[1]+1 >= len(grid):
|
||||
falling = True
|
||||
break
|
||||
if grid[sandpos[1]+1][sandpos[0]] == ".":
|
||||
sandpos = (sandpos[0], sandpos[1]+1)
|
||||
elif grid[sandpos[1]+1][sandpos[0]-1] == ".":
|
||||
sandpos = (sandpos[0]-1, sandpos[1]+1)
|
||||
elif grid[sandpos[1]+1][sandpos[0]+1] == ".":
|
||||
sandpos = (sandpos[0]+1, sandpos[1]+1)
|
||||
else:
|
||||
grid[sandpos[1]][sandpos[0]] = "o"
|
||||
settled = True
|
||||
total += 1
|
||||
# print(sandpos)
|
||||
|
||||
print(total)
|
||||
|
||||
grid.append(["." for _ in range(maxx-minx+1+maxy)])
|
||||
grid.append(["#" for _ in range(maxx-minx+1+maxy)])
|
||||
|
||||
final = False
|
||||
while not final:
|
||||
settled = False
|
||||
sandpos = (500-minx, 0-miny)
|
||||
while not settled:
|
||||
if grid[sandpos[1]+1][sandpos[0]] == ".":
|
||||
sandpos = (sandpos[0], sandpos[1]+1)
|
||||
elif grid[sandpos[1]+1][sandpos[0]-1] == ".":
|
||||
sandpos = (sandpos[0]-1, sandpos[1]+1)
|
||||
elif grid[sandpos[1]+1][sandpos[0]+1] == ".":
|
||||
sandpos = (sandpos[0]+1, sandpos[1]+1)
|
||||
else:
|
||||
if sandpos[1] == 0-miny and sandpos[0] == 500-minx:
|
||||
final = True
|
||||
grid[sandpos[1]][sandpos[0]] = "o"
|
||||
settled = True
|
||||
total += 1
|
||||
# print(sandpos)
|
||||
for row in grid:
|
||||
for column in row:
|
||||
print(column, end="")
|
||||
print()
|
||||
print(total)
|
||||
Loading…
Add table
Add a link
Reference in a new issue