diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2024-02-14 12:40:41 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-14 12:40:41 +0000 |
| commit | f6344d4f0ad5baf30720a68c5d375f1df68bbac7 (patch) | |
| tree | b2b35d67fac483cae998dab4a701b6051e7cbcd1 | |
| parent | 0eea0ad3c68531bab8e840b94d3ab2dfb02f1683 (diff) | |
| parent | 692bf389b545d4451cf76bb78775176229d312d1 (diff) | |
| download | perlweeklychallenge-club-f6344d4f0ad5baf30720a68c5d375f1df68bbac7.tar.gz perlweeklychallenge-club-f6344d4f0ad5baf30720a68c5d375f1df68bbac7.tar.bz2 perlweeklychallenge-club-f6344d4f0ad5baf30720a68c5d375f1df68bbac7.zip | |
Merge pull request #9584 from LubosKolouch/master
feat(challenge-256/lubos-kolouch/perl,python,raku/): Challenge 256 Perl Python Raku
| -rw-r--r-- | challenge-256/lubos-kolouch/perl/ch-1.pl | 20 | ||||
| -rw-r--r-- | challenge-256/lubos-kolouch/perl/ch-2.pl | 20 | ||||
| -rw-r--r-- | challenge-256/lubos-kolouch/python/ch-1.py | 13 | ||||
| -rw-r--r-- | challenge-256/lubos-kolouch/python/ch-2.py | 10 | ||||
| -rw-r--r-- | challenge-256/lubos-kolouch/raku/ch-1.raku | 12 | ||||
| -rw-r--r-- | challenge-256/lubos-kolouch/raku/ch-2.raku | 14 |
6 files changed, 89 insertions, 0 deletions
diff --git a/challenge-256/lubos-kolouch/perl/ch-1.pl b/challenge-256/lubos-kolouch/perl/ch-1.pl new file mode 100644 index 0000000000..bc76446503 --- /dev/null +++ b/challenge-256/lubos-kolouch/perl/ch-1.pl @@ -0,0 +1,20 @@ +use strict; +use warnings; + +sub max_pairs { + my @words = @_; + my %word_set = map { $_ => 1 } @words; + my $count = 0; + foreach my $word (@words) { + my $reversed = reverse $word; + $count++ if exists $word_set{$reversed}; + } + return int($count / 2); +} + +# Tests +use Test::More; +is(max_pairs("ab", "de", "ed", "bc"), 1); +is(max_pairs("aa", "ba", "cd", "ed"), 0); +is(max_pairs("uv", "qp", "st", "vu", "mn", "pq"), 2); +done_testing(); diff --git a/challenge-256/lubos-kolouch/perl/ch-2.pl b/challenge-256/lubos-kolouch/perl/ch-2.pl new file mode 100644 index 0000000000..0b44e7f088 --- /dev/null +++ b/challenge-256/lubos-kolouch/perl/ch-2.pl @@ -0,0 +1,20 @@ +use strict; +use warnings; + +sub merge_strings { + my ($str1, $str2) = @_; + my $length = length($str1) < length($str2) ? length($str1) : length($str2); + my $merged = ''; + for my $i (0 .. $length - 1) { + $merged .= substr($str1, $i, 1) . substr($str2, $i, 1); + } + $merged .= length($str1) > $length ? substr($str1, $length) : substr($str2, $length); + return $merged; +} + +# Tests +use Test::More; +is(merge_strings("abcd", "1234"), "a1b2c3d4"); +is(merge_strings("abc", "12345"), "a1b2c345"); +is(merge_strings("abcde", "123"), "a1b2c3de"); +done_testing(); diff --git a/challenge-256/lubos-kolouch/python/ch-1.py b/challenge-256/lubos-kolouch/python/ch-1.py new file mode 100644 index 0000000000..2ab63d32bc --- /dev/null +++ b/challenge-256/lubos-kolouch/python/ch-1.py @@ -0,0 +1,13 @@ +from typing import List + + +def max_pairs(words: list[str]) -> int: + word_set = set(words) + count = sum(1 for word in words if word[::-1] in word_set) + return count // 2 + + +# Tests +assert max_pairs(["ab", "de", "ed", "bc"]) == 1 +assert max_pairs(["aa", "ba", "cd", "ed"]) == 0 +assert max_pairs(["uv", "qp", "st", "vu", "mn", "pq"]) == 2 diff --git a/challenge-256/lubos-kolouch/python/ch-2.py b/challenge-256/lubos-kolouch/python/ch-2.py new file mode 100644 index 0000000000..d0de48c5f9 --- /dev/null +++ b/challenge-256/lubos-kolouch/python/ch-2.py @@ -0,0 +1,10 @@ +def merge_strings(str1: str, str2: str) -> str: + merged = "".join(a + b for a, b in zip(str1, str2)) + longer_part = str1[len(str2) :] if len(str1) > len(str2) else str2[len(str1) :] + return merged + longer_part + + +# Tests +assert merge_strings("abcd", "1234") == "a1b2c3d4" +assert merge_strings("abc", "12345") == "a1b2c345" +assert merge_strings("abcde", "123") == "a1b2c3de" diff --git a/challenge-256/lubos-kolouch/raku/ch-1.raku b/challenge-256/lubos-kolouch/raku/ch-1.raku new file mode 100644 index 0000000000..5250a263ce --- /dev/null +++ b/challenge-256/lubos-kolouch/raku/ch-1.raku @@ -0,0 +1,12 @@ +sub max-pairs(@words) { + my %word-set = @words.map: { $_ => True }; + my $count = [+] @words.map: { %word-set{.flip}:exists }; + return $count div 2; +} + +# Tests +use Test; +is max-pairs(<ab de ed bc>), 1, 'Test 1'; +is max-pairs(<aa ba cd ed>), 0, 'Test 2'; +is max-pairs(<uv qp st vu mn pq>), 2, 'Test 3'; +done-testing(); diff --git a/challenge-256/lubos-kolouch/raku/ch-2.raku b/challenge-256/lubos-kolouch/raku/ch-2.raku new file mode 100644 index 0000000000..fa8ec3bedc --- /dev/null +++ b/challenge-256/lubos-kolouch/raku/ch-2.raku @@ -0,0 +1,14 @@ +sub merge-strings($str1, $str2) { + my @str1-chars = $str1.comb; + my @str2-chars = $str2.comb; + my $merged = (@str1-chars Z @str2-chars).flat.map(*.join).join; + my $longer-part = $str1.chars > $str2.chars ?? $str1.substr($str2.chars) !! $str2.substr($str1.chars); + return $merged ~ $longer-part; +} + +# Tests +use Test; +is merge-strings("abcd", "1234"), "a1b2c3d4", 'Test 1'; +is merge-strings("abc", "12345"), "a1b2c345", 'Test 2'; +is merge-strings("abcde", "123"), "a1b2c3de", 'Test 3'; +done-testing(); |
