I was doing the google foobar challenge but ran out of time on the following challenge i am trying to see what i did wrong.
Challenge
As
a passed solution:
from fractions import Fraction
def solution(p):
    n = len(p)
    if n >= 2:
        r0_n = -2 * (p[n - 1] + reduce(
            lambda a, b: a + b, [0] + [(-1)**i * 2 * p[i]
                                       for i in range(n - 2, 0, -1)]) + (-1)**(n-1)*p[0])
        r0_d = 1 + ((n+1) % 2)*2
        if r0_n < r0_d:
            return [-1, -1]
        r = ['NAN'] * n
        r[0] = float(r0_n) / float(r0_d)
        for i in range(1, n):
            r[i] = p[i] - p[i - 1] - r[i - 1]
            if r[i] < 1:
                return [-1, -1]
        r0 = Fraction(r0_n, r0_d)
        r0.limit_denominator()
        
        return [r0.numerator, r0.denominator]
    return [-1, -1]
some tests:
if __name__ == '__main__':
    print solution([4, 30, 50]), [12, 1]
    print solution([4, 17, 50]), [-1, -1]
    print solution([1, 51]), [100, 3]
    print solution([1, 31]), [20, 1]
    print solution([1, 31, 51, 71]), [20, 1]
    print solution([1, 31, 51, 71, 91]), [20, 1]
    print solution([4, 9, 17, 31, 40]), [4, 1] 
output:
[12, 1] [12, 1]
[-1, -1] [-1, -1]
[100, 3] [100, 3]
[20, 1] [20, 1]
[20, 1] [20, 1]
[20, 1] [20, 1]
[4, 1] [4, 1]
some thinking
#    equaltion         | i
# ---------------------|---
# / r0 + r1 == p1 - p0  [0]
# | r1 + r2 == p2 - p1  [1]
# | r2 + r3 == p3 - p2  [2]
# | r3 + r4 == p4 - p3  [3]
# | r4 + r5 == p5 - p4  [4]
# \      r5 == r0/2     [5]
#
#
# / r0 + r1 + 0  + 0  + 0  + 0    = p1 - p0
# | 0  + r1 + r2 + 0  + 0  + 0    = p2 - p1
# | 0  + 0  + r2 + r3 + 0  + 0    = p3 - p2
# | 0  + 0  + 0  + r3 + r4 + 0    = p4 - p3
# | 0  + 0  + 0  + 0  + r4 + r5   = p4 - p4
# \ r0 + 0  + 0  + 0  + 0  - 2*r5 = 0
#
# / 1 1 0 0 0  0 \   / r0 \   / p1 - p0 \
# | 0 1 1 0 0  0 |   | r1 |   | p2 - p1 |
# | 0 0 1 1 0  0 |   | r2 |   | p3 - p2 |
# | 0 0 0 1 1  0 | * | r3 | = | p4 - p3 |
# | 0 0 0 0 1  1 |   | r4 |   | p5 - p4 |
# \ 1 0 0 0 0 -2 /   \ r5 /   \    0    /