Parallel Projection (Codeforces 1782A)
Tags: Greedy, 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):
import sys
answers = []
int_tests = int(sys.stdin.readline())
for int_test in range(int_tests):
    (w, d, h) = map(lambda x: int(x), sys.stdin.readline().split())
    (a1, b1, a2, b2) = map(lambda x: int(x), sys.stdin.readline().split())
    len1 = min(a1 + a2, w + w - a1 - a2) + abs(b1 - b2)
    len2 = min(b1 + b2, d + d - b1 - b2) + abs(a1 - a2)
    answer = min(len1, len2) + h
    answers.append(answer)
sys.stdout.write('\n'.join(map(str, answers)))

Solution (Python):
import sys, math, cmath, time
from bisect import bisect_left
start_time = time.time()

def solve():
    (w, d, h) = map(int, input().split())
    (x1, y1, x2, y2) = map(int, input().split())
    print(min(abs(x1 - x2) + abs(y1 + y2) + h, abs(y1 - y2) + abs(x1 + x2) + h, abs(w - x1) + h + w - x2 + abs(y1 - y2), abs(d - y1) + d - y2 + h + abs(x1 - x2)))

def main():
    testcases = 1
    testcases = inp()
    for each_testcase in range(testcases):
        solve()

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

def inps():
    return input().split()
ONLINE_JUDGE = __debug__
if ONLINE_JUDGE:
    input = sys.stdin.readline
main()

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

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

def readInt():
    return int(input())

def readInts():
    return map(int, input().split())

def readStr():
    return input().strip()

def solve():
    (w, d, h) = readInts()
    (a, b, f, g) = readInts()
    v = [d - g, g, w - f, f]
    p = [(f, d), (f, 0), (w, g), (0, g)]
    ans = float('inf')
    for i in range(4):
        ans = min(ans, v[i] + abs(p[i][0] - a) + abs(p[i][1] - b))
    return ans + h
for _ in range(int(input())):
    print(solve())