diff options
| -rw-r--r-- | challenge-206/cheok-yin-fung/perl/ch-1.pl | 27 | ||||
| -rw-r--r-- | challenge-206/cheok-yin-fung/perl/ch-2.pl | 17 |
2 files changed, 44 insertions, 0 deletions
diff --git a/challenge-206/cheok-yin-fung/perl/ch-1.pl b/challenge-206/cheok-yin-fung/perl/ch-1.pl new file mode 100644 index 0000000000..d2cd50984f --- /dev/null +++ b/challenge-206/cheok-yin-fung/perl/ch-1.pl @@ -0,0 +1,27 @@ +# The Weekly Challenge 206 +# Task 1 Shortest Time +use v5.30.0; +use warnings; +use List::MoreUtils qw/slide/; +use List::Util qw/min/; + +sub st { + my @arr = map { hhmm_to_min($_) } @_; + @arr = sort {$a <=> $b} @arr; + my @diff = slide {$b-$a} @arr; + push @diff, $arr[0]+24*60-$arr[-1]; + return min @diff; +} + +sub hhmm_to_min { + my ($h, $m) = split ":", $_; + ($h, $m) = map { substr($_, 0, 1) eq "0" + ? substr($_, 1, 1) + : $_ } ($h, $m); + return $h*60+$m; +} + +use Test::More tests => 3; +ok st("00:00", "23:55", "20:00") == 5; +ok st("01:01", "00:50", "00:57") == 4; +ok st("10:10", "09:30", "09:00", "09:55") == 15; diff --git a/challenge-206/cheok-yin-fung/perl/ch-2.pl b/challenge-206/cheok-yin-fung/perl/ch-2.pl new file mode 100644 index 0000000000..9ae97d914b --- /dev/null +++ b/challenge-206/cheok-yin-fung/perl/ch-2.pl @@ -0,0 +1,17 @@ +# The Weekly Challenge 206 +# Task 2 Array Pairings +use v5.30.0; +use warnings; + +sub ap { + my @arr = sort {$a <=> $b} @_; + my $sum = 0; + for my $i (0..($#arr-1)/2) { + $sum += $arr[2*$i]; + } + return $sum; +} + +use Test::More tests => 2; +ok ap(1, 2, 3, 4) == 4; +ok ap(0, 2, 1, 3) == 2; |
