1. Ищем правый край массива m, двигаясь слева направо.
2. Стираем правую метку массива m.
3. Ищем правый край массива n, двигаясь слева направо.
4. Стираем левую метку массива n.
5. Проверяем, мы стерли последнюю метку в массиве n (в этом случае следующая справа ячейка должна быть пустой)?
6. Если стерли последнюю метку, то конец алгоритма.
7. Иначе ищем правый конец массива m, двигаясь справа налево.
8. Переход на шаг 2.
1. –> 2 (команды 1–3: ищем левую метку массива m)
2. ? 3; 1
3. <– 4
4. X 5 (стираем левую метку массива m)
5. ? 6; 7
6. –> 5
7. X 8 (стираем левую метку массива n)
8. –> 9
9. ? 12; 10 (стерли последнюю метку в массиве n?)
10. <– 11 (ищем левый край массива m)
11. ? 10; 4
12. !
Полные обороты не влияют на положение финиша, так что их можно вычесть из дистанции. Периметр прямоугольника равен P = 2(A + B), так что после выкидывания полных оборотов дистанция будет равна L mod P, где mod - операция взятия остатка. После этого L < P; если L < A, то финиш будет снизу, если A < L < A + B - справа, если A + B < L < 2A + B - сверху, а иначе слева.
Код (python 3):
A = int(input())
B = int(input())
L = int(input())
P = 2 * (A + B)
L = L % P
if L < A:
print("BOTTOM")
elif L < A + B:
print("RIGHT")
elif L < 2 * A + B:
print("TOP")
else:
print("LEFT")