aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorE. Choroba <choroba@matfyz.cz>2021-10-28 23:12:58 +0200
committerE. Choroba <choroba@matfyz.cz>2021-10-28 23:12:58 +0200
commit2cfffd30bc7a1fcda94fe26672e6453f3d886744 (patch)
treeb2706e4e6e1fb714e8ed2263bc0703cb982149db
parentdc82718186854e495ed16900b1c485d170042a18 (diff)
downloadperlweeklychallenge-club-2cfffd30bc7a1fcda94fe26672e6453f3d886744.tar.gz
perlweeklychallenge-club-2cfffd30bc7a1fcda94fe26672e6453f3d886744.tar.bz2
perlweeklychallenge-club-2cfffd30bc7a1fcda94fe26672e6453f3d886744.zip
Solve 136: Two Friendly & Fibonacci Sequence by E. Choroba
-rwxr-xr-xchallenge-136/e-choroba/perl/ch-1.pl26
-rwxr-xr-xchallenge-136/e-choroba/perl/ch-2.pl82
2 files changed, 108 insertions, 0 deletions
diff --git a/challenge-136/e-choroba/perl/ch-1.pl b/challenge-136/e-choroba/perl/ch-1.pl
new file mode 100755
index 0000000000..04e324c953
--- /dev/null
+++ b/challenge-136/e-choroba/perl/ch-1.pl
@@ -0,0 +1,26 @@
+#! /usr/bin/perl
+use warnings;
+use strict;
+
+sub gcd {
+ my ($m, $n) = @_;
+ while ($m && $n) {
+ ($m, $n) = ($n, $m) if $n < $m;
+ $n -= int($n / $m) * $m;
+ }
+ return $m
+}
+
+sub two_friendly {
+ my ($m, $n) = @_;
+ my $g = gcd($m, $n);
+ my $binary = sprintf '%b', $g;
+ return 1 == $binary =~ tr/1// ? 1 : 0
+}
+
+use Test2::V0;
+plan 3;
+
+is two_friendly(8, 24), 1, 'Example 1';
+is two_friendly(26, 39), 0, 'Example 2';
+is two_friendly(4, 10), 1, 'Example 3';
diff --git a/challenge-136/e-choroba/perl/ch-2.pl b/challenge-136/e-choroba/perl/ch-2.pl
new file mode 100755
index 0000000000..475a906652
--- /dev/null
+++ b/challenge-136/e-choroba/perl/ch-2.pl
@@ -0,0 +1,82 @@
+#! /usr/bin/perl
+use warnings;
+use strict;
+
+use List::Util qw{ sum };
+
+my @F = (1, 2);
+sub fibonacci_sequence {
+ my ($n) = @_;
+ my $count = 0;
+ my $indicator = 1;
+ my $bin = 1;
+ while ($F[ length($bin) - 1 ] <= $n) {
+ push @F, $F[-2] + $F[-1] if @F <= length $bin;
+ my $sum = sum(@F[ grep substr($bin, -$_ - 1, 1),
+ 0 .. length($bin) - 1 ]);
+ ++$count if $sum == $n;
+ ++$indicator;
+ $bin = sprintf '%b', $indicator;
+ }
+ return $count
+}
+
+use Test2::V0;
+plan 52;
+
+is fibonacci_sequence(16), 4, 'Example 1';
+is fibonacci_sequence(9), 2, 'Example 2';
+is fibonacci_sequence(15), 2, 'Example 3';
+
+# Used $n ** 2 instead of $n in the while condition to verify the numbers are
+# correct.
+
+is fibonacci_sequence(17), 2, 'Check 17';
+is fibonacci_sequence(18), 3, 'Check 18';
+is fibonacci_sequence(19), 3, 'Check 19';
+is fibonacci_sequence(20), 1, 'Check 20';
+is fibonacci_sequence(21), 4, 'Check 21';
+is fibonacci_sequence(22), 3, 'Check 22';
+is fibonacci_sequence(23), 3, 'Check 23';
+is fibonacci_sequence(24), 5, 'Check 24';
+is fibonacci_sequence(25), 2, 'Check 25';
+is fibonacci_sequence(26), 4, 'Check 26';
+is fibonacci_sequence(27), 4, 'Check 27';
+is fibonacci_sequence(28), 2, 'Check 28';
+is fibonacci_sequence(29), 5, 'Check 29';
+is fibonacci_sequence(30), 3, 'Check 30';
+is fibonacci_sequence(31), 3, 'Check 31';
+is fibonacci_sequence(32), 4, 'Check 32';
+is fibonacci_sequence(33), 1, 'Check 33';
+is fibonacci_sequence(34), 4, 'Check 34';
+is fibonacci_sequence(35), 4, 'Check 35';
+is fibonacci_sequence(36), 3, 'Check 36';
+is fibonacci_sequence(37), 6, 'Check 37';
+is fibonacci_sequence(38), 3, 'Check 38';
+is fibonacci_sequence(39), 5, 'Check 39';
+is fibonacci_sequence(40), 5, 'Check 40';
+is fibonacci_sequence(41), 2, 'Check 41';
+is fibonacci_sequence(42), 6, 'Check 42';
+is fibonacci_sequence(43), 4, 'Check 43';
+is fibonacci_sequence(44), 4, 'Check 44';
+is fibonacci_sequence(45), 6, 'Check 45';
+is fibonacci_sequence(46), 2, 'Check 46';
+is fibonacci_sequence(47), 5, 'Check 47';
+is fibonacci_sequence(48), 5, 'Check 48';
+is fibonacci_sequence(49), 3, 'Check 49';
+is fibonacci_sequence(50), 6, 'Check 50';
+is fibonacci_sequence(51), 3, 'Check 51';
+is fibonacci_sequence(52), 4, 'Check 52';
+is fibonacci_sequence(53), 4, 'Check 53';
+is fibonacci_sequence(54), 1, 'Check 54';
+is fibonacci_sequence(55), 5, 'Check 55';
+is fibonacci_sequence(56), 4, 'Check 56';
+is fibonacci_sequence(57), 4, 'Check 57';
+is fibonacci_sequence(58), 7, 'Check 58';
+is fibonacci_sequence(59), 3, 'Check 59';
+is fibonacci_sequence(60), 6, 'Check 60';
+is fibonacci_sequence(61), 6, 'Check 61';
+is fibonacci_sequence(62), 3, 'Check 62';
+is fibonacci_sequence(63), 8, 'Check 63';
+is fibonacci_sequence(64), 5, 'Check 64';
+is fibonacci_sequence(65), 5, 'Check 65';