diff options
| -rw-r--r-- | challenge-136/jaldhar-h-vyas/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-136/jaldhar-h-vyas/perl/ch-1.pl | 20 | ||||
| -rwxr-xr-x | challenge-136/jaldhar-h-vyas/perl/ch-2.pl | 72 | ||||
| -rwxr-xr-x | challenge-136/jaldhar-h-vyas/raku/ch-1.sh | 3 | ||||
| -rwxr-xr-x | challenge-136/jaldhar-h-vyas/raku/ch-2.raku | 27 |
5 files changed, 123 insertions, 0 deletions
diff --git a/challenge-136/jaldhar-h-vyas/blog.txt b/challenge-136/jaldhar-h-vyas/blog.txt new file mode 100644 index 0000000000..f12ed5b72f --- /dev/null +++ b/challenge-136/jaldhar-h-vyas/blog.txt @@ -0,0 +1 @@ +https://www.braincells.com/perl/2021/10/perl_weekly_challenge_week_136.html diff --git a/challenge-136/jaldhar-h-vyas/perl/ch-1.pl b/challenge-136/jaldhar-h-vyas/perl/ch-1.pl new file mode 100755 index 0000000000..654c685049 --- /dev/null +++ b/challenge-136/jaldhar-h-vyas/perl/ch-1.pl @@ -0,0 +1,20 @@ +#!/usr/bin/perl +use 5.020; +use warnings; + +sub log2 { + my ($n) = @_; + + return log($n) / log(2); +} + +sub gcd { + my ($a, $b) = @_; + + return 0 == $b ? $a : gcd($b, $a % $b); +} + +my ($m, $n) = @ARGV; + +my $x = log2(gcd($m, $n)); +say $x == int($x) ? 1 : 0; diff --git a/challenge-136/jaldhar-h-vyas/perl/ch-2.pl b/challenge-136/jaldhar-h-vyas/perl/ch-2.pl new file mode 100755 index 0000000000..3a974003ce --- /dev/null +++ b/challenge-136/jaldhar-h-vyas/perl/ch-2.pl @@ -0,0 +1,72 @@ +#!/usr/bin/perl +use 5.020; +use warnings; + +sub combinations { + my @list = @{$_[0]}; + my $length = $_[1]; + + if ($length <= 1) { + return map [$_], @list; + } + + my @combos; + + for (my $i = 0; $i + $length <= scalar @list; $i++) { + my $val = $list[$i]; + my @rest = @list[$i + 1 .. $#list]; + for my $c (combinations(\@rest, $length - 1)) { + push @combos, [$val, @{$c}] ; + } + } + + return @combos; +} + +sub fib { + my ($n) = @_; + + my $a = 1; + my $b = 1; + my @fib = ($b); + + while (my $c = $a + $b) { + if ($c <= $n) { + push @fib, $c; + } else { + last; + } + $a = $b; + $b = $c; + } + + return @fib; +} + +sub sum { + my ($arr) = @_; + my $total = 0; + + for my $elem (@{$arr}) { + $total += $elem; + } + + return $total; +} + +my ($n) = @ARGV; +$n // die "Need an integer.\n"; + +my $count = 0; + +my @fibs = fib($n); + +for my $len (1 .. scalar @fibs) { + for my $combo (combinations(\@fibs, $len)) { + if (sum($combo) == $n) { + $count++; + } + } +} + +say $count;
\ No newline at end of file diff --git a/challenge-136/jaldhar-h-vyas/raku/ch-1.sh b/challenge-136/jaldhar-h-vyas/raku/ch-1.sh new file mode 100755 index 0000000000..c387f99d43 --- /dev/null +++ b/challenge-136/jaldhar-h-vyas/raku/ch-1.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +raku -e 'say log2(@*ARGS[0] gcd @*ARGS[1]) % 1 == 0 ?? 1 !! 0' $@ diff --git a/challenge-136/jaldhar-h-vyas/raku/ch-2.raku b/challenge-136/jaldhar-h-vyas/raku/ch-2.raku new file mode 100755 index 0000000000..17b98fb7b1 --- /dev/null +++ b/challenge-136/jaldhar-h-vyas/raku/ch-2.raku @@ -0,0 +1,27 @@ +#!/usr/bin/raku + +sub fib(Int $n) { + return (gather { + for (1, 1, -> $a, $b { $a + $b } ... *) -> $i { + if ($i <= $n) { + take $i; + } else { + last; + } + } + })[1 .. *] +} + +sub MAIN( + Int $n #= an integer +) { + my %sequences; + + for fib($n).combinations -> @fib { + if ([+] @fib) == $n { + %sequences{@fib.join(q{, })}++; + } + } + + say %sequences.elems; +}
\ No newline at end of file |
