diff options
Diffstat (limited to 'challenge-103/paulo-custodio/python/ch-2.py')
| -rw-r--r-- | challenge-103/paulo-custodio/python/ch-2.py | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/challenge-103/paulo-custodio/python/ch-2.py b/challenge-103/paulo-custodio/python/ch-2.py new file mode 100644 index 0000000000..c03a008efd --- /dev/null +++ b/challenge-103/paulo-custodio/python/ch-2.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python + +# Challenge 103 +# +# TASK #2 > What's playing? +# Submitted by: Albert Croft +# Working from home, you decided that on occasion you wanted some background +# noise while working. You threw together a network streamer to continuously +# loop through the files and launched it in a tmux (or screen) session, giving +# it a directory tree of files to play. During the day, you connected an audio +# player to the stream, listening through the workday, closing it when done. +# +# For weeks you connect to the stream daily, slowly noticing a gradual drift of +# the media. After several weeks, you take vacation. When you return, you are +# pleasantly surprised to find the streamer still running. Before connecting, +# however, if you consider the puzzle of determining which track is playing. +# +# After looking at a few modules to read info regarding the media, a quick bit +# of coding gave you a file list. The file list is in a simple CSV format, each +# line containing two fields: the first the number of milliseconds in length, +# the latter the media's title (this example is of several episodes available +# from the MercuryTheatre.info): +# +# 1709363,"Les Miserables Episode 1: The Bishop (broadcast date: 1937-07-23)" +# 1723781,"Les Miserables Episode 2: Javert (broadcast date: 1937-07-30)" +# 1723781,"Les Miserables Episode 3: The Trial (broadcast date: 1937-08-06)" +# 1678356,"Les Miserables Episode 4: Cosette (broadcast date: 1937-08-13)" +# 1646043,"Les Miserables Episode 5: The Grave (broadcast date: 1937-08-20)" +# 1714640,"Les Miserables Episode 6: The Barricade (broadcast date: 1937-08-27)" +# 1714640,"Les Miserables Episode 7: Conclusion (broadcast date: 1937-09-03)" +# For this script, you can assume to be provided the following information: +# +# * the value of $^T ($BASETIME) of the streamer script, +# * the value of time(), and +# * a CSV file containing the media to play consisting of the length in +# milliseconds and an identifier for the media (title, filename, or other). +# Write a program to output which file is currently playing. For purposes of +# this script, you may assume gapless playback, and format the output as you +# see fit. +# +# Optional: Also display the current position in the media as a time-like value. +# +# Example: +# +# Input: 3 command line parameters: start time, current time, file name +# +# # Streamer start time: Tue Nov 23 12:22:03 2020 +# 1606134123 +# +# # Current time: Mon Mar 1 09:34:36 2021 +# 1614591276 +# +# # filelist.csv +# +# Output: +# +# "Les Miserables Episode 1: The Bishop (broadcast date: 1937-07-23)" +# 00:17:33 + +import csv +import sys + +def read_playlist(filename): + playlist = [] + with open(filename) as csv_file: + csv_reader = csv.reader(csv_file, delimiter=',') + for row in csv_reader: + playlist.append([int(int(row[0])/1000+0.5), row[1]]) + return playlist + +def total_time(playlist): + sum = 0 + for x in playlist: + sum += x[0] + return sum + +def show_title(start_secs, current_secs, playlist_file): + playlist = read_playlist('playlist.csv') + total_secs = current_secs - start_secs + playlist_total_secs = total_time(playlist) + playlist_secs = total_secs % playlist_total_secs + + for item in playlist: + if playlist_secs < item[0]: + print(item[1]) + hh = int(playlist_secs/3600) + playlist_secs %= 3600 + mm = int(playlist_secs/60) + playlist_secs %= 60 + ss = playlist_secs; + print("{:02}:{:02}:{:02}".format(hh, mm, ss)) + break + else: + playlist_secs -= item[0] + +show_title(int(sys.argv[1]), int(sys.argv[2]), sys.argv[3]) |
