aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Anderson <mark@andemark.io>2025-11-10 08:54:01 +0000
committerMark Anderson <mark@andemark.io>2025-11-10 08:54:01 +0000
commit32186bfa7ab1c671ba4552a48a522e9345373dc4 (patch)
tree907439fad558a0b56735ec6e4e9b4648290f267e
parentd945cc3d48b1284d49aba765341514707f7bee50 (diff)
downloadperlweeklychallenge-club-32186bfa7ab1c671ba4552a48a522e9345373dc4.tar.gz
perlweeklychallenge-club-32186bfa7ab1c671ba4552a48a522e9345373dc4.tar.bz2
perlweeklychallenge-club-32186bfa7ab1c671ba4552a48a522e9345373dc4.zip
Challenge 347 Solutions (Raku)
-rw-r--r--challenge-347/mark-anderson/raku/ch-1.raku21
-rw-r--r--challenge-347/mark-anderson/raku/ch-2.raku32
2 files changed, 53 insertions, 0 deletions
diff --git a/challenge-347/mark-anderson/raku/ch-1.raku b/challenge-347/mark-anderson/raku/ch-1.raku
new file mode 100644
index 0000000000..840d5aa618
--- /dev/null
+++ b/challenge-347/mark-anderson/raku/ch-1.raku
@@ -0,0 +1,21 @@
+#!/usr/bin/env raku
+use Test;
+
+is format-date('1st Jan 2025'), '2025-01-01';
+is format-date('22nd Feb 2025'), '2025-02-22';
+is format-date('15th Apr 2025'), '2025-04-15';
+is format-date('23rd Oct 2025'), '2025-10-23';
+is format-date('31st Dec 2025'), '2025-12-31';
+
+sub format-date($str)
+{
+ my ($day, $month, $year) = $str.split(/<space>/);
+
+ my %months is Map = {
+ :Jan(1), :Feb(2), :Mar(3), :Apr(4),
+ :May(5), :Jun(6), :Jul(7), :Aug(8),
+ :Sep(9), :Oct(10), :Nov(11), :Dec(12)
+ }
+
+ ($year, %months{$month}, $day.substr(0, *-2)).fmt('%02d', '-')
+}
diff --git a/challenge-347/mark-anderson/raku/ch-2.raku b/challenge-347/mark-anderson/raku/ch-2.raku
new file mode 100644
index 0000000000..6bb570ba93
--- /dev/null
+++ b/challenge-347/mark-anderson/raku/ch-2.raku
@@ -0,0 +1,32 @@
+#!/usr/bin/env raku
+use Test;
+
+is format-phone-number('1-23-45-6'), '123-456';
+is format-phone-number('1234'), '12-34';
+is format-phone-number('12 345-6789'), '123-456-789';
+is format-phone-number('123 4567'), '123-45-67';
+is format-phone-number('123 456-78'), '123-456-78';
+
+sub format-phone-number($str is copy)
+{
+ $str .= subst(/<space> | '-'/, :g);
+
+ do given $str.chars % 3
+ {
+ when 0 {
+ .join('-') given $str ~~ m:g/.../
+ }
+
+ when 1 {
+ .join('-') given flat
+ $str.substr(0, *-4) ~~ m:g/.../,
+ $str.substr( *-4) ~~ m:g/../
+ }
+
+ when 2 {
+ .join('-') given flat
+ $str.substr(0, *-2) ~~ m:g/.../,
+ $str.substr( *-2)
+ }
+ }
+}