diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-10-13 20:32:31 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-10-13 20:32:31 +0100 |
| commit | 5138746d33e905dcd074919a6f78a5620f67eb5b (patch) | |
| tree | 860e7832d43d81f467aa0828ad336609712219e2 /challenge-082 | |
| parent | 6fc0b0a2963f201c020bc8c82e9890b3280bc3d9 (diff) | |
| download | perlweeklychallenge-club-5138746d33e905dcd074919a6f78a5620f67eb5b.tar.gz perlweeklychallenge-club-5138746d33e905dcd074919a6f78a5620f67eb5b.tar.bz2 perlweeklychallenge-club-5138746d33e905dcd074919a6f78a5620f67eb5b.zip | |
- Added solutions by Ulrich Rieke.
Diffstat (limited to 'challenge-082')
| -rw-r--r-- | challenge-082/ulrich-rieke/cpp/ch-1.cpp | 37 | ||||
| -rw-r--r-- | challenge-082/ulrich-rieke/haskell/ch-1.hs | 10 | ||||
| -rw-r--r-- | challenge-082/ulrich-rieke/haskell/ch-2.hs | 29 | ||||
| -rw-r--r-- | challenge-082/ulrich-rieke/perl/ch-1.pl | 13 | ||||
| -rw-r--r-- | challenge-082/ulrich-rieke/perl/ch-2.pl | 44 | ||||
| -rw-r--r-- | challenge-082/ulrich-rieke/raku/ch-1.raku | 12 | ||||
| -rw-r--r-- | challenge-082/ulrich-rieke/raku/ch-2.raku | 30 |
7 files changed, 175 insertions, 0 deletions
diff --git a/challenge-082/ulrich-rieke/cpp/ch-1.cpp b/challenge-082/ulrich-rieke/cpp/ch-1.cpp new file mode 100644 index 0000000000..9543fd6e47 --- /dev/null +++ b/challenge-082/ulrich-rieke/cpp/ch-1.cpp @@ -0,0 +1,37 @@ +#include <vector> +#include <iostream> +#include <iterator> +#include <algorithm> +#include <cstdlib> + +std::vector<int> findDivisors( int n ) { + std::vector<int> divisors ; + for ( int i = 1 ; i < n + 1 ; i++ ) { + if ( n % i == 0 ) + divisors.push_back( i ) ; + } + return divisors ; +} + +int main( int argc , char * argv[ ] ) { + if ( argc != 3 ) { + std::cerr << "2 arguments required!\n" ; + return 1 ; + } + int m = std::atoi( argv[ 1 ] ) ; + int n = std::atoi( argv[ 2 ] ) ; + std::vector<int> commonFactors ; + std::vector<int> divisorsM = findDivisors( m ) ; + std::vector<int> divisorsN = findDivisors( n ) ; + //divisorsM and divisorsN are already sorted, so the next algorithm's + //precondition of sorted containers as arguments is fulfilled + std::set_intersection( divisorsM.begin( ) , divisorsM.end( ) , + divisorsN.begin( ) , divisorsN.end( ) , + std::back_inserter( commonFactors ) ) ; + std::cout << "[ " ; + for ( int i : commonFactors ) { + std::cout << i << ' ' ; + } + std::cout << "]\n" ; + return 0 ; +} diff --git a/challenge-082/ulrich-rieke/haskell/ch-1.hs b/challenge-082/ulrich-rieke/haskell/ch-1.hs new file mode 100644 index 0000000000..4535275fcc --- /dev/null +++ b/challenge-082/ulrich-rieke/haskell/ch-1.hs @@ -0,0 +1,10 @@ +module Challenge082 + where +import qualified Data.Set as S + +divisors :: Int -> [Int] +divisors n = [ d | d <- [1..n] , mod n d == 0 ] + +solution ::Int -> Int -> [Int] +solution a b = S.toList ( (S.fromList $ divisors a) `S.intersection` + (S.fromList $ divisors b ) ) diff --git a/challenge-082/ulrich-rieke/haskell/ch-2.hs b/challenge-082/ulrich-rieke/haskell/ch-2.hs new file mode 100644 index 0000000000..ca2a6c6d69 --- /dev/null +++ b/challenge-082/ulrich-rieke/haskell/ch-2.hs @@ -0,0 +1,29 @@ +module Challenge082_2 + where + +myCondition :: String -> String -> String -> Bool +myCondition a b c + |length a == length b = (foldl1 ( ++ ) (zipWith glue a b) == c) || + (foldl1 ( ++ ) (zipWith glue b a) == c) + |length a /= length b = ((foldl1 ( ++ ) $ zipWith glue smaller ( take sl greater )) + ++ (drop sl greater)) == c || ((foldl1 ( ++ ) $ zipWith glue ( take sl greater ) + smaller) ++ (drop sl greater )) == c + where + greater :: String + greater + |length a > length b = a + |otherwise = b + smaller :: String + smaller + |length a < length b = a + |otherwise = b + sl :: Int + sl = length smaller + +solution :: String -> String -> String -> Int +solution a b c + |myCondition a b c = 1 + |otherwise = 0 + +glue :: Char -> Char -> String +glue a b = [a] ++ [b] diff --git a/challenge-082/ulrich-rieke/perl/ch-1.pl b/challenge-082/ulrich-rieke/perl/ch-1.pl new file mode 100644 index 0000000000..ca9f9edb1e --- /dev/null +++ b/challenge-082/ulrich-rieke/perl/ch-1.pl @@ -0,0 +1,13 @@ +#!/usr/bin/perl ; +use strict ; +use warnings ; +use feature 'say' ; + +my ($M, $N) = @ARGV ; +my %M ; +my %N ; +map { $M{$_}++ if $M % $_ == 0 } (1..$M) ; +map { $N{$_}++ if $N % $_ == 0 } (1..$N) ; +my @common = grep { exists $M{$_} } keys %N ; +my @sorted = sort { $a <=> $b } @common ; +say "@sorted" ; diff --git a/challenge-082/ulrich-rieke/perl/ch-2.pl b/challenge-082/ulrich-rieke/perl/ch-2.pl new file mode 100644 index 0000000000..c4c0acc71a --- /dev/null +++ b/challenge-082/ulrich-rieke/perl/ch-2.pl @@ -0,0 +1,44 @@ +#!/usr/bin/perl ; +use strict ; +use warnings ; +use feature 'say' ; +use List::MoreUtils qw( mesh ) ; + +sub findInterleaved { #if two strings have unequal lengths + my ($greater , $smaller ) = @_ ; + my ( $interleavedA , $interleavedB ) ; + my $lenA = length $greater ; + my $lenB = length $smaller ; + my $paired = substr( $greater , 0 , $lenB) ; + my @A = split // , $paired ; + my @B = split // , $smaller ; + $interleavedA = join( '' , mesh( @A, @B) ) . substr( $greater , + $lenB , $lenA - $lenB) ; + $interleavedB = join( '' , mesh( @B , @A) ) . substr( $greater , + $lenB , $lenA - $lenB) ; + return ($interleavedA , $interleavedB) ; +} + +my ($A , $B , $C) = @ARGV ; +my $interleavedA ; +my $interleavedB ; +my $lenA = length $A ; +my $lenB = length $B ; +my @A = split // , $A ; +my @B = split // , $B ; +if ( $lenA == $lenB ) { + $interleavedA = join( '' , mesh( @A, @B) ) ; + $interleavedB = join( '' , mesh( @B, @A) ) ; +} +if ( $lenA > $lenB ) { + ($interleavedA , $interleavedB) = findInterleaved( $A , $B ) ; +} +if ( $lenB > $lenA ) { + ($interleavedA , $interleavedB) = findInterleaved($B, $A ) ; +} +if ( $interleavedA eq $C or $interleavedB eq $C ) { + say 1 ; +} +else { + say 0 ; +} diff --git a/challenge-082/ulrich-rieke/raku/ch-1.raku b/challenge-082/ulrich-rieke/raku/ch-1.raku new file mode 100644 index 0000000000..2f289073a5 --- /dev/null +++ b/challenge-082/ulrich-rieke/raku/ch-1.raku @@ -0,0 +1,12 @@ +use v6 ; + +sub findDivisors( Int $n ) { + my @divisors = (1 .. $n).grep( { $n %% $_ } ) ; + return @divisors ; +} + +sub MAIN( Int $M, Int $N ) { + my @divisorsM = findDivisors( $M ) ; + my @divisorsN = findDivisors( $N ) ; + say "{(@divisorsM.Set (&) @divisorsN.Set)}" ; +} diff --git a/challenge-082/ulrich-rieke/raku/ch-2.raku b/challenge-082/ulrich-rieke/raku/ch-2.raku new file mode 100644 index 0000000000..e6074a7587 --- /dev/null +++ b/challenge-082/ulrich-rieke/raku/ch-2.raku @@ -0,0 +1,30 @@ +use v6 ; + +sub MAIN( Str $A , Str $B , Str $C) { + my $lenA = $A.chars ; + my $lenB = $B.chars ; + my $interleavedA ; + my $interleavedB ; + if ( $lenA == $lenB ) { + $interleavedA = ($A.comb Z~ $B.comb).join ; + $interleavedB = ($B.comb Z~ $A.comb).join ; + } + if ( $lenA > $lenB ) { + $interleavedA = ($A.substr(0, $lenB) Z~ $B.comb).join ~ + $A.substr($lenB, $lenA - $lenB) ; + $interleavedB = ($B.comb Z~ $A.substr(0, $lenB) ).join ~ + $A.substr($lenB, $lenA - $lenB) ; + } + if ( $lenB > $lenA ) { + $interleavedA = ($B.substr(0, $lenA) Z~ $A.comb).join ~ + $A.substr($lenA, $lenB - $lenA) ; + $interleavedB = ($A.comb Z~ $B.substr(0, $lenA) ).join ~ + $A.substr($lenA, $lenB - $lenA) ; + } + if ( $interleavedA eq $C or $interleavedB eq $C ) { + say 1 ; + } + else { + say 0 ; + } +} |
