aboutsummaryrefslogtreecommitdiff
path: root/challenge-141
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2021-12-01 20:07:02 +0000
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2021-12-01 20:07:02 +0000
commit801c6566b16efa1e2c5b1f7daf54b532a222a53a (patch)
tree55e7e9d7f0398ca10b9e36e75a0e242ebd42999c /challenge-141
parent418cb1a5ca5436a2d16410d7752f9eaf96180fa3 (diff)
downloadperlweeklychallenge-club-801c6566b16efa1e2c5b1f7daf54b532a222a53a.tar.gz
perlweeklychallenge-club-801c6566b16efa1e2c5b1f7daf54b532a222a53a.tar.bz2
perlweeklychallenge-club-801c6566b16efa1e2c5b1f7daf54b532a222a53a.zip
- Added solutions by Ulrich Rieke.
Diffstat (limited to 'challenge-141')
-rw-r--r--challenge-141/ulrich-rieke/cpp/ch-1.cpp26
-rw-r--r--challenge-141/ulrich-rieke/haskell/ch-1.hs8
-rw-r--r--challenge-141/ulrich-rieke/haskell/ch-2.hs11
-rw-r--r--challenge-141/ulrich-rieke/perl/ch-1.pl20
-rw-r--r--challenge-141/ulrich-rieke/perl/ch-2.pl20
-rw-r--r--challenge-141/ulrich-rieke/raku/ch-1.raku16
-rw-r--r--challenge-141/ulrich-rieke/raku/ch-2.raku14
7 files changed, 115 insertions, 0 deletions
diff --git a/challenge-141/ulrich-rieke/cpp/ch-1.cpp b/challenge-141/ulrich-rieke/cpp/ch-1.cpp
new file mode 100644
index 0000000000..49cf5eb7e0
--- /dev/null
+++ b/challenge-141/ulrich-rieke/cpp/ch-1.cpp
@@ -0,0 +1,26 @@
+#include <vector>
+#include <iostream>
+
+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( ) {
+ std::vector<int> wanted ;
+ int current = 1 ;
+ while ( wanted.size( ) < 10 ) {
+ std::vector<int> divisors ( findDivisors( current ) ) ;
+ if ( divisors.size( ) == 8 )
+ wanted.push_back( current ) ;
+ current++ ;
+ }
+ for ( int n : wanted )
+ std::cout << n << " " ;
+ std::cout << std::endl ;
+ return 0 ;
+}
diff --git a/challenge-141/ulrich-rieke/haskell/ch-1.hs b/challenge-141/ulrich-rieke/haskell/ch-1.hs
new file mode 100644
index 0000000000..46e9417903
--- /dev/null
+++ b/challenge-141/ulrich-rieke/haskell/ch-1.hs
@@ -0,0 +1,8 @@
+module Challenge141
+ where
+
+findDivisors :: Int -> [ Int ]
+findDivisors n = filter (\i -> mod n i == 0 ) [1 .. n]
+
+solution :: [Int]
+solution = take 10 $ filter ( ( == 8 ) . length . findDivisors ) [1 .. ]
diff --git a/challenge-141/ulrich-rieke/haskell/ch-2.hs b/challenge-141/ulrich-rieke/haskell/ch-2.hs
new file mode 100644
index 0000000000..f0e17dd10e
--- /dev/null
+++ b/challenge-141/ulrich-rieke/haskell/ch-2.hs
@@ -0,0 +1,11 @@
+module Challenge141_2
+ where
+import Data.List ( subsequences )
+import Data.Char ( digitToInt )
+
+solution :: Int -> Int -> Int
+solution m n = length $ filter (\i -> mod i n == 0 ) $ map convertToNumber
+$ filter ( not . null ) $ init $ subsequences $ map digitToInt $ show m
+where
+ convertToNumber :: [Int] -> Int
+ convertToNumber list = read $ foldl1 (++) $ map show list
diff --git a/challenge-141/ulrich-rieke/perl/ch-1.pl b/challenge-141/ulrich-rieke/perl/ch-1.pl
new file mode 100644
index 0000000000..7dc2da371d
--- /dev/null
+++ b/challenge-141/ulrich-rieke/perl/ch-1.pl
@@ -0,0 +1,20 @@
+#!/usr/bin/perl ;
+use strict ;
+use warnings ;
+use feature 'say' ;
+
+sub findDivisors {
+ my $number = shift ;
+ return grep { $number % $_ == 0 } (1 .. $number) ;
+}
+
+my @wanted ;
+my $current = 1 ;
+while ( scalar( @wanted ) < 10 ) {
+ my @divisors = findDivisors( $current ) ;
+ if ( scalar( @divisors ) == 8 ) {
+ push @wanted , $current ;
+ }
+ $current++ ;
+}
+say join( ', ' , @wanted ) ;
diff --git a/challenge-141/ulrich-rieke/perl/ch-2.pl b/challenge-141/ulrich-rieke/perl/ch-2.pl
new file mode 100644
index 0000000000..6f8a33be3e
--- /dev/null
+++ b/challenge-141/ulrich-rieke/perl/ch-2.pl
@@ -0,0 +1,20 @@
+#!/usr/bin/perl ;
+use strict ;
+use warnings ;
+use feature 'say' ;
+use Algorithm::Combinatorics qw ( combinations ) ;
+
+my $m = $ARGV[ 0 ] ;
+my $n = $ARGV[ 1 ] ;
+my @numbers = split( // , $m ) ;
+my @digits = @numbers ;
+my $len = scalar( @numbers ) ;
+if ( $len > 2 ) {
+ for my $l ( 2 .. $len - 1 ) {
+ my $iter = combinations( \@digits , $l ) ;
+ while ( my $c = $iter->next ) {
+ push @numbers , join( '' , @$c ) ;
+ }
+ }
+}
+say ( scalar ( grep { $_ % $n == 0 } @numbers )) ;
diff --git a/challenge-141/ulrich-rieke/raku/ch-1.raku b/challenge-141/ulrich-rieke/raku/ch-1.raku
new file mode 100644
index 0000000000..6836745341
--- /dev/null
+++ b/challenge-141/ulrich-rieke/raku/ch-1.raku
@@ -0,0 +1,16 @@
+use v6 ;
+
+sub findDivisors( Int $n ) {
+ return ( 1 .. $n).grep( { $n %% $_ } ) ;
+}
+
+my @wanted ;
+my Int $current = 1 ;
+while ( @wanted.elems < 10 ) {
+ my @divisors = findDivisors( $current ) ;
+ if ( @divisors.elems == 8 ) {
+ @wanted.push( $current ) ;
+ }
+ $current++ ;
+}
+say @wanted ;
diff --git a/challenge-141/ulrich-rieke/raku/ch-2.raku b/challenge-141/ulrich-rieke/raku/ch-2.raku
new file mode 100644
index 0000000000..b3735420f8
--- /dev/null
+++ b/challenge-141/ulrich-rieke/raku/ch-2.raku
@@ -0,0 +1,14 @@
+use v6 ;
+
+sub MAIN( Int $m is copy , Int $n is copy ) {
+ my @numbers = (~$m).comb.map( {.Int} ) ;
+ my @digits = @numbers ;
+ my $len = @numbers.elems ;
+ if ( $len > 2 ) {
+ for ( 2 .. $len - 1 ) -> $l {
+ my @combis = @digits.combinations( $l ).map( {.join.Int} ) ;
+ @combis.map( { @numbers.push( $_ ) } ) ;
+ }
+ }
+ say @numbers.grep( { $_ %% $n } ).elems ;
+}