aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-206/cheok-yin-fung/perl/ch-1.pl27
-rw-r--r--challenge-206/cheok-yin-fung/perl/ch-2.pl17
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;