Let's say I've got a list (or array) of:
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
I want to get the third Cartesian power of the above list, where we take every possible triple of elements from l
.
Then I want to filter and only keep the sublists where the sum of that sublist equal to the maximum value of the list.
Then I only want one sublist, which is the sublist where the difference of the three numbers that add up to the maximum value is the smallest.
The algorithm to see the smallest difference could be something like (in Python):
max(v1,v2,v3) - min(v1,v2,v3)
So the expected output for this case would be:
(3, 3, 4)
The order of the elements within the output could be in any order.
Test cases:
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
-> (3, 3, 4)
l = [1, 2, 3, 4, 5]
-> (1, 2, 2)
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
-> (33, 33, 34)
l = [1, 4, 5, 2, 3, 9, 8, 7, 10, 6]
-> (3, 3, 4)
l = [1, 4, 8, 12, 13, 16, 20, 24, 27]
-> (1, 13, 13)
This is tagged with code-golf, so the shortest code in bytes wins!
There will always be an output, never would be a case where no 3 elements would add up to the maximum value.
[1, 3, 6, 7, 13]
->(3, 3, 7)
\$\endgroup\$