Here is my solution (in groovy) that gives you direction and distance (moving counterclockwise if the output is negative):
def move(def start, def target, def length){ def clockwise def counterclockwise if (start > target){ clockwise = length - start + target counterclockwise = start - target } else { clockwise = target - start counterclockwise = length - target + start } if (counterclockwise < clockwise){ return counterclockwise * -1 } return clockwise }
And this is the result:
groovy:000> move(0,0,0) ===> 0 groovy:000> move(0,0,4) ===> 0 groovy:000> move(0,1,4) ===> 1 groovy:000> move(0,2,4) ===> 2 groovy:000> move(0,3,4) ===> -1 groovy:000> move(1,0,4) ===> -1 groovy:000> move(1,1,4) ===> 0 groovy:000> move(1,2,4) ===> 1 groovy:000> move(1,3,4) ===> 2 groovy:000> move(2,0,4) ===> 2 groovy:000> move(2,1,4) ===> -1 groovy:000> move(2,2,4) ===> 0 groovy:000> move(2,3,4) ===> 1 groovy:000> move(3,0,4) ===> 1 groovy:000> move(3,1,4) ===> 2 groovy:000> move(3,2,4) ===> -1 groovy:000> move(3,3,4) ===> 0
Faber
source share