RabbitFarm
2020-11-15
Perl Weekly Challenge 086
Part 1
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.
Solution
use strict;
use warnings;
##
# 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.
##
use boolean;
use Math::Combinatorics;
sub build_constraints{
my @constraints;
my $a_not_equal_b = sub { $_[0] != $_[1] };
my $difference_equal_n = sub { $_[0] - $_[1] == $_[2] };
return (
$a_not_equal_b,
$difference_equal_n
);
}
MAIN:{
my $combinations = Math::Combinatorics->new(
count => 2,
data => [@ARGV[1 .. @ARGV - 1]],
);
my $found = false;
my ($check_equal, $check_difference) = build_constraints();
while(my @combination = $combinations->next_combination()){
if($check_equal->(@combination) && $check_difference->(@combination, $ARGV[0])){
$found = true;
print "1\n"; last;
}
}
print "0\n" if(!$found);
}
Sample Run
$ perl perl/ch-1.pl 15 10 30 20 50 40
0
$ perl perl/ch-1.pl 7 10 8 12 15 5
1
Notes
This is a fairly silly use of the constraint programming approach I used last week. Like last time I generate all combinations and test them using a filtering approach. The filter is an array of constraint functions. Here we just have two simple constraints though!
Part 2
You are given Sudoku puzzle (9x9). Write a script to complete the puzzle
Notes
I didn’t have a chance to implement a solution in Perl. I would have used a similar constraint approach if I did. This is a natural use for Prolog and if you’re interested in reading in my Prolog implementation you can go here.
posted at: 23:49 by: Adam Russell | path: /perl | permanent link to this entry