diff options
| author | Lubos Kolouch <lubos@kolouch.net> | 2021-03-13 14:31:27 +0100 |
|---|---|---|
| committer | Lubos Kolouch <lubos@kolouch.net> | 2021-03-13 14:31:27 +0100 |
| commit | 9629be84207155ac7e81dbd6eaa1e91e9528ad02 (patch) | |
| tree | 68dc3888ceb5aa526cf2a6343b0e6d00334c60a0 | |
| parent | 866b42f85d0449094e02a531046e18bdaaf6b080 (diff) | |
| download | perlweeklychallenge-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.pl | 59 |
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; |
