aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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)
+ }
+ }
+}