Advertisement
Guest User

Untitled

a guest
Dec 14th, 2022
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.89 KB | None | 0 0
  1.  
  2.  
  3. inputfile="input14.txt"
  4. ##inputfile="test14.txt"
  5. contents=open(inputfile).read().split("\n")
  6. ymax=0
  7. pathlist=[]
  8. xmin=-10**4
  9. xmax=10**4
  10. for line in contents:
  11. pairlist=list(map(lambda x: x.split(","), line.split(" -> ")))
  12. pairlist=list(map(lambda x: (int(x[0]), int(x[1])), pairlist))
  13.  
  14. for pair in pairlist:
  15. ymax=max(pair[1], ymax)
  16. pathlist.append(pairlist)
  17.  
  18. grid=[list("."*(xmax-xmin+3)) for _ in range(ymax+2)]
  19. sand=(500-xmin+1, 0)
  20. grid[sand[1]][sand[0]]="+"
  21. for path in pathlist:
  22. for i in range(1, len(path)):
  23. xs, ys = path[i-1]
  24. xf, yf = path[i]
  25. xs, xf, ys, yf = min(xs, xf), max(xs, xf), min(ys, yf), max(ys, yf)
  26. dx, dy = xf-xs, yf-ys
  27. if dy==0:
  28. for x in range(xs, xf+1):
  29. grid[ys][x-xmin+1]="#"
  30. if dx==0:
  31. for y in range(ys, yf+1):
  32. grid[y][xs-xmin+1]="#"
  33. maxcount=1
  34. xstart, xend = sand[0], sand[0]+1
  35. for row in range(1, ymax+2):
  36. xstart-=1
  37. xend+=1
  38. for col in range(xstart, xend):
  39. if grid[row][col]==".":
  40. if not (grid[row-1][col-1]=="#" and grid[row-1][col]=="#" and grid[row-1][col+1]=="#"):
  41. maxcount+=1
  42. else:
  43. grid[row][col]="#"
  44.  
  45. falling=True
  46. sandcount=0
  47. try:
  48. while falling:
  49. atrest=False
  50. sandx, sandy = sand
  51. while not atrest:
  52. poslist=[(sandx, sandy+1), (sandx-1, sandy+1), (sandx+1, sandy+1)]
  53. newposfound=False
  54. for x, y in poslist:
  55. if grid[y][x]==".":
  56. newposfound=True
  57. sandx, sandy = x, y
  58. break
  59. if not newposfound:
  60. grid[sandy][sandx]="o"
  61. sandcount+=1
  62. atrest=True
  63. if sandy==ymax:
  64. falling=False
  65. except:
  66. pass
  67. print(sandcount)
  68. print(maxcount)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement