Your catch time is wrong. It is as if you considered that the road runner is not moving. The distance is changing with time, you forgot the add that as well.
Here is a fix:
Instead of trying to figure out catch_time, consider it as a race. If the coyote arrives first, he wins. Else, the road runner wins.
Which means, catch_time will now represent the time needed for the coyote to go to safe zone. Thus this formula:
catch_time = (dist_apart+dist_to_safety) / k_speed
Also, catch_rate will be useless if you look at the situation like I did, so you can remoce it.
Adam technically, the road runner will be safe.
If they voth arrive to safe zone same time, then the road runner will already be safe.
But what matters is that you deliberately left it out, so no problem 👌