| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 | 
"""Calculate percentage level of index for regionsinside the Verenigde Nederlanden."""import sysimport mathimport refrom datetime import timedelta, datetimeimport dateutil.parser# ConfigPLAYER = FalseDATE = TrueTOTAL = Falsedef calculate_buildings(filename='department.txt'):    """Count working in departments"""    total = 0    players = {}    days = {}    with open(filename, 'r') as file:        for line in file:            try:                date_str = re.search(r'\s(\d\d).*', line).group(0)                date_str = re.sub(r'\s(\d\d|\d\d\d)\s', '', date_str)                date = dateutil.parser.parse(date_str)                if date.hour >= 20:                    date += timedelta(days=1)                line = re.sub(r'\s\d\d.*', '', line)                line = re.sub(r'\[.*\]', '', line)                line = line.strip()                count = re.search(r'\+\d+', line).group(0)                count = count.replace('+', '')                count = int(count)                total += count                if PLAYER:                    player = re.sub(r'\s\(.*', '', line)                    if player in players:                        players[player] += count                    else:                        players[player] = count                if DATE or TOTAL:                    date_format = date.strftime("%Y-%m-%d")                    if date_format in days:                        days[date_format] += count                    else:                        days[date_format] = count            except Exception as exception:                print('%s %s' % (line, exception))    last_date = datetime.now()    for date in sorted(days, reverse=True):        date = dateutil.parser.parse(date)        difference = last_date - date        if difference.days > 1:            for i in range(1, difference.days):                new_date = date + timedelta(days=i)                new_date_formatted = new_date.strftime("%Y-%m-%d")                days[new_date_formatted] = 0        last_date = date    if PLAYER:        print_players(players)    if DATE:        print_days(days)    if TOTAL:        print_total(days)def print_players(players):    """Print players and reward"""    total_reward = 0    print('punten,beloning,naam')    for player in sorted(players, key=players.get, reverse=True):        worked_times = math.floor(players[player] / 10)        reward = worked_times * 2000000000        if worked_times >= 6:            reward += 10000000000        total_reward += reward        print('%3s,$ %5s,%s' % (players[player], bucks(reward), player))    print(total_reward)def print_days(days):    """Print date and points"""    for date in sorted(days, reverse=True):        print('%s,%3s' % (date, days[date]))def print_total(days):    """Print total points in department"""    total = 0    for date in sorted(days):        total += days[date]        last_day = dateutil.parser.parse(date) - timedelta(weeks=2)        last_day_format = last_day.strftime("%Y-%m-%d")        if last_day_format in days:            total -= days[last_day_format]        print('%s,%3s' % (date, total))def bucks(money):    """Format money"""    str_format = '{:,}'.format(money)    new_str = ''    for i in range(len(str_format), 0, -4):        if str_format[i-4:i] == ',000':            new_str = 'k' + new_str        else:            new_str = str_format[:i] + new_str            break    new_str = new_str.replace('kkkk', 't')    new_str = new_str.replace(',', '.')    return new_strif __name__ == '__main__':    if len(sys.argv) < 2:        calculate_buildings()    else:        calculate_buildings(sys.argv[1])
 |