Given starting and ending position and a number N. Given that we are allowed to move in only four directions as shown in the image below. The directions of moves are U(), R, D and L. We need to write a program to determine if starting from the given starting position we can reach the given end position in exactly N moves in moving about any direction(Clockwise or Anticlockwise).
Input: start = U , end = L , N = 3 Output: Clockwise Explanation: Step 1: move clockwise to reach R Step 2: move clockwise to reach D Step 3: move clockwise to reach L So we reach from U to L in 3 steps moving in clockwise direction. Input: start = R , end = L , N = 3 Output: Not possible Explanation: It is not possible to start from R and end at L in 3 steps moving about in any direction. Input: start = D , end = R , N = 7 Output: Clockwise Explanation: Starting at D, we complete one complete clockwise round in 4 steps to reach D again, then it takes 3 step to reach R
The idea to solve this problem is to observe that we can complete one round in 4 steps by traveling in any direction (clockwise or anti-clockwise), so taking n%4 steps is equivalent to taking n steps from the starting point. Therefore n is reduced to n%4. Consider the values of ‘U’ as 0, ‘R’ as 1, ‘D’ as 2 and ‘L’ as 3. If the abs(value(a)-value(b)) is 2 and n is also 2, then we can move either in clockwise or anticlockwise direction to reach the end position from the start position. If moving k steps in clockwise direction take us to the end position from start position then we can say that the condition for clockwise move will be (value(a)+k)%4==value(b). Similarly, the condition for anticlockwise move will be (value(a)+k*3)%4==value(b) since taking k step from position a in clockwise direction is equivalent to taking (a + k*3)%4 steps in anticlockwise direction.
Below is the implementation of the above approach:
- Probability of reaching a point with 2 or 3 steps at a time
- Check if it is possible to reach (x, y) from origin in exactly Z steps using only plus movements
- Check if a destination is reachable from source with two movements allowed | Set 2
- Rotation of a point about another point in C++
- Reflection of a point at 180 degree rotation of another point
- Number of steps required to reach point (x,y) from (0,0) using zig-zag way
- Minimum distance from a point to the line segment using Vectors
- Check whether a given point lies inside a triangle or not
- How to check if a given point lies inside or outside a polygon?
- Smallest number to multiply to convert floating point to natural
- Fast method to calculate inverse square root of a floating point number in IEEE 754 format
- Find if a point lies inside a Circle
- Find the Missing Point of Parallelogram
- Minimum steps to come back to starting point in a circular tour
- Reflection of a point about a line in C++
- First collision point of two series
- Program to find GCD of floating point numbers
- Finding the best fit rectangle that covers a given point
- Section formula (Point that divides a line in given ratio)
- Check whether given floating point number is even or odd