aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-241/bob-lied/perl/ch-1.pl11
1 files changed, 9 insertions, 2 deletions
diff --git a/challenge-241/bob-lied/perl/ch-1.pl b/challenge-241/bob-lied/perl/ch-1.pl
index 28954dc13b..efb05edce9 100644
--- a/challenge-241/bob-lied/perl/ch-1.pl
+++ b/challenge-241/bob-lied/perl/ch-1.pl
@@ -46,10 +46,17 @@ sub triplet($diff, @nums)
{
for ( my $j = $i+1; $j <= $#nums-1; $j++ )
{
- next unless $nums[$j] - $nums[$i] == $diff;
+ my $dj = $nums[$j] - $nums[$i];
+
+ # Input is sorted, so stop once the difference is too big.
+ last if $dj > $diff;
+ next unless $dj == $diff;
+
for ( my $k = $j+1; $k <= $#nums ; $k++ )
{
- if ( $nums[$k] - $nums[$j] == $diff )
+ my $dk = $nums[$k] - $nums[$j];
+ last if $dk > $diff;
+ if ( $dk == $diff )
{
$count++;
push @show, [ $i, $j, $k ] if $Verbose;