Task1
We return every string that is a substring of amother:
#!/usr/bin/env perl
use strict;
use warnings;
use List::Util qw(any);
sub match_string{
my ($arr) = @_;
my @res;
foreach my $i(0..$#$arr) {
my $x = $arr->[$i];
foreach my $j(0..$#$arr) {
my $y = $arr->[$j];
if($i != $j && index($y,$x) != -1 && !any{$_ eq $x} @res) {
push @res,$x;
last
}
}
}
@res
}
printf "(%s)\n",join ', ',match_string(['cat','cats','dog','dogcat',
'dogcat','rat','ratcatdogcat']);
printf "(%s)\n",join ', ',
match_string(['hello','hell','world','wor','ellow','elloworld']);
printf "(%s)\n",join ', ',
match_string(['a', 'aa', 'aaa', 'aaaa']);
printf "(%s)\n",join ', ',
match_string(['flower','flow','flight','fl','fli','ig','ght']);
printf "(%s)\n",join ', ',
match_string(['car','carpet','carpenter','pet',
'enter','pen','pent']);
Task2
We check if the accumulated binary number is divisible by 5 and accumulate the boolean results in an array:
#!/usr/bin/env perl
use strict;
use warnings;
sub binary_prefix{
my @res;
my $x = 0;
foreach(@{$_[0]}){
$x = ($x << 1 | $_) % 5;
push @res,$x == 0 ? 1 : 0;
}
@res
}
printf "(%s)\n", join ', ', binary_prefix([0,1,1,0,0,1,0,1,1,1]);
printf "(%s)\n", join ', ', binary_prefix([1,0,1,0,1,0]);
printf "(%s)\n", join ', ', binary_prefix([0,0,1,0,1]);
printf "(%s)\n", join ', ', binary_prefix([1,1,1,1,1]);
printf "(%s)\n", join ', ', binary_prefix([1,0,1,1,0,1,0,0,1,1]);
No comments:
Post a Comment