Looking for good programming challenges?

Use the search below to find our solutions for selected questions!

Kangaroo challenge

Sharing is caring!

There are two kangaroos on an x-axis ready to jump in the positive direction (i.e, toward positive infinity). The first kangaroo starts at location x_1 and moves at a rate of v_1 meters per jump. The second kangaroo starts at location x_2 and moves at a rate of v_2 meters per jump. Given the starting locations and movement rates for each kangaroo, can you determine if they’ll ever land at the same location at the same time?

Input Format
A single line of four space-separated integers denoting the respective values of x_1, v_1, x_2, and v_2.

0 \le x_1 \textless x_2 \le 10000
1 \le v_1 \le 10000
1 \le v_2 \le 10000

Output Format
Print YES if they can land on the same location at the same time; otherwise, print NO.

Note: The two kangaroos must land at the same location after making the same number of jumps.

Sample Input 0

0 3 4 2

Sample Output 0


Explanation 0
The two kangaroos jump through the following sequence of locations:
0 \rightarrow 3 \rightarrow 6 \rightarrow 9 \rightarrow  12
4 \rightarrow  6 \rightarrow 8 \rightarrow 10 \rightarrow 12
Thus, the kangaroos meet after 4 jumps and we print YES.

Sample Input 1

0 2 5 3

Sample Output 1


Explanation 1
The second kangaroo has a starting location that is ahead (further to the right) of the first kangaroo’s starting location (i.e., x_2 \textgreater x_1). Because the second kangaroo moves at a faster rate (meaning v_2 \textgreater v_1) and is already ahead of the first kangaroo, the first kangaroo will never be able to catch up. Thus, we print NO.

In order for the two kangaroos to land at the same location after i amount of time, the following must be true: x_1 + i \times v_1 == x_2 + i \times v_2. In other words, x_2 - x_1 == (v_1 - v_2)\times i. Thus, if (x_2 - x_1) % (v_1 - v_2) == 0 we return YES otherwise we return NO.

The full code is listed below.

Full code

public class Kangaroo {
    // condition to meet:  x1 + i*v1 == x2 + i*v2  ==> x2 - x1 == (v1 - v2)*i ==> return YES if (x2 -x1) % (v1 - v2) == 0
    public static void solve(int x1, int v1, int x2, int v2) {
        if (v2 >= v1) {
        } else {
            if ((x2 - x1) % (v1 - v2) == 0) {
            } else {

    public static void main(String[] args) throws FileNotFoundException {
        System.setIn(new FileInputStream(System.getProperty("user.home") + "/" + "in.txt"));
        Scanner in = new Scanner(System.in);

        int x1 = in.nextInt();
        int v1 = in.nextInt();
        int x2 = in.nextInt();
        int v2 = in.nextInt();

        solve(x1, v1, x2, v2);