aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-136/jaldhar-h-vyas/blog.txt1
-rwxr-xr-xchallenge-136/jaldhar-h-vyas/perl/ch-1.pl20
-rwxr-xr-xchallenge-136/jaldhar-h-vyas/perl/ch-2.pl72
-rwxr-xr-xchallenge-136/jaldhar-h-vyas/raku/ch-1.sh3
-rwxr-xr-xchallenge-136/jaldhar-h-vyas/raku/ch-2.raku27
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