···11+import fileinput
22+from utils import parse_nums
33+44+55+def solve(vel_x=0, vel_y=0):
66+ x = 0
77+ y = 0
88+ max_y = 0
99+1010+ while x <= END_X and y >= END_Y - 30:
1111+ x += vel_x
1212+ y += vel_y
1313+ max_y = max(max_y, y)
1414+1515+ if vel_x > 0:
1616+ vel_x -= 1
1717+ elif vel_x < 0:
1818+ vel_x += 1
1919+2020+ vel_y -= 1
2121+2222+ # We are in the target zone.
2323+ if START_X <= x <= END_X and START_Y <= y <= END_Y:
2424+ return max_y
2525+2626+2727+# Parse problem input.
2828+START_X, END_X, START_Y, END_Y = parse_nums(fileinput.input()[0])
2929+3030+# Compute viable start velocities.
3131+viables = [solve(x, y) for y in range(START_Y, -START_Y + 1) for x in range(END_X + 1)]
3232+viables = [v for v in viables if v is not None]
3333+3434+print "Part 1:", max(viables)
3535+print "Part 2:", sum(1 for v in viables)