diff options
| author | Luca Ferrari <fluca1978@gmail.com> | 2020-03-09 14:56:36 +0100 |
|---|---|---|
| committer | Luca Ferrari <fluca1978@gmail.com> | 2020-03-09 14:56:36 +0100 |
| commit | 7ea0bc248937a896acf24aacbdc8aadd246b3bb0 (patch) | |
| tree | 076547a9b385b16070b4b64738c250a781f48912 | |
| parent | 16116626d45bf678a0209a92d27478423fbcfab3 (diff) | |
| download | perlweeklychallenge-club-7ea0bc248937a896acf24aacbdc8aadd246b3bb0.tar.gz perlweeklychallenge-club-7ea0bc248937a896acf24aacbdc8aadd246b3bb0.tar.bz2 perlweeklychallenge-club-7ea0bc248937a896acf24aacbdc8aadd246b3bb0.zip | |
Task1 PWC 51 in Raku.
| -rw-r--r-- | challenge-051/luca-ferrari/raku/ch-1.p6 | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/challenge-051/luca-ferrari/raku/ch-1.p6 b/challenge-051/luca-ferrari/raku/ch-1.p6 new file mode 100644 index 0000000000..b522eb0be8 --- /dev/null +++ b/challenge-051/luca-ferrari/raku/ch-1.p6 @@ -0,0 +1,56 @@ +#!env raku + + +# Perl Weekly Challenge 50 +# see <https://perlweeklychallenge.org/blog/perl-weekly-challenge-051/> +# +# Task 1 +# Given an array @Lof integers. Write a script +# to find all unique triplets +# such that a + b + c is same as the given target T. +# Also make sure a <= b <= c. +# +# +# +# Example of execution: +# % raku ch-1.p6 +# Found 2 triplets that sum to 0: +# -10 2 8 +# -7 -3 10 + + + + +sub MAIN( Int:D $target? = 0, + @*L? where { @*L.grep( * ~~ Int ).elems > 3 } = ( -25, -10, -7, -3, 2, 4, 8, 10 ) ) { + + # store the found triplets + my @triplets; + + # extract only the integers + my @L = @*L.sort.grep( * ~~ Int ); + + # loop over the array + loop ( my $first-start = 0; $first-start < @L.elems - 2; $first-start++ ) { + my $first = @L[ $first-start ]; + loop ( my $second-start = $first-start + 1; $second-start < @L.elems - 1; $second-start++ ) { + my $second = @L[ $second-start ]; + + next if $second < $first; + + loop ( my $third-start = $second-start + 1; $third-start < @L.elems; $third-start++ ) { + my $third = @L[ $third-start ]; + + next if $third < $second; + + @triplets.push: Array.new( $first, $second, $third ) if ( $first + $second + $third == $target; ); + } + } + + + } + + "Found { @triplets.elems } triplets that sum to $target:".say; + @triplets.join( "\n" ).say; + +} |
