Stock Time Machine
Python 2, 46 bytes
f=lambda x:-min(x.pop(0)-max(x),x[1:]and-f(x))
Test it on Ideone.
How it works
This is a recursive approach that takes advantage of Python 2's beautifully perverse mixed-type comparisons.
The best possible outcome is either the difference of the maximum of the list with its first element removed and that first element, or another difference that does not involve the first element.
After extracting the first element with x.pop(0)
(which permanently removes it from x), we compute x.pop(0)-max(x)
. Note that this difference has the "wrong" sign.
If the updated list x still contains at least two elements, x[1:]
yields a non-empty list, and and
replaces it with the negative of a recursive call, computed as -f(x)
. Once there are too few elements to continue, x[1:]and-f(x)
evaluates to an empty list.
To select the maximal outcome, we take the minimum of the difference and the negative of the recursive call (or []
). Since all integers are strictly less than []
, min
will simply return its left argument if the right one is []
.
Finally, the unary minus -
corrects the sign of the computed outcome.
05AB1E, 4 bytes
Using FryAmTheEggman's approach. Code:
¥ŒOà
Explanation:
¥ # Calculate the increments of the array.
Œ # Get all substring of the array.
O # Sum the arrays in the array.
à # Get the largest sum and implicitly print that.
Uses the CP-1252 encoding. Try it online!.
MATL, 7 bytes
2XN!dX>
Try it online! Or verify all test cases.
2XN % Take input implicitly. Two-column 2D array with all combinations of 2 elements.
% Each combination is a row. Elements in each row are in increasing order
! % Transpose
d % Difference of the two numbers in each column
X> % Maximum value. Display implicitly