#!/usr/bin/env python import sys import os import time import base now_sec = lambda : time.time() sample = '2020-01-23_12.34.56' len_digit = lambda s: len( base.filter_str( lambda c: c.isdigit(), s ) ) def is_format_delim(delim): if len( delim ) <= 1: return False n = len_digit( delim ) smp_n = len_digit( sample ) return n == smp_n or n == smp_n - 2 def sec_to_str(sec, delim=''): if is_format_delim( delim ): s = sec_to_str( sec ) # 202001223123456 if len_digit( delim ) < len( s ): s = s[ 2: ] lst = list( s ) # [ '2', '0', ... ] f = lambda c: lst.pop( 0 ) if c.isdigit() else c return base.to_str( map( f, delim ), delim='' ) t = time.localtime(sec) def v_to_s(v): s = str(v) w = 4 if len(s) > 2 else 2 return ('0' * w + s)[-w:] return delim.join( map( v_to_s, t[:6] ) ) def str_to_sec(s): s = ''.join( map( lambda c: c if c.isdigit() else '-', s ) ) lst = [] if '-' in s: lst = list( map( int, s.split('-') ) ) else: div = lambda s, n: ( s[:n], s[n:] ) if len(s) > 2 * 6: (t, s) = div(s, 4) lst.append( int(t) ) while s: (t, s) = div(s, 2) lst.append( int(t) ) while len(lst) < 9: lst.append(0) y = lst[0] if y < 100: lst[0] += 2000 if y < 50 else 1900 return time.mktime( time.struct_time(lst) ) def is_date_time_str(s, delim=''): if not is_format_delim( delim ): delim = sec_to_str( 0, delim ) if len( s ) == len( delim ) - 2: delim = delim[ 2: ] if len( s ) != len( delim ): return False def f(st): (s, t) = st return s.isdigit() if t.isdigit() else s == t return all( map( f, zip( s, delim ) ) ) def sec_to_fn(pre, sec, ext=''): name = pre + sec_to_str(sec) return name + ( '.' + ext if ext else '' ) def fn_to_sec(fn): (name, ext) = os.path.splitext(fn) tail_num = lambda s: tail_num( s[:-1] ) + s[-1] if s and s[-1].isdigit() else '' return str_to_sec( tail_num(name) ) mon3_lst = [ 'dmy', 'JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC' ] def get_mon3(str_or_int): v = str_or_int if type( v ) != int: v = int( v ) return mon3_lst[ v ] def date432(): s = sec_to_str( now_sec(), delim='0000 00 00 000000' ) lst = s.split()[ : 3 ] lst[ 1 ] = get_mon3( lst[ 1 ] ) return '/'.join( lst ) def tm60_to_int(tm60): if tm60 < 0: return -tm60_to_int( -tm60 ) (H, L) = ( tm60 // 100, tm60 % 100 ) (H, L) = ( H + L // 60, L % 60 ) if H > 0: H = tm60_to_int( H ) * 60 return H + L def int_to_tm60(v): if v < 0: return -int_to_tm60( -v ) (H, L) = ( v // 60, v % 60 ) if H >= 60: H = int_to_tm60( H ) return H * 100 + L def tm60_to_str(tm60): if tm60 < 0: return "-" + tm60_to_str( -tm60 ) f = lambda s: ':'.join( ( f( s[ : -2 ] ), s[ -2 : ] ) ) if len( s ) > 2 else s return f( str( tm60 ) ) def str_to_tm60(s): if s.startswith( '-' ): return -str_to_tm60( s[ 1 : ] ) sum = 0 for s in s.split( ':' ): sum = sum * 100 + int( s ) return sum tm60_str_to_int = lambda s: tm60_to_int( str_to_tm60( s ) ) tm60_int_to_str = lambda v: tm60_to_str( int_to_tm60( v ) ) def is_tm60_str(s): if s.startswith( '-' ): s = s[ 1 : ] s = s.replace( ':', '' ) return s.isdigit() def tm60_show_sum(tm60_str_lst): lst = list( map( tm60_str_to_int, tm60_str_lst ) ) n = len( lst ) dif_lst = list( map( lambda i: lst[ i + 1 ] - lst[ i ], range( n - 1 ) ) ) (a, b) = ( [], [] ) for i in range( n - 1 ): t = a if i % 2 == 0 else b t.append( dif_lst[ i ] ) sum_a = sum( a ) sum_b = sum( b ) sum_ab = sum_a + sum_b f = lambda lst: list( map( tm60_int_to_str, lst ) ) lst = f( lst ) dif_lst = f( dif_lst ) ( sum_a, sum_b, sum_ab ) = f( ( sum_a, sum_b, sum_ab ) ) for i in range( n ): print( lst[ i ] ) if i < n - 1: print( '\t' * ( i % 2 + 1 ) + dif_lst[ i ] ) print( '-' * 16 ) print( '\t' + sum_a ) print( '\t\t' + sum_b ) print( sum_ab ) if __name__ == "__main__": s = sys.stdin.read() s = s.replace( '-', ' ' ) lst = s.split() lst = list( filter( is_tm60_str, lst ) ) tm60_show_sum( lst ) # EOF