diff options
| author | Luca Ferrari <fluca1978@gmail.com> | 2020-03-02 09:06:25 +0100 |
|---|---|---|
| committer | Luca Ferrari <fluca1978@gmail.com> | 2020-03-02 09:06:25 +0100 |
| commit | fa6a1a5ffcaa0c81544b76f565456acf67627b63 (patch) | |
| tree | 5e9bdbb8f8ebcf849ced9b8435d3436c9e6843f1 /challenge-050 | |
| parent | 16116626d45bf678a0209a92d27478423fbcfab3 (diff) | |
| download | perlweeklychallenge-club-fa6a1a5ffcaa0c81544b76f565456acf67627b63.tar.gz perlweeklychallenge-club-fa6a1a5ffcaa0c81544b76f565456acf67627b63.tar.bz2 perlweeklychallenge-club-fa6a1a5ffcaa0c81544b76f565456acf67627b63.zip | |
Possible solution to task 1.
Diffstat (limited to 'challenge-050')
| -rw-r--r-- | challenge-050/luca-ferrari/raku/ch-1.p6 | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/challenge-050/luca-ferrari/raku/ch-1.p6 b/challenge-050/luca-ferrari/raku/ch-1.p6 new file mode 100644 index 0000000000..c680c18897 --- /dev/null +++ b/challenge-050/luca-ferrari/raku/ch-1.p6 @@ -0,0 +1,48 @@ +#!env raku +# +# Perl Weekly Challenge 50 +# see +# <https://perlweeklychallenge.org/blog/perl-weekly-challenge-050/> +# +# Task 1 +# Merge Intervals +# Write a script to merge the given intervals where ever possible. +# [2,7], [3,9], [10,12], [15,19], [18,22] +# The script should merge [2, 7] and [3, 9] +# together to return [2, 9]. +# Similarly it should also merge [15, 19] +# and [18, 22] together to return [15, 22]. +# The final result should be something like below: +# [2, 9], [10, 12], [15, 22] + + +sub overlap( Range $a, Range $b ) { + return $b.max > $a.max > $b.min || $b.max > $a.min > $b.min; +} + +sub merge( Range $a, Range $b ) { + return Range.new: min( $a.min, $b.min ), max( $b.max, $a.max ); +} + + + + +my @ranges = 2..7, 3..9, 10..12, 15..19, 18..22; +my @merged-ranges; + +while ( @ranges.elems > 1 ) { + if overlap( @ranges[ 0 ], @ranges[ 1 ] ) { + # merge the ranges + @merged-ranges.push: merge( @ranges[ 0 ], @ranges[ 1 ] ); + @ranges.shift; + @ranges.shift; + } + else { + # dont' merge, push the first one + @merged-ranges.push: @ranges[ 0 ]; + @ranges.shift; + } +} + + +@merged-ranges.say; |
