[\d-]*)..(?P[\d-]*), y=(?P[\d-]*)..(?P[\d-]*)#', $input[0], $found); $totalMaxY = 0; $velocities = 0; for ($x = 0; $x < 1500; $x++) { for ($y = -500; $y < 500; $y++) { $velocityX = $x; $velocityY = $y; $position = [0, 0]; $maxY = 0; while ($position[0] < $found['x2'] && $position[1] > $found['y2']) { $position[0] += $velocityX; $position[1] += $velocityY; if ($velocityX != 0) { $velocityX += $velocityX > 0 ? -1 : 1; } if ($position[1] > $maxY) { $maxY = $position[1]; } $velocityY--; if ($position[0] >= $found['x1'] && $position[0] <= $found['x2'] && $position[1] <= $found['y1'] && $position[1] >= $found['y2']) { $velocities++; if ($maxY > $totalMaxY) { $totalMaxY = $maxY; } break; } } } } echo $velocities; //4556