aboutsummaryrefslogtreecommitdiff
path: root/challenge-082
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2020-10-13 20:32:31 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2020-10-13 20:32:31 +0100
commit5138746d33e905dcd074919a6f78a5620f67eb5b (patch)
tree860e7832d43d81f467aa0828ad336609712219e2 /challenge-082
parent6fc0b0a2963f201c020bc8c82e9890b3280bc3d9 (diff)
downloadperlweeklychallenge-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.cpp37
-rw-r--r--challenge-082/ulrich-rieke/haskell/ch-1.hs10
-rw-r--r--challenge-082/ulrich-rieke/haskell/ch-2.hs29
-rw-r--r--challenge-082/ulrich-rieke/perl/ch-1.pl13
-rw-r--r--challenge-082/ulrich-rieke/perl/ch-2.pl44
-rw-r--r--challenge-082/ulrich-rieke/raku/ch-1.raku12
-rw-r--r--challenge-082/ulrich-rieke/raku/ch-2.raku30
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 ;
+ }
+}