aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-099/james-smith/perl/ch-2.pl11
1 files changed, 4 insertions, 7 deletions
diff --git a/challenge-099/james-smith/perl/ch-2.pl b/challenge-099/james-smith/perl/ch-2.pl
index d0a3231645..cd9531a4fd 100644
--- a/challenge-099/james-smith/perl/ch-2.pl
+++ b/challenge-099/james-smith/perl/ch-2.pl
@@ -35,10 +35,9 @@ is( uniq_subseq_cache('abcabcabcabcabcabcabcabcabc','abc'),165 );
done_testing();
sub uniq_subseq {
- my( $str, $sub ) = @_;
+ my( $res, $str, $sub ) = ( 0, @_ );
my $f = substr $sub, 0, 1, q();
return scalar @{[ $str =~ m{$f}g ]} if $sub eq q();
- my $res = 0;
$res += uniq_subseq( $str, $sub ) while $str=~s{.*?$f}{};
return $res;
}
@@ -65,13 +64,11 @@ sub display_uniq_subseq {
}
sub uniq_subseq_cache {
- my( $str, $sub ) = @_;
- my $k = "$str-$sub";
- return $c->{$k} if exists $c->{$k};
+ my( $res, $k, $str, $sub ) = ( 0, "$_[0]-$_[1]", @_ );
my $f = substr $sub, 0, 1, q();
+ return $c->{$k} if exists $c->{$k};
return $c->{$k} = scalar @{[ $str =~ m{$f}g ]} if $sub eq q();
- my $res = 0;
- $res += uniq_subseq( $str, $sub ) while $str=~s{.*?$f}{};
+ $res += uniq_subseq_cache( $str, $sub ) while $str=~s{.*?$f}{};
return $c->{$k} = $res;
}