We are given a set of walking instructions. Each instruction asks to make either left or right turn then walk a number of blocks. Our task is to figure out the final destination.
Let's say we start at (0, 0) and are given the following instructions: L1, R1, L2, R1, R2. We will first go left 1 to (-1, 0), then right one to (-1, 1), then left two to (-3, 1), then right 1 to (-3, 2) and finally right two to (-1, 2).
We can keep track of orientation using complex numbers. If we multiply a complex number by 'i' we get a rotation of 90 degrees in the counter-clockwise direction (i.e., turn left). Similarly, multiplying by '-i' we get a rotation of 90 degrees in the clockwise direction (i.e., turn right).
A quick implementation follows.
#!/usr/bin/env python def complex_walk(path): splitStr = [x.strip() for x in path.split(",")] #Convert the steps into form [R, 1]... i = complex(0, 1) dirs = [[(i if x is "L" else -i), int(x[1:])] for x in splitStr] #Destination: start from the origin dest = complex(0, 0) #Multiply direction ('i' or '-i') to previous_position + translation for dir in reversed(dirs): dest = dir*(dir*i + dest) #print the final position print path, "from (0, 0) = ", (int(dest.real), int(dest.imag)) complex_walk("L1, L2, R2") ## should be (-3, -2) complex_walk("L1, R1, L2, R1, R2") ## should be (-1, 2)