#!/usr/bin/python3 import sys import fileinput grid = {} xmin, xmax = 500, 500 ymin, ymax, floor = 0, 0, 0 def put(x, y, char): global grid, xmin, xmax, ymin, ymax if x > xmax: xmax = x if x < xmin: xmin = x if y > ymax: ymax = y if y < ymin: ymin = y grid[(x,y)] = char def show(): global grid, xmin, xmax, ymin, ymax, floor for y in range(ymin, ymax+1): line = "" for x in range(xmin, xmax+1): if (x,y) not in grid: put(x, y, ('.','#')[y >= floor]) line += grid[(x,y)] print(line) def drop(x, y): global grid, floor while y < floor: if (x-1,y+1) not in grid: put(x-1, y+1, ('.','#')[y+1 >= floor]) if (x,y+1) not in grid: put(x, y+1, ('.','#')[y+1 >= floor]) if (x+1,y+1) not in grid: put(x+1, y+1, ('.','#')[y+1 >= floor]) if grid[(x,y+1)] == '.': y += 1 else: if grid[(x-1,y+1)] == '.': x -= 1 y += 1 elif grid[(x+1,y+1)] == '.': x += 1 y += 1 else: put(x, y, 'o') return for line in fileinput.input(): pairs = line.rstrip().split(' -> ') first = True for pair in pairs: x, y = list(map(int, pair.split(','))) if first: px, py = x, y first = False continue if px == x: if py < y: for yy in range(py, y+1): put(x, yy, '#') else: for yy in range(y, py+1): put(x, yy, '#') elif py == y: if px < x: for xx in range(px, x+1): put(xx, y, '#') else: for xx in range(x, px+1): put(xx, y, '#') px, py = x, y floor = ymax + 2 sand = 0 put(500, 0, '.') # drop(500,0); drop(500,0); drop(500,0); drop(500,0); drop(500,0) # show() # sys.exit(0) while grid[(500,0)] == '.': drop(500,0) sand += 1 # if sand % 10 == 0: # show() # print() print(sand)