aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Anderson <mark@frontrangerunner.com>2020-12-21 19:13:39 -0700
committerMark Anderson <mark@frontrangerunner.com>2020-12-21 19:13:39 -0700
commita7e199b11bfe7ff7c54e205aa7f00cc0c33c43bc (patch)
tree0b4c72fc9997e980c07ad4061922ec894192bd0e
parentcf41d190ebc5542ccc4ca5db5df6431f67dfc35b (diff)
downloadperlweeklychallenge-club-a7e199b11bfe7ff7c54e205aa7f00cc0c33c43bc.tar.gz
perlweeklychallenge-club-a7e199b11bfe7ff7c54e205aa7f00cc0c33c43bc.tar.bz2
perlweeklychallenge-club-a7e199b11bfe7ff7c54e205aa7f00cc0c33c43bc.zip
initial II :)
-rw-r--r--challenge-092/mark-anderson/raku/ch-2-flexible.raku34
-rw-r--r--challenge-092/mark-anderson/raku/ch-2.raku29
2 files changed, 49 insertions, 14 deletions
diff --git a/challenge-092/mark-anderson/raku/ch-2-flexible.raku b/challenge-092/mark-anderson/raku/ch-2-flexible.raku
new file mode 100644
index 0000000000..ba69eb9777
--- /dev/null
+++ b/challenge-092/mark-anderson/raku/ch-2-flexible.raku
@@ -0,0 +1,34 @@
+#!/usr/bin/env raku
+
+use Test;
+plan 5;
+
+is-deeply insert-interval(
+ (2,6), [(1,4), (8,10)]), [(1,6), (8,10)], "Example 1";
+is-deeply insert-interval(
+ (5,8), [(1,2), (3,7), (8,10)]), [(1,2), (3,10)], "Example 2";
+is-deeply insert-interval(
+ (10,11), [(1,5), (7,9)]), [(1,5), (7,9), (10,11)], "Example 3";
+is-deeply insert-interval(
+ (1,2), [(3,4), (7,8)]), [(1,2), (3,4), (7,8)], "First";
+is-deeply insert-interval(
+ (1,9), [(2,3), (7,8)]), [(1,9),], "Around";
+
+sub insert-interval($N, @S) {
+ @S = sort @S.push: $N;
+
+ my @result;
+
+ while @S > 1 {
+ if @S[0;1] < @S[1;0] {
+ @result.push: @S.shift;
+ }
+
+ else {
+ @S[1] = (@S[0;0], @S[1;0]).min, (@S[0;1], @S[1;1]).max;
+ @S.shift;
+ }
+ }
+
+ @result.push: |@S;
+}
diff --git a/challenge-092/mark-anderson/raku/ch-2.raku b/challenge-092/mark-anderson/raku/ch-2.raku
index 2fb0d146b7..0dce7e6dab 100644
--- a/challenge-092/mark-anderson/raku/ch-2.raku
+++ b/challenge-092/mark-anderson/raku/ch-2.raku
@@ -1,7 +1,7 @@
#!/usr/bin/env raku
use Test;
-plan 3;
+plan 5;
is-deeply insert-interval(
(2,6), [(1,4), (8,10)]), [(1,6), (8,10)], "Example 1";
@@ -9,22 +9,23 @@ is-deeply insert-interval(
(5,8), [(1,2), (3,7), (8,10)]), [(1,2), (3,10)], "Example 2";
is-deeply insert-interval(
(10,11), [(1,5), (7,9)]), [(1,5), (7,9), (10,11)], "Example 3";
+is-deeply insert-interval(
+ (1,2), [(3,4), (7,8)]), [(1,2), (3,4), (7,8)], "First";
+is-deeply insert-interval(
+ (1,9), [(2,3), (7,8)]), [(1,9),], "Around";
-sub insert-interval($N, @S) {
- @S = sort @S.push: $N;
-
+sub insert-interval($N is copy, @S) {
my @result;
- while @S > 1 {
- if @S[0;1] < @S[1;0] {
- @result.push: @S.shift;
- }
+ return [$N, |@S] if $N[1] < @S[0;0];
+
+ @result.push: @S.shift while @S and @S[0;1] < $N[0];
+
+ my $head = min @S[0;0], $N[0];
+
+ @S.shift while @S[1] and @S[1;0] <= $N[1];
- else {
- @S[1] = (@S[0;0], @S[1;0]).min, (@S[0;1], @S[1;1]).max;
- @S.shift;
- }
- }
+ my $tail = max @S[0;1], $N[1];
- @result.push: |@S;
+ @result.append: $($head, $tail), |@S[1..*];
}