aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubos Kolouch <lubos@kolouch.net>2021-03-13 14:31:27 +0100
committerLubos Kolouch <lubos@kolouch.net>2021-03-13 14:31:27 +0100
commit9629be84207155ac7e81dbd6eaa1e91e9528ad02 (patch)
tree68dc3888ceb5aa526cf2a6343b0e6d00334c60a0
parent866b42f85d0449094e02a531046e18bdaaf6b080 (diff)
downloadperlweeklychallenge-club-9629be84207155ac7e81dbd6eaa1e91e9528ad02.tar.gz
perlweeklychallenge-club-9629be84207155ac7e81dbd6eaa1e91e9528ad02.tar.bz2
perlweeklychallenge-club-9629be84207155ac7e81dbd6eaa1e91e9528ad02.zip
Challenge 103 Task 2 LK
-rw-r--r--challenge-103/lubos-kolouch/perl/ch-2.pl59
1 files changed, 59 insertions, 0 deletions
diff --git a/challenge-103/lubos-kolouch/perl/ch-2.pl b/challenge-103/lubos-kolouch/perl/ch-2.pl
new file mode 100644
index 0000000000..21976f63c4
--- /dev/null
+++ b/challenge-103/lubos-kolouch/perl/ch-2.pl
@@ -0,0 +1,59 @@
+#!/usr/bin/perl
+#===============================================================================
+#
+# FILE: ch-2.pl
+#
+# USAGE: ./ch-2.pl
+#
+# DESCRIPTION: Perl Weekly Challenge 103
+# Task 1 - What's Playing?
+#
+# AUTHOR: Lubos Kolouch
+# CREATED: 03/13/2021 11:06:43 AM
+#===============================================================================
+
+use strict;
+use warnings;
+use Data::Dumper;
+
+sub now_playing {
+ my $what = shift;
+
+ open my $file, '<', $what->{filename};
+
+ my %tracks;
+ my $total_length = 0;
+ my $track = 0;
+ while (<$file>) {
+ chomp;
+
+ my ($len, $title) = split /,/, $_;
+
+ $tracks{$track}{'track_start'} = $total_length;
+ $tracks{$track}{'len'} = $len;
+ $tracks{$track}{'title'} = $title;
+ $total_length += $len;
+ $tracks{$track}{'total_length'} = $total_length;
+ $track++;
+ }
+
+ # damned miliseconds, took me long debugging to notice them
+ my $diff = ($what->{now} - $what->{start})*1000;
+ $diff %= $total_length;
+
+ $track = 0;
+ $track++ while $tracks{$track}{'total_length'} <= $diff;
+
+ my $track_pos = int(($diff - $tracks{$track}{'track_start'})/1000);
+
+ my $hour = int($track_pos / 3600);
+ my $min = int(($track_pos - $hour*60) / 60);
+ my $sec = $track_pos - $min*60;
+
+ return "$tracks{$track}{'title'} at $hour:$min:$sec";
+}
+
+use Test::More;
+is(now_playing({start => 1606134123, now => 1614591276, filename => 'now_playing.csv'}), '"Les Miserables Episode 1: The Bishop (broadcast date: 1937-07-23)" at 0:10:24');
+
+done_testing;