aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Anderson <mark@andemark.io>2025-11-17 06:26:18 +0000
committerMark Anderson <mark@andemark.io>2025-11-17 06:26:18 +0000
commit5c9fe5934a98993dce4c7ad5e17b248d47aeee2f (patch)
treef2f300890ff3a6ba07e4dbc239941af2b06aae45
parent51f93bc0962522ed3bc5152f8266cc780c83f190 (diff)
downloadperlweeklychallenge-club-5c9fe5934a98993dce4c7ad5e17b248d47aeee2f.tar.gz
perlweeklychallenge-club-5c9fe5934a98993dce4c7ad5e17b248d47aeee2f.tar.bz2
perlweeklychallenge-club-5c9fe5934a98993dce4c7ad5e17b248d47aeee2f.zip
Challenge 348 Solutions (Raku)
-rw-r--r--challenge-348/mark-anderson/raku/ch-1.raku18
-rw-r--r--challenge-348/mark-anderson/raku/ch-2.raku19
2 files changed, 37 insertions, 0 deletions
diff --git a/challenge-348/mark-anderson/raku/ch-1.raku b/challenge-348/mark-anderson/raku/ch-1.raku
new file mode 100644
index 0000000000..3c063da874
--- /dev/null
+++ b/challenge-348/mark-anderson/raku/ch-1.raku
@@ -0,0 +1,18 @@
+#!/usr/bin/env raku
+use Test;
+
+nok string-alike("textbook");
+ok string-alike("book");
+ok string-alike("AbCdEfGh");
+nok string-alike("rhythmmyth");
+nok string-alike("UmpireeAudio");
+
+sub string-alike($str)
+{
+ my $n = $str.chars div 2;
+
+ my $left = ($str.substr(0, $n) ~~ m:g:i/< a e i o u >/).elems;
+ my $right = ($str.substr(*-$n) ~~ m:g:i/< a e i o u >/).elems;
+
+ so all $left, $right, $left == $right
+}
diff --git a/challenge-348/mark-anderson/raku/ch-2.raku b/challenge-348/mark-anderson/raku/ch-2.raku
new file mode 100644
index 0000000000..ec3f841cf4
--- /dev/null
+++ b/challenge-348/mark-anderson/raku/ch-2.raku
@@ -0,0 +1,19 @@
+#!/usr/bin/env raku
+use Int::polydiv;
+use Test;
+
+is convert-time("02:30", "02:45"), 1;
+is convert-time("11:55", "12:15"), 2;
+is convert-time("09:00", "13:00"), 4;
+is convert-time("23:45", "00:30"), 3;
+is convert-time("14:20", "15:25"), 2;
+
+sub convert-time($source, $target)
+{
+ my $s = DateTime.new("1970-01-01T$source:00");
+ my $t = DateTime.new("1970-01-01T$target:00");
+
+ $t .= later(days => 1) if $t < $s;
+
+ sum (($t - $s) div 60).polydiv(60,15,5,1)
+}