diff options
| author | Mark Anderson <mark@frontrangerunner.com> | 2020-12-21 19:13:39 -0700 |
|---|---|---|
| committer | Mark Anderson <mark@frontrangerunner.com> | 2020-12-21 19:13:39 -0700 |
| commit | a7e199b11bfe7ff7c54e205aa7f00cc0c33c43bc (patch) | |
| tree | 0b4c72fc9997e980c07ad4061922ec894192bd0e | |
| parent | cf41d190ebc5542ccc4ca5db5df6431f67dfc35b (diff) | |
| download | perlweeklychallenge-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.raku | 34 | ||||
| -rw-r--r-- | challenge-092/mark-anderson/raku/ch-2.raku | 29 |
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..*]; } |
