Select Three Sticks (Codeforces 1734A)
Tags: Greedy, sortings

You are given $$$n$$$ sticks with positive integral length $$$a_1, a_2, \ldots, a_n$$$.You can perform the following operation any number of times (possibly zero):   choose one stick, then either increase or decrease its length by $$$1$$$. After each operation, all sticks should have positive lengths. What is the minimum number of operations that you have to perform such that it is possible to select three of the $$$n$$$ sticks and use them without breaking to form an equilateral triangle?An equilateral triangle is a triangle where all of its three sides have the same length.

Input: The first line of the input contains a single integer $$$t$$$ ($$$1 \le t \le 100$$$) — the number of test cases. The description of the test cases follows.The first line of each test case contains a single integer $$$n$$$ ($$$3 \le n \le 300$$$) — the number of sticks.The second line of each test case contains $$$n$$$ integers $$$a_1, a_2, \ldots, a_n$$$ ($$$1 \le a_i \le 10^9$$$) — the lengths of the sticks.It is guaranteed that the sum of $$$n$$$ over all test cases does not exceed $$$300$$$. 

Output: For each test case, print one integer on a single line — the minimum number of operations to be made.

Note: In the first test case, you can increase the length of the first stick by $$$1$$$, then decrease the length of the third stick by $$$1$$$. In total, you perform $$$2$$$ operations, such that the three sticks form an equilateral triangle of side length $$$2$$$.In the fourth test case, you can decrease the length of the seventh stick by $$$1$$$. An equilateral triangle of side length $$$1$$$ can be selected and formed by the second, fourth, and seventh sticks.

Sample Inputs:
4
3
1 2 3
4
7 3 7 3
5
3 4 2 1 1
8
3 1 4 1 5 9 2 6

Sample Outputs:
2
4
1
1

Solution (Python):
for _ in range(int(input())):
    n = int(input())
    a = [int(i) for i in input().split()]
    a.sort()
    f = 0
    ans = 1000000000.0
    for i in range(1, n - 1):
        cur = a[i]
        prev = a[i - 1]
        nextt = a[i + 1]
        ans = min(ans, cur - prev + (nextt - cur))
    print(ans)

Solution (Python):
def solve(arr, n):
    arr.sort()
    cnt = 4000000000
    for i in range(2, n):
        cnt = min(cnt, arr[i] - arr[i - 1] + arr[i - 1] - arr[i - 2])
    return cnt

def main():
    ans = []
    t = int(input())
    for _ in range(t):
        n = int(input())
        arr = list(map(int, input().split()))
        ans.append(solve(arr, n))
    for i in ans:
        print(i)
if __name__ == '__main__':
    main()

Solution (Python):
for x in [*open(0)][2::2]:
    k = sorted(map(int, x.split()))
    print(min((b - a for (a, b) in zip(k, k[2:]))))