I gotta have my orange juice.

Jesu, Juva

Python Timestamp Increment

I composed this concise solution to ncm‘s “coding challenge” in November 2004. I’m not entirely satisfied with its elegance, but I’m pleased with its brevity.

```def dateinc(s) :
def carry(list, modulus) :
if len(list) == 1 : return [list[0] // modulus[0], list[0] % modulus[0]]
else              : q = carry(list[1:], modulus[1:]); return [(list[0] + q[0]) // modulus[0], (list[0] + q[0]) % modulus[0]] + q[1:]
s = reduce(lambda x,y:x+y, map(lambda x : (x >= '0' and x <= '9') * x, s))
result = map(lambda x,y:x+y, map(int,(s[0:4],s[4:6],s[6:8],s[8:10],s[10:12],s[12:14])),(0,-1,-1,0,0,1))
modulus = [10000,12,[31,28,31,30,31,30,31,31,30,31,30,31][result[1]],24,60,60]
if result[0] % 4 == 0 and (result[0] % 100 != 0 or result[0] % 400 == 0) :
modulus[2] += 1                               # Account for leap day.
result = carry(result, modulus)[1:]             # Carry the extra second.
result[1:3] = map(lambda x:x+1, result[1:3])    # Readjust to 1-base.
return reduce(lambda x,y:x+y, map(lambda x : (x < 10) * '0' + str(x), result))
```

I further reduced this as follows, turning the carry function into a one-liner that computes the carry in-place (and also using builtins wherever possible). I’m much more satisfied with this solution.

```def dateinc(s) :
s = reduce(lambda x,y:x.isdigit()*x+y.isdigit()*y, s)
mod = [10000,12,[31,28,31,30,31,30,31,31,30,31,30,31][ans[1]],24,60,60]
if ans[0] % 4 == 0 and (ans[0] % 100 != 0 or ans[0] % 400 == 0) : mod[2] += 1
ans = map(lambda x:(ans[x] + reduce(int.__mul__, map(lambda y:ans[y]>=mod[y]-1,range(x+1,len(ans))),x!=len(ans)-1)) % mod[x], range(len(ans)))