superpollo, 15.06.2010 13:49:
goal (from e.c.m.): evaluate
1^2+2^2+3^2-4^2-5^2+6^2+7^2+8^2-9^2-10^2+...-2010^2, where each three
consecutive + must be followed by two - (^ meaning ** in this context)

my solution:

 >>> s = 0
 >>> for i in range(1, 2011):
... s += i**2
... if not (i+1)%5:
... s -= 2*i**2
... if not i%5:
... s -= 2*i**2

Pretty ugly, if you ask me. What about this:

    s = 0
    for i in range(1, 2011):
        if i%5 in (1,2,3):
            s += i**2
        else:
            s -= i**2

Here's the obvious one-liner:

    s = sum(i**2 if i%5 in (1,2,3) else -i**2
            for i in range(1, 2011))

Runs in ~600 usecs for me according to timeit - pretty fast.

Stefan

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to