diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2021-10-26 04:59:10 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2021-10-26 04:59:10 +0100 |
| commit | 489add6ac10297e7ba88002c37ea5ccfe2def977 (patch) | |
| tree | 0ba3abf84aeed6bdf09b1d53fb4225d6ecea0305 | |
| parent | 507fd0912e870f496ea2826cb21ab694c3ab0166 (diff) | |
| download | perlweeklychallenge-club-489add6ac10297e7ba88002c37ea5ccfe2def977.tar.gz perlweeklychallenge-club-489add6ac10297e7ba88002c37ea5ccfe2def977.tar.bz2 perlweeklychallenge-club-489add6ac10297e7ba88002c37ea5ccfe2def977.zip | |
- Added solutions by Ulrich Rieke.
| -rw-r--r-- | challenge-136/ulrich-rieke/cpp/ch-1.cpp | 20 | ||||
| -rw-r--r-- | challenge-136/ulrich-rieke/haskell/ch-1.hs | 13 | ||||
| -rw-r--r-- | challenge-136/ulrich-rieke/haskell/ch-2.hs | 26 | ||||
| -rw-r--r-- | challenge-136/ulrich-rieke/perl/ch-1.pl | 38 | ||||
| -rw-r--r-- | challenge-136/ulrich-rieke/perl/ch-2.pl | 33 | ||||
| -rw-r--r-- | challenge-136/ulrich-rieke/raku/ch-1.raku | 10 | ||||
| -rw-r--r-- | challenge-136/ulrich-rieke/raku/ch-2.raku | 23 |
7 files changed, 163 insertions, 0 deletions
diff --git a/challenge-136/ulrich-rieke/cpp/ch-1.cpp b/challenge-136/ulrich-rieke/cpp/ch-1.cpp new file mode 100644 index 0000000000..51c0f4359b --- /dev/null +++ b/challenge-136/ulrich-rieke/cpp/ch-1.cpp @@ -0,0 +1,20 @@ +#include <iostream> +#include <cmath> +#include <cstdlib> +#include <numeric> + +double log2( int n ) { + return std::log( static_cast<double>( n )) / std::log( 2 ) ; +} + +int main( int argc , char * argv[] ) { + int m = std::atoi( argv[ 1 ] ) ; + int n = std::atoi( argv[ 2 ] ) ; + int commonDiv = std::gcd( m , n ) ; + double theLog = log2( commonDiv ) ; + if ( std::floor( theLog ) == theLog ) + std::cout << 1 << std::endl ; + else + std::cout << 0 << std::endl ; + return 0 ; +} diff --git a/challenge-136/ulrich-rieke/haskell/ch-1.hs b/challenge-136/ulrich-rieke/haskell/ch-1.hs new file mode 100644 index 0000000000..166fcc2fb6 --- /dev/null +++ b/challenge-136/ulrich-rieke/haskell/ch-1.hs @@ -0,0 +1,13 @@ +module Challenge136 + where + +log2 :: Int -> Float +log2 n = log (fromIntegral n) / log 2.0 + +solution :: Int -> Int -> Int +solution m n + |(realToFrac $ floor theNum) == theNum = 1 + |otherwise = 0 + where + theNum :: Float + theNum = log2 $ gcd m n diff --git a/challenge-136/ulrich-rieke/haskell/ch-2.hs b/challenge-136/ulrich-rieke/haskell/ch-2.hs new file mode 100644 index 0000000000..e33449ca5b --- /dev/null +++ b/challenge-136/ulrich-rieke/haskell/ch-2.hs @@ -0,0 +1,26 @@ +module Challenge136_2 + where +import Data.List ( subsequences ) + +fibonacci :: Int -> Int +fibonacci 0 = 0 +fibonacci 1 = 1 +fibonacci n = fibonacci ( n - 2 ) + fibonacci ( n - 1 ) + +findFibos :: Int -> [Int] +findFibos n = drop 2 $ map fibonacci [0..n]--we drop the first 2, see the task + +solution :: Int -> Int +solution n + |elem n theFibos = 1 + ( length possibleCombis ) + |otherwise = length possibleCombis + where + theFibos :: [Int] + theFibos = takeWhile ( <= n ) $ findFibos n + theSequences :: [[Int]] + theSequences = subsequences theFibos + allCombis :: [[Int]] + allCombis = foldl1 (++) $ map (\i -> filter ( (== i ) . length ) + theSequences ) [2 .. length theFibos] + possibleCombis :: [[Int]] + possibleCombis = filter ((== n ) . sum ) allCombis diff --git a/challenge-136/ulrich-rieke/perl/ch-1.pl b/challenge-136/ulrich-rieke/perl/ch-1.pl new file mode 100644 index 0000000000..a2374474db --- /dev/null +++ b/challenge-136/ulrich-rieke/perl/ch-1.pl @@ -0,0 +1,38 @@ +#!/usr/bin/perl ; +use strict ; +use warnings ; +use feature 'say' ; +use List::Util qw( max ) ; +use POSIX ; + +sub log2 { + my $number = shift ; + return log( $number ) / log( 2 ) ; +} + +sub gcd { + my $firstNumber = shift ; + my $secondNumber = shift ; + my %divisors ; + for my $i ( 1 .. $firstNumber ) { + if ( $firstNumber % $i == 0 ) { + $divisors{ $i }++ ; + } + } + for my $i ( 1 .. $secondNumber ) { + if ( $secondNumber % $i == 0 ) { + $divisors{ $i }++ ; + } + } + return max ( grep { $divisors{ $_ } == 2 } keys %divisors ) ; +} + +my $m = $ARGV[ 0 ] ; +my $n = $ARGV[ 1 ] ; +my $theLog = log2( gcd( $m , $n ) ) ; +if ( floor( $theLog ) == $theLog ) { + say 1 ; +} +else { + say 0 ; +} diff --git a/challenge-136/ulrich-rieke/perl/ch-2.pl b/challenge-136/ulrich-rieke/perl/ch-2.pl new file mode 100644 index 0000000000..5c181dc479 --- /dev/null +++ b/challenge-136/ulrich-rieke/perl/ch-2.pl @@ -0,0 +1,33 @@ +#!/usr/bin/perl ; +use strict ; +use warnings ; +use feature 'say' ; +use Algorithm::Combinatorics qw( combinations ) ; +use List::Util qw ( sum ) ; + +my $n = $ARGV[ 0 ] ; +if ( $n == 1 || $n == 2 ) { + say 1 ; + exit( 0 ) ; +} +else { + my @fibonacci = (1 , 2 ) ; + my %fibonums ; + while ( $fibonacci[ -1 ] + $fibonacci[ -2 ] < $n ) { + push ( @fibonacci , $fibonacci[ -1 ] + $fibonacci[ - 2 ] ) ; + } + map { $fibonums{$_}++ } @fibonacci ; + my $sequencesFound = 0 ; + for my $i ( 2 .. scalar( @fibonacci ) - 1 ) { + my $iter = combinations( \@fibonacci , $i ) ; + while ( my $c = $iter->next ) { + if ( sum( @{$c} ) == $n ) { + $sequencesFound++ ; + } + } + } + if ( exists ( $fibonums{ $n } ) ) { + $sequencesFound++ ; + } + say $sequencesFound ; +} diff --git a/challenge-136/ulrich-rieke/raku/ch-1.raku b/challenge-136/ulrich-rieke/raku/ch-1.raku new file mode 100644 index 0000000000..a80abeb938 --- /dev/null +++ b/challenge-136/ulrich-rieke/raku/ch-1.raku @@ -0,0 +1,10 @@ +use v6 ; + +sub MAIN( Int $m is copy , Int $n is copy ) { + if ( log2( $m gcd $n) %% 1 ) { + say 1 ; + } + else { + say 0 ; + } +} diff --git a/challenge-136/ulrich-rieke/raku/ch-2.raku b/challenge-136/ulrich-rieke/raku/ch-2.raku new file mode 100644 index 0000000000..15d9da1b5a --- /dev/null +++ b/challenge-136/ulrich-rieke/raku/ch-2.raku @@ -0,0 +1,23 @@ +use v6 ; + +sub MAIN( Int $n is copy ) { + my @fibonacci = (1 , 2 ) ; + my $sequencesFound = 0 ; + if ( $n == 1 || $n == 2 ) { + say 1 ; + exit( 0 ) ; + } + else { + repeat { + @fibonacci.push( @fibonacci[* - 1] + @fibonacci[ * - 2] ) ; + } until ( @fibonacci[ * - 1] >= $n ) ; + } + for (2 .. @fibonacci.elems - 1) -> $i { + my @combis = @fibonacci.combinations( $i ) ; + $sequencesFound += @combis.grep( {$_.sum == $n} ) ; + } + if ( $n (elem) @fibonacci.Set ) { + $sequencesFound++ ; #we should add one sequence that contains $n only + } + say $sequencesFound ; +} |
