aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2024-02-14 12:40:41 +0000
committerGitHub <noreply@github.com>2024-02-14 12:40:41 +0000
commitf6344d4f0ad5baf30720a68c5d375f1df68bbac7 (patch)
treeb2b35d67fac483cae998dab4a701b6051e7cbcd1
parent0eea0ad3c68531bab8e840b94d3ab2dfb02f1683 (diff)
parent692bf389b545d4451cf76bb78775176229d312d1 (diff)
downloadperlweeklychallenge-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.pl20
-rw-r--r--challenge-256/lubos-kolouch/perl/ch-2.pl20
-rw-r--r--challenge-256/lubos-kolouch/python/ch-1.py13
-rw-r--r--challenge-256/lubos-kolouch/python/ch-2.py10
-rw-r--r--challenge-256/lubos-kolouch/raku/ch-1.raku12
-rw-r--r--challenge-256/lubos-kolouch/raku/ch-2.raku14
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();