diff options
| author | Flavio Poletti <flavio@polettix.it> | 2021-02-09 00:05:18 +0100 |
|---|---|---|
| committer | Flavio Poletti <flavio@polettix.it> | 2021-02-09 00:05:18 +0100 |
| commit | bb5fd690cb9731063fd2d59ba79e328166852eb4 (patch) | |
| tree | 315720f4edbd0f056e2017dae1553605fa567a4f /challenge-099 | |
| parent | 323110b0d053e2067a3cae6db62bc209f869bc57 (diff) | |
| download | perlweeklychallenge-club-bb5fd690cb9731063fd2d59ba79e328166852eb4.tar.gz perlweeklychallenge-club-bb5fd690cb9731063fd2d59ba79e328166852eb4.tar.bz2 perlweeklychallenge-club-bb5fd690cb9731063fd2d59ba79e328166852eb4.zip | |
Add polettix's solutions to PWC099
Diffstat (limited to 'challenge-099')
| -rw-r--r-- | challenge-099/polettix/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-099/polettix/blog1.txt | 1 | ||||
| -rw-r--r-- | challenge-099/polettix/perl/ch-1.pl | 16 | ||||
| -rw-r--r-- | challenge-099/polettix/perl/ch-2.pl | 31 |
4 files changed, 49 insertions, 0 deletions
diff --git a/challenge-099/polettix/blog.txt b/challenge-099/polettix/blog.txt new file mode 100644 index 0000000000..a44ed25ad8 --- /dev/null +++ b/challenge-099/polettix/blog.txt @@ -0,0 +1 @@ +https://github.polettix.it/ETOOBUSY/2021/02/10/pwc099-pattern-match/ diff --git a/challenge-099/polettix/blog1.txt b/challenge-099/polettix/blog1.txt new file mode 100644 index 0000000000..28712cb9a1 --- /dev/null +++ b/challenge-099/polettix/blog1.txt @@ -0,0 +1 @@ +https://github.polettix.it/ETOOBUSY/2021/02/11/pwc099-unique-subsequence/ diff --git a/challenge-099/polettix/perl/ch-1.pl b/challenge-099/polettix/perl/ch-1.pl new file mode 100644 index 0000000000..8a298e5b33 --- /dev/null +++ b/challenge-099/polettix/perl/ch-1.pl @@ -0,0 +1,16 @@ +#!/usr/bin/env perl +use 5.024; +use warnings; +use experimental qw< postderef signatures >; +no warnings qw< experimental::postderef experimental::signatures >; + +sub pattern_match ($S, $T) { + $T = join '', + map { $_ eq '*' ? '.*' : $_ eq '?' ? '.' : quotemeta($_) } + split m{([*?])}mxs, $T; + return $S =~ m{\A$T\z}mxs ? 1 : 0; +} + +my $string = shift // 'abcde'; +my $pattern = shift // 'a*e'; +say pattern_match($string, $pattern); diff --git a/challenge-099/polettix/perl/ch-2.pl b/challenge-099/polettix/perl/ch-2.pl new file mode 100644 index 0000000000..97e816815d --- /dev/null +++ b/challenge-099/polettix/perl/ch-2.pl @@ -0,0 +1,31 @@ +#!/usr/bin/env perl +use 5.024; +use warnings; +use experimental qw< postderef signatures >; +no warnings qw< experimental::postderef experimental::signatures >; + +sub unique_subsequence ($S, $T) { + my $lenT = length $T or return 1; + my $lenS = length $S or return 0; + my $first = substr $T, 0, 1, ''; + --$lenT; + my $s = 0; # sum + my $p = 0; # search start position + while (($p < $lenS) && (my $i = index $S, $first, $p) >= $p) { + $s += unique_subsequence(substr($S, $i), $T) if $lenS - $i >= $lenT; + $p = $i + 1; + } + return $s; +} + +sub unique_subsequence_rx ($S, $T) { + $T = join '.*', split m{}mxs, $T; + my $count = 0; + 1 while $S =~ m{$T(?{++$count})(?!)}; + return $count; +} + +my $string = shift // 'littleit'; +my $subsequence = shift // 'lit'; +say unique_subsequence($string, $subsequence); +say unique_subsequence_rx($string, $subsequence); |
