UP / HOME

Challenge 086

Table of Contents

Task 1 - Pair Difference

You are given an array of integers @N and an integer $A.

Write a script to find find if there exists a pair of elements in the array whose difference is $A.

Print 1 if exists otherwise 0.

Perl

@N & $A are taken from stdin, $A is the last argument.

die "usage: ./ch-1.pl <integers \@N> <integer \$A>\n"
    unless scalar @ARGV >= 3;

my $A = pop @ARGV;
my @N = @ARGV;

We just loop over @N over a loop over @N & find the difference. If it's equal to $A or -$A then we print 1 & exit. The first loop is shift'ing the numbers out of array @N because we are matching for both $A & -$A so we don't need the number again.

For example, if @N = [1, 2] & we don't shift in first loop then we'll perform 2 subtraction operations: 1 - 2 & 2 - 1 & we won't have to match for -$A but if we just match for -$A then we can use shift & we'll only have to perform 1 subtraction operation 1 - 2.

We assume subtraction costs more than matching with -$A, that makes this more efficient. But it doesn't matter much.

while (my $int = shift @N) {
    foreach (@N) {
        my $diff = $int - $_;
        print "1\n" and exit 0 if ($diff == $A or $diff == -$A);
    }
}
print "0\n";

Andinus / 2020-11-15 / Modified: 2020-11-15 Sun 14:08 Emacs 27.1 (Org mode 9.4)