~mgedmin/gtimelog/ehabkost-integration

« back to all changes in this revision

Viewing changes to scripts/workdays.py

  • Committer: mg
  • Date: 2008-04-22 16:43:53 UTC
  • Revision ID: svn-v4:097e82c0-97e3-0310-a93d-98bb3a55b02b::90
Restructure the source tree: move everything essential into src/ and everything
obsolete into scripts/.  Make 'python setup.py test' run the test-suite.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/python
 
2
"""
 
3
Given a constraint to do at least 7 hours of work per day, how many actual
 
4
days of work you did in a given week?
 
5
"""
 
6
 
 
7
import fileinput
 
8
import re
 
9
 
 
10
time_rx = re.compile(r'(\d+) hours?,? (\d+) min$'
 
11
                     r'|(\d+) hours?$'
 
12
                     r'|(\d+) min$')
 
13
 
 
14
def parse_time(s):
 
15
    m = time_rx.match(s)
 
16
    if not m:
 
17
        return None
 
18
    h1, m1, h2, m2 = m.groups()
 
19
    return int(h1 or h2 or '0') * 60 + int(m1 or m2 or '0')
 
20
 
 
21
 
 
22
def format_time(t):
 
23
    h, m = divmod(t, 60)
 
24
    if h and m:
 
25
        return '%d hour%s, %d min' % (h, h != 1 and "s" or "", m)
 
26
    elif h:
 
27
        return '%d hour%s' % (h, h != 1 and "s" or "")
 
28
    else:
 
29
        return '%d min' % m
 
30
 
 
31
 
 
32
def main():
 
33
    for line in fileinput.input():
 
34
        if line.startswith('Total work done this week:'):
 
35
            work_in_minutes = parse_time(line.split(':', 1)[1].strip())
 
36
            assert work_in_minutes is not None
 
37
            print line,
 
38
            break
 
39
    else:
 
40
        return
 
41
 
 
42
    work_days = 5.0
 
43
    days_off = 0
 
44
    while True:
 
45
        avg_day_len = work_in_minutes / work_days
 
46
        if avg_day_len >= 6 * 60 + 50:
 
47
            break
 
48
        days_off += 0.5
 
49
        work_days -= 0.5
 
50
    def fmt(f):
 
51
        return ("%.1f" % f).replace(".0", "")
 
52
    print "  Days off: %s" % fmt(days_off)
 
53
    print "  Work days: %s" % fmt(work_days)
 
54
    print "  Average day length: %s" % format_time(avg_day_len)
 
55
 
 
56
 
 
57
if __name__ == '__main__':
 
58
    main()