Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- inputfile="input14.txt"
- ##inputfile="test14.txt"
- contents=open(inputfile).read().split("\n")
- ymax=0
- pathlist=[]
- xmin=-10**4
- xmax=10**4
- for line in contents:
- pairlist=list(map(lambda x: x.split(","), line.split(" -> ")))
- pairlist=list(map(lambda x: (int(x[0]), int(x[1])), pairlist))
- for pair in pairlist:
- ymax=max(pair[1], ymax)
- pathlist.append(pairlist)
- grid=[list("."*(xmax-xmin+3)) for _ in range(ymax+2)]
- sand=(500-xmin+1, 0)
- grid[sand[1]][sand[0]]="+"
- for path in pathlist:
- for i in range(1, len(path)):
- xs, ys = path[i-1]
- xf, yf = path[i]
- xs, xf, ys, yf = min(xs, xf), max(xs, xf), min(ys, yf), max(ys, yf)
- dx, dy = xf-xs, yf-ys
- if dy==0:
- for x in range(xs, xf+1):
- grid[ys][x-xmin+1]="#"
- if dx==0:
- for y in range(ys, yf+1):
- grid[y][xs-xmin+1]="#"
- maxcount=1
- xstart, xend = sand[0], sand[0]+1
- for row in range(1, ymax+2):
- xstart-=1
- xend+=1
- for col in range(xstart, xend):
- if grid[row][col]==".":
- if not (grid[row-1][col-1]=="#" and grid[row-1][col]=="#" and grid[row-1][col+1]=="#"):
- maxcount+=1
- else:
- grid[row][col]="#"
- falling=True
- sandcount=0
- try:
- while falling:
- atrest=False
- sandx, sandy = sand
- while not atrest:
- poslist=[(sandx, sandy+1), (sandx-1, sandy+1), (sandx+1, sandy+1)]
- newposfound=False
- for x, y in poslist:
- if grid[y][x]==".":
- newposfound=True
- sandx, sandy = x, y
- break
- if not newposfound:
- grid[sandy][sandx]="o"
- sandcount+=1
- atrest=True
- if sandy==ymax:
- falling=False
- except:
- pass
- print(sandcount)
- print(maxcount)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement