diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2024-02-19 01:06:22 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-19 01:06:22 +0000 |
| commit | 770ef6e303508532ca1155aecff86a6a46072bd7 (patch) | |
| tree | cdbc279e16c8fdb54596d839d2d41edb258c7ac9 | |
| parent | 71c25e55bc7d4e6adaaad7659e88853b71009526 (diff) | |
| parent | 2e5d7e209e40612798e63f2456a087b6ffbca3eb (diff) | |
| download | perlweeklychallenge-club-770ef6e303508532ca1155aecff86a6a46072bd7.tar.gz perlweeklychallenge-club-770ef6e303508532ca1155aecff86a6a46072bd7.tar.bz2 perlweeklychallenge-club-770ef6e303508532ca1155aecff86a6a46072bd7.zip | |
Merge pull request #9602 from BarrOff/barroff-256
feat: add solutions for challenge 256 from BarrOff
| -rw-r--r-- | challenge-256/barroff/julia/ch-1.jl | 17 | ||||
| -rw-r--r-- | challenge-256/barroff/nim/ch_1.nim | 33 | ||||
| -rw-r--r-- | challenge-256/barroff/perl/ch-1.pl | 35 | ||||
| -rw-r--r-- | challenge-256/barroff/raku/ch-1.p6 | 25 | ||||
| -rw-r--r-- | challenge-256/barroff/raku/ch-2.p6 | 30 |
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); +} |
