aboutsummaryrefslogtreecommitdiff
path: root/challenge-103/abigail/python/ch-2.py
blob: 56f708220f30d6716bed61e99ae38596932374d7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/opt/local/bin/python

#
# See ../README.md
#

#
# Run as python ch-2.py < input-file
#

#
# We're reading a start time, the current time, and a file name
# from STDIN, separated by white space. The file contains the
# tracks played.
#

import fileinput

for line in fileinput . input ():
    start_time, current_time, file_name = line . split ()

    #
    # You need a 64 bit integer for this; 32 bits of holds
    # a five week vacation in milliseconds, but the author 
    # of the puzzle lives somewhere were people take 14 week
    # holidays...
    #
    time_diff = (int (current_time) - int (start_time)) * 1000

    #
    # Parse the media file; store the track into an array tracks.
    #
    tracks = []
    total_time = 0
    for track in open (file_name, "r"):
        play_time, title = track . strip () . split (",", 2)
        play_time = int (play_time)
        tracks . append ([play_time, title])
        total_time = total_time + play_time

    #
    # We're not interested in playing full loops.
    #
    time_diff = time_diff % total_time

    #
    # Find the current track playing. If $time_diff is less than the
    # play time of the track, this is the track currently playing. If
    # so, print the track name (with quotes, as given in the example --
    # although they don't belong there, as they're from the CSV encoding;
    # for that reason, we won't deescape anything else either). Otherwise
    # (track length is shorter than $time_diff), we subtrack the length
    # of the track from $time_diff, and continue checking the next track.
    #
    for track in tracks:
        if time_diff - track [0] < 0:
            time_diff = int  (time_diff / 1000)
            hours     = int  (time_diff / 3600)
            minutes   = int ((time_diff % 3600) / 60)
            seconds   =       time_diff         % 60

            if hours > 0:
                format_str = "{0}\n{1:02d}:{2:02d}:{3:02d}"
            else:
                format_str = "{0}\n{2:02d}:{3:02d}"

            print (format_str . format (track [1], hours, minutes, seconds))
            break
        else:
            time_diff = time_diff - track [0]