use Modern::Perl;
my $a = "AB:APPLE:BOY:ZOO:ZOOM";
my $b = "APPLE:ZOO";
my $c = "BOY:GIRL";
say isSubset( $b, $a ); #Returns 1
say !isSubset( $c, $a ); #Returns 1
sub isSubset {
my @small = split ':', $_[0];
my @big = split ':', $_[1];
@small ~~ [ grep $_ ~~ @big, @small ];
}
####
sub isSubset {
my $count = my @small = split ':', $_[0];
my @big = split ':', $_[1];
do { $count-- when @big } for @small;
!$count;
}
####
use Modern::Perl;
use Benchmark qw(cmpthese);
my $a = "AB:APPLE:BOY:ZOO:ZOOM";
my $b = "APPLE:ZOO";
my $c = "BOY:GIRL";
sub isSubset {
my @small = split ':', $_[0];
my @big = split ':', $_[1];
@small ~~ [ grep $_ ~~ @big, @small ];
}
sub isSubsetSmarter {
my $count = my @small = split ':', $_[0];
my @big = split ':', $_[1];
do { $count-- when @big } for @small;
!$count;
}
sub isSubsetHash {
my $count = my @small = split ':', $_[0];
my %big;
$big{$_} = 1 for split ':', $_[1];
do { $count-- if $big{$_} } for @small;
!$count;
}
cmpthese(
-5,
{
isSubset => sub { isSubset( $b, $a ) },
isSubsetSmarter => sub { isSubsetSmarter( $b, $a ) },
isSubsetHash => sub { say isSubsetHash( $b, $a ) },
}
);
####
Rate isSubset isSubsetHash isSubsetSmarter
isSubset 143452/s -- -15% -54%
isSubsetHash 169263/s 18% -- -45%
isSubsetSmarter 309705/s 116% 83% --