aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-092/juliodcs/raku/ch-1.raku8
-rw-r--r--challenge-092/juliodcs/raku/ch-2.raku22
2 files changed, 30 insertions, 0 deletions
diff --git a/challenge-092/juliodcs/raku/ch-1.raku b/challenge-092/juliodcs/raku/ch-1.raku
new file mode 100644
index 0000000000..1fea02117a
--- /dev/null
+++ b/challenge-092/juliodcs/raku/ch-1.raku
@@ -0,0 +1,8 @@
+#! /usr/bin/env raku
+
+unit sub MAIN($a, $b);
+
+my &single = -> $string { $string.subst: /(.)$0*/, {" $0"}, :g }
+my &equal = -> $a, $b { $a eq $b.trans(single($b) => single($a)) }
+
+say +(equal($a, $b) && equal($b, $a))
diff --git a/challenge-092/juliodcs/raku/ch-2.raku b/challenge-092/juliodcs/raku/ch-2.raku
new file mode 100644
index 0000000000..4e6d8417c0
--- /dev/null
+++ b/challenge-092/juliodcs/raku/ch-2.raku
@@ -0,0 +1,22 @@
+#! /usr/bin/env raku
+
+sub add-new(@s, $n) {
+ sort |@s, $n
+}
+
+sub merge($range1, $range2) {
+ $range1.list ∩ $range2
+ ?? min($range1.head, $range2.head) .. max($range1.tail, $range2.tail)
+ !! $range1
+}
+
+sub re-merge(@ranges) {
+ @ranges.rotor(2 => -1).map({ [∩] $_ }).grep(*.elems > 0).elems > 0
+ ?? re-merge @ranges.rotor(2 => -1).map({ merge .head, .tail })
+ !! @ranges
+}
+
+my @s = (1 .. 2, 3 .. 7, 8 .. 10);
+my $n = 5 .. 8;
+
+say re-merge add-new @s, $n;