Task1
We count the similar dominos in a hash and return its sum:
#!/usr/bin/env perl
use strict;
use warnings;
use List::Util qw(sum0);
sub similar_dominos{
my %h;
$h{join '',sort{$a <=> $b} @$_}++ foreach @{$_[0]};
sum0 grep{$_>1} values %h
}
printf "%d\n",similar_dominos([[1,3],[3,1],[2,4],[6,8]]);
printf "%d\n",similar_dominos([[1,2],[2,1],[1,1],[1,2],[2,2]]);
Task2
We check if 3 points form a boomerang as explained in here:
#!/usr/bin/env perl
use strict;
use warnings;
sub boomerang{
my ($a) = @_;
($a->[1][1] - $a->[0][1]) * ($a->[2][0] - $a->[1][0]) !=
($a->[2][1] - $a->[1][1]) * ($a->[1][0] - $a->[0][0])
}
printf "%d\n",boomerang([[1,1],[2,3],[3,2]]);
printf "%d\n",boomerang([[1,1],[2,2],[3,3]]);
printf "%d\n",boomerang([[1,1],[1,2],[2,3]]);
printf "%d\n",boomerang([[1,1],[1,2],[1,3]]);
printf "%d\n",boomerang([[1,1],[2,1],[3,1]]);
printf "%d\n",boomerang([[0,0],[2,3],[4,5]]);