Parallel Projection (Codeforces 1781A)
Tags: Math, geometry

Vika's house has a room in a shape of a rectangular parallelepiped (also known as a rectangular cuboid). Its floor is a rectangle of size $$$w \times d$$$, and the ceiling is right above at the constant height of $$$h$$$. Let's introduce a coordinate system on the floor so that its corners are at points $$$(0, 0)$$$, $$$(w, 0)$$$, $$$(w, d)$$$, and $$$(0, d)$$$.A laptop is standing on the floor at point $$$(a, b)$$$. A projector is hanging on the ceiling right above point $$$(f, g)$$$. Vika wants to connect the laptop and the projector with a cable in such a way that the cable always goes along the walls, ceiling, or floor (i. e. does not go inside the cuboid). Additionally, the cable should always run parallel to one of the cuboid's edges (i. e. it can not go diagonally).What is the minimum length of a cable that can connect the laptop to the projector?  Illustration for the first test case. One of the optimal ways to put the cable is shown in green. 

Input: Each test contains multiple test cases. The first line contains the number of test cases $$$t$$$ ($$$1 \le t \le 10^4$$$). The description of the test cases follows.The first line of each test case contains three integers $$$w$$$, $$$d$$$, and $$$h$$$ ($$$2 \le w, d, h \le 1000$$$) — the size of the room.The second line contains four integers $$$a$$$, $$$b$$$, $$$f$$$, $$$g$$$ ($$$0 < a, f < w$$$; $$$0 < b, g < d$$$): the laptop is located on the floor at point $$$(a, b)$$$, while the projector is hanging on the ceiling right above point $$$(f, g)$$$.

Output: For each test case, print a single integer — the minimum length of the cable connecting the laptop and the projector that runs only along the walls, floor, and ceiling parallel to cuboid's edges.

Note: The picture in the statement illustrates the first test case.

Sample Inputs:
5
55 20 29
23 10 18 3
20 10 5
1 5 2 5
15 15 4
7 13 10 10
2 1000 2
1 1 1 999
10 4 10
7 1 2 1

Sample Outputs:
47
8
14
1002
17

Solution (Python):
t = int(input())
ans = []
for _ in range(t):
    (w, d, h) = map(int, input().split())
    (a, b, f, g) = map(int, input().split())
    down = min(b, g)
    up = d - max(b, g)
    left = min(a, f)
    right = w - max(a, f)
    ans.append(2 * min(down, up, left, right) + abs(a - f) + abs(b - g) + h)
for an in ans:
    print(an)

Solution (Python):
def solve(w, d, h, a, b, f, g):
    res = abs(a - f) + b + g
    res = min(res, abs(a - f) + 2 * d - b - g)
    res = min(res, abs(b - g) + a + f)
    res = min(res, abs(b - g) + 2 * w - a - f)
    return res + h
t = int(input())
ans = []
for ti in range(t):
    (w, d, h) = [int(x) for x in input().split()]
    (a, b, f, g) = [int(x) for x in input().split()]
    ans.append(solve(w, d, h, a, b, f, g))
for a in ans:
    print(a)

Solution (Python):
import sys
input = sys.stdin.readline

def inp():
    return int(input())

def inlt():
    return list(map(int, input().split()))

def get_direction(dimensions, coord):
    numbers = [coord[0] + coord[2] + abs(coord[1] - coord[3])]
    numbers.append(coord[1] + coord[3] + abs(coord[0] - coord[2]))
    numbers.append(dimensions[0] - coord[0] + dimensions[0] - coord[2] + abs(coord[1] - coord[3]))
    numbers.append(dimensions[1] - coord[1] + dimensions[1] - coord[3] + abs(coord[0] - coord[2]))
    return min(numbers)
num_test_cases = inp()
for case in range(num_test_cases):
    dimensions = inlt()
    coord = inlt()
    sum = dimensions[2]
    sum += get_direction(dimensions, coord)
    print(sum)