#!/usr/bin/env python3 from itertools import count lines = ([[int(z) for z in y.split(',')] for y in x.strip().split(" -> ")] for x in open("input.txt")) blocked = set() bottom = 0 for line in lines: for a, b in zip(line[:-1], line[1:]): for x in range(min(a[0], b[0]), max(a[0], b[0])+1): for y in range(min(a[1], b[1]), max(a[1], b[1])+1): blocked.add((x, y)) bottom = max(bottom, y) def drop(): x, y = 500, 0 if (x, y) in blocked: return False while y-1 != bottom: for nxt in ((x, y+1), (x-1, y+1), (x+1, y+1)): if nxt not in blocked: x, y = nxt break else: return x, y return x, y for cnt in count(): pos = drop() if not pos: print("Start is occupied!", cnt) break blocked.add(pos)