diff options
| author | Matthew Neleigh <matthew.neleigh@gmail.com> | 2024-02-12 17:24:12 -0500 |
|---|---|---|
| committer | Matthew Neleigh <matthew.neleigh@gmail.com> | 2024-02-12 17:24:12 -0500 |
| commit | dccd6d5588e7e7c20583089a86278c308c36a8ec (patch) | |
| tree | be1e77c0780e57561e0d5a2c8e5ff1503ef05a47 | |
| parent | 70d02290b277d15dfce45354332569c6ca7c3bf0 (diff) | |
| download | perlweeklychallenge-club-dccd6d5588e7e7c20583089a86278c308c36a8ec.tar.gz perlweeklychallenge-club-dccd6d5588e7e7c20583089a86278c308c36a8ec.tar.bz2 perlweeklychallenge-club-dccd6d5588e7e7c20583089a86278c308c36a8ec.zip | |
modified: challenge-256/mattneleigh/perl/ch-2.pl
| -rwxr-xr-x | challenge-256/mattneleigh/perl/ch-2.pl | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/challenge-256/mattneleigh/perl/ch-2.pl b/challenge-256/mattneleigh/perl/ch-2.pl index c18b24970d..7769fe0fe7 100755 --- a/challenge-256/mattneleigh/perl/ch-2.pl +++ b/challenge-256/mattneleigh/perl/ch-2.pl @@ -43,22 +43,30 @@ exit(0); ################################################################################ sub merge_from_alternate_strings{ - my @str1 = split("", $ARG[0]); - my @str2 = split("", $ARG[1]); + my $length1 = length($ARG[0]); + my $length2 = length($ARG[1]); + my $minimum_common_length = $length1 < $length2 ? + $length1 + : + $length2; my $merged = ""; - # Concatenate characters from @str1 and @str2 - # while neither is empty - while(@str1 && @str2){ - $merged .= shift(@str1) . shift(@str2); + # Over the length the strings have in common, + # concatenate a pair of characters from each + for my $p (0 .. $minimum_common_length - 1){ + $merged .= + substr($ARG[0], $p, 1) + . + substr($ARG[1], $p, 1); } - # At least one array is now empty; if anything - # remains in either, concatenate what's left - if(@str1){ - $merged .= join("", @str1); - } elsif(@str2){ - $merged .= join("", @str2); + # At least one string has been used up; if one + # is longer than the minimum common length, + # concatenate the remaining characters from it + if($length1 > $minimum_common_length){ + $merged .= substr($ARG[0], $minimum_common_length); + } elsif($length2 > $minimum_common_length){ + $merged .= substr($ARG[1], $minimum_common_length); } return($merged); |
