aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBarrOff <58253563+BarrOff@users.noreply.github.com>2024-02-18 23:27:51 +0100
committerBarrOff <58253563+BarrOff@users.noreply.github.com>2024-02-18 23:27:51 +0100
commit2e5d7e209e40612798e63f2456a087b6ffbca3eb (patch)
treecdbc279e16c8fdb54596d839d2d41edb258c7ac9
parent71c25e55bc7d4e6adaaad7659e88853b71009526 (diff)
downloadperlweeklychallenge-club-2e5d7e209e40612798e63f2456a087b6ffbca3eb.tar.gz
perlweeklychallenge-club-2e5d7e209e40612798e63f2456a087b6ffbca3eb.tar.bz2
perlweeklychallenge-club-2e5d7e209e40612798e63f2456a087b6ffbca3eb.zip
feat: add solutions for challenge 256 from BarrOff
-rw-r--r--challenge-256/barroff/julia/ch-1.jl17
-rw-r--r--challenge-256/barroff/nim/ch_1.nim33
-rw-r--r--challenge-256/barroff/perl/ch-1.pl35
-rw-r--r--challenge-256/barroff/raku/ch-1.p625
-rw-r--r--challenge-256/barroff/raku/ch-2.p630
5 files changed, 140 insertions, 0 deletions
diff --git a/challenge-256/barroff/julia/ch-1.jl b/challenge-256/barroff/julia/ch-1.jl
new file mode 100644
index 0000000000..1e65a67532
--- /dev/null
+++ b/challenge-256/barroff/julia/ch-1.jl
@@ -0,0 +1,17 @@
+#!/usr/bin/env julia
+
+using Test: @test, @testset
+
+function maximum_pairs(words::Vector{T})::Int64 where {T<:AbstractString}
+ non_palindromes = filter(x -> x != reverse(x), words)
+ word_set = Set(non_palindromes)
+ reversed_word_set = Set([reverse(s) for s in non_palindromes])
+ length(intersect(word_set, reversed_word_set)) / 2
+end
+
+@testset "maximum pairs" begin
+ @test maximum_pairs(["ab", "de", "ed", "bc"]) == 1
+ @test maximum_pairs(["aa", "ba", "cd", "ed"]) == 0
+ @test maximum_pairs(["uv", "qp", "st", "vu", "mn", "pq"]) == 2
+end
+
diff --git a/challenge-256/barroff/nim/ch_1.nim b/challenge-256/barroff/nim/ch_1.nim
new file mode 100644
index 0000000000..4ea503fb1a
--- /dev/null
+++ b/challenge-256/barroff/nim/ch_1.nim
@@ -0,0 +1,33 @@
+import std/[sugar, unittest]
+
+from std/sequtils import countIt, filter, map
+from std/unicode import reversed
+
+# run tests with following command:
+# nim c -r ch_1.nim
+
+proc maximum_pairs(words: openArray[string]): int =
+ let
+ non_palindromes = filter(words, x => x != reversed(x))
+ reversed_words = map(non_palindromes, x => reversed(x))
+ result = countIt(reversed_words, it in non_palindromes) div 2
+
+
+suite "maximum pairs":
+ test """("ab", "de", "ed", "bc")""":
+ let
+ words = ["ab", "de", "ed", "bc"]
+
+ check(maximum_pairs(words) == 1)
+
+ test """("aa", "ba", "cd", "ed")""":
+ let
+ words = ["aa", "ba", "cd", "ed"]
+
+ check(maximum_pairs(words) == 0)
+
+ test """("uv", "qp", "st", "vu", "mn", "pq")""":
+ let
+ words = ["uv", "qp", "st", "vu", "mn", "pq"]
+
+ check(maximum_pairs(words) == 2)
diff --git a/challenge-256/barroff/perl/ch-1.pl b/challenge-256/barroff/perl/ch-1.pl
new file mode 100644
index 0000000000..22ab89733c
--- /dev/null
+++ b/challenge-256/barroff/perl/ch-1.pl
@@ -0,0 +1,35 @@
+#!/usr/bin/env perl
+
+use v5.38;
+
+sub maximum_pairs (@words) {
+ use List::Util qw/any/;
+ my @non_palindromes = grep { $_ ne reverse $_ } @words;
+ my @reversed_words = map { scalar reverse $_ } @non_palindromes;
+ grep( {
+ my $outer = $_;
+ any { $outer eq $_ } @words
+ } @reversed_words ) / 2;
+}
+
+sub MAIN() {
+ if ( @ARGV > 1 ) {
+
+ #| Run on command line argument
+ say maximum_pairs( @ARGV[ 1 .. -1 ] );
+ }
+ else {
+ #| Run test cases
+ use Test2::V0 qw( is plan );
+ plan 3;
+
+ is maximum_pairs( "ab", "de", "ed", "bc" ), 1,
+ 'works for "ab", "de", "ed", "bc"';
+ is maximum_pairs( "aa", "ba", "cd", "ed" ), 0,
+ 'works for "aa", "ba", "cd", "ed"';
+ is maximum_pairs( "uv", "qp", "st", "vu", "mn", "pq" ), 2,
+ 'works for "uv", "qp", "st", "vu", "mn", "pq"';
+ }
+}
+
+MAIN();
diff --git a/challenge-256/barroff/raku/ch-1.p6 b/challenge-256/barroff/raku/ch-1.p6
new file mode 100644
index 0000000000..f407eedf0a
--- /dev/null
+++ b/challenge-256/barroff/raku/ch-1.p6
@@ -0,0 +1,25 @@
+#!/usr/bin/env raku
+
+use v6.d;
+
+sub maximum-pairs(@words --> Int:D) {
+ grep({ $_[0] eq $_[1].flip }, combinations(@words, 2)).elems;
+}
+
+#| Run test cases
+multi sub MAIN('test') {
+ use Test;
+ plan 3;
+
+ is maximum-pairs(["ab", "de", "ed", "bc"]), 1,
+ 'works for ("ab", "de", "ed", "bc")';
+ is maximum-pairs(["aa", "ba", "cd", "ed"]), 0,
+ 'works for ("aa", "ba", "cd", "ed")';
+ is maximum-pairs(["uv", "qp", "st", "vu", "mn", "pq"]), 2,
+ 'works for ("uv", "qp", "st", "vu", "mn", "pq")';
+}
+
+#| Take user provided word like aba
+multi sub MAIN(@*words) {
+ say maximum-pairs(@*words);
+}
diff --git a/challenge-256/barroff/raku/ch-2.p6 b/challenge-256/barroff/raku/ch-2.p6
new file mode 100644
index 0000000000..4208be6857
--- /dev/null
+++ b/challenge-256/barroff/raku/ch-2.p6
@@ -0,0 +1,30 @@
+#!/usr/bin/env raku
+
+use v6.d;
+
+sub merge-strings(Str:D $str1, Str:D $str2 --> Str:D) {
+ my Int:D $c1 = $str1.chars;
+ my Int:D $c2 = $str2.chars;
+ my @characters1 = $str1.comb;
+ my @characters2 = $str2.comb;
+ map(
+ { ($_ ≥ $c1 ?? "" !! @characters1[$_]) ~
+ ($_ ≥ $c2 ?? "" !! @characters2[$_])
+ }, 0..max($c1, $c2) - 1
+ ).join("");
+}
+
+#| Run test cases
+multi sub MAIN('test') {
+ use Test;
+ plan 3;
+
+ is merge-strings("abcd", "1234"), "a1b2c3d4", 'works for ("abcd", "1234")';
+ is merge-strings("abc", "12345"), "a1b2c345", 'works for ("abc", "12345")';
+ is merge-strings("abcde", "123"), "a1b2c3de", 'works for ("abcd𝑒", "123")';
+}
+
+#| Take user provided words like aba 1234
+multi sub MAIN(Str:D $str1, Str:D $str2) {
+ say merge-strings($str1, $str2);
+}