aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Pankoff <ccntrq@screenri.de>2020-10-05 15:25:44 +0200
committerAlexander Pankoff <ccntrq@screenri.de>2020-10-11 16:51:54 +0200
commit550d5ddadd1379345c9e25e451f97f562a2d00d5 (patch)
treeeff6a81bb0845d711e6e13971acd3a9f7125adc4
parentcbfdd589185f2e68e08b3542e519cd35578e7724 (diff)
downloadperlweeklychallenge-club-550d5ddadd1379345c9e25e451f97f562a2d00d5.tar.gz
perlweeklychallenge-club-550d5ddadd1379345c9e25e451f97f562a2d00d5.tar.bz2
perlweeklychallenge-club-550d5ddadd1379345c9e25e451f97f562a2d00d5.zip
add perl solution for wk-081 ch-1
-rw-r--r--challenge-081/alexander-pankoff/perl/ch-1.pl43
1 files changed, 43 insertions, 0 deletions
diff --git a/challenge-081/alexander-pankoff/perl/ch-1.pl b/challenge-081/alexander-pankoff/perl/ch-1.pl
new file mode 100644
index 0000000000..8dfb88a719
--- /dev/null
+++ b/challenge-081/alexander-pankoff/perl/ch-1.pl
@@ -0,0 +1,43 @@
+#!/usr/bin/env perl
+use v5.20;
+use utf8;
+use strict;
+use warnings;
+use autodie;
+use feature qw(say signatures);
+no warnings 'experimental::signatures';
+
+use List::Util qw(any);
+
+my ( $A, $B ) = @ARGV;
+$A //= "";
+$B //= "";
+
+say '(' . join( ', ', map { quote($_) } common_base_strings( $A, $B ) ) . ')';
+
+sub common_base_strings ( $a, $b ) {
+ return intersection( [ base_strings($a) ], [ base_strings($b) ] );
+}
+
+# finds all base strings of str
+sub base_strings($str) {
+ my @candidates =
+ map { substr( $str, 0, $_ ) } 1 .. length($str);
+ return grep { is_base_string( $_, $str ) } @candidates;
+}
+
+sub is_base_string ( $base, $str ) {
+ return $str =~ /^($base)+$/;
+}
+
+# returns a list of elems from $a that are also in $b
+sub intersection ( $a, $b ) {
+ grep {
+ my $a_elem = $_;
+ any { $_ eq $a_elem } @$b;
+ } @$a;
+}
+
+sub quote($str) {
+ return '"' . $str . '"';
+}