diff options
| author | Dave Cross <dave@dave.org.uk> | 2020-03-09 08:39:55 +0000 |
|---|---|---|
| committer | Dave Cross <dave@dave.org.uk> | 2020-03-09 08:39:55 +0000 |
| commit | b895d857b53695262cecf9062bcc841e42dfc437 (patch) | |
| tree | e3a4476075cea8b30bfcf01d03341b9b55a18fd7 /challenge-051/dave-cross | |
| parent | 21c6b3a2c1fd64b6ca44af33b67ae5f095acc940 (diff) | |
| download | perlweeklychallenge-club-b895d857b53695262cecf9062bcc841e42dfc437.tar.gz perlweeklychallenge-club-b895d857b53695262cecf9062bcc841e42dfc437.tar.bz2 perlweeklychallenge-club-b895d857b53695262cecf9062bcc841e42dfc437.zip | |
Challenge #51 Task #1
Diffstat (limited to 'challenge-051/dave-cross')
| -rw-r--r-- | challenge-051/dave-cross/ch-01.pl | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/challenge-051/dave-cross/ch-01.pl b/challenge-051/dave-cross/ch-01.pl new file mode 100644 index 0000000000..2ab91e554a --- /dev/null +++ b/challenge-051/dave-cross/ch-01.pl @@ -0,0 +1,37 @@ +#!/usr/bin/perl +# +# Note: As $a and $b are special variables in Perl, I've used +# $x, $y and $z instead of $a, $b and $c. + +use strict; +use warnings; +use feature 'say'; + +my $target = 0; + +my @numbers = sort { $a <=> $b } grep { /^-?\d+$/ } @ARGV; + +die "Usage: $0 [list of integers]\n" unless @numbers; + +for my $i (0 .. $#numbers - 1) { + my $x = $numbers[$i]; + my $start = $i + 1; + my $end = $#numbers; + + while ($start < $end) { + my $y = $numbers[$start]; + my $z = $numbers[$end]; + + if ($x + $y + $z == $target) { + say "($x, $y, $z)"; + $start++; + $end--; + } else { + if ($x + $y + $z > $target) { + $end--; + } else { + $start++; + } + } + } +} |
