aboutsummaryrefslogtreecommitdiff
path: root/challenge-149
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2022-01-27 19:16:10 +0000
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2022-01-27 19:16:10 +0000
commit9abeab654b54c1b827d65af90628b3014bdad0fb (patch)
tree632e6e46f2847ec89db83d663551ee177a454ee0 /challenge-149
parentd5ee7c5fa4fe77b9ea632d61d68f37800a569312 (diff)
downloadperlweeklychallenge-club-9abeab654b54c1b827d65af90628b3014bdad0fb.tar.gz
perlweeklychallenge-club-9abeab654b54c1b827d65af90628b3014bdad0fb.tar.bz2
perlweeklychallenge-club-9abeab654b54c1b827d65af90628b3014bdad0fb.zip
- Added solutions by Laurent Rosenfeld.
Diffstat (limited to 'challenge-149')
-rw-r--r--challenge-149/laurent-rosenfeld/blog.txt1
-rw-r--r--challenge-149/laurent-rosenfeld/perl/ch-1.pl29
-rw-r--r--challenge-149/laurent-rosenfeld/perl/ch-2.pl32
-rw-r--r--challenge-149/laurent-rosenfeld/raku/ch-1.raku14
-rw-r--r--challenge-149/laurent-rosenfeld/raku/ch-2.raku10
5 files changed, 86 insertions, 0 deletions
diff --git a/challenge-149/laurent-rosenfeld/blog.txt b/challenge-149/laurent-rosenfeld/blog.txt
new file mode 100644
index 0000000000..d87b8413e4
--- /dev/null
+++ b/challenge-149/laurent-rosenfeld/blog.txt
@@ -0,0 +1 @@
+http://blogs.perl.org/users/laurent_r/2022/01/perl-weekly-challenge-149-fibonacci-digit-sum-and-largest-square.html
diff --git a/challenge-149/laurent-rosenfeld/perl/ch-1.pl b/challenge-149/laurent-rosenfeld/perl/ch-1.pl
new file mode 100644
index 0000000000..b15563c0ec
--- /dev/null
+++ b/challenge-149/laurent-rosenfeld/perl/ch-1.pl
@@ -0,0 +1,29 @@
+use strict;
+use warnings;
+use feature "say";
+
+sub fib_digit_sum {
+ my $max = shift;
+ my @fib = (0, 1);
+ my $count = 1;
+ while ($count < 100) {
+ push @fib, $fib[-1] + $fib[-2];
+ $count ++;
+ }
+ my %fibo = map { $_ => 1 } @fib;
+ my @numbers;
+ my $count_result = 0;
+ my $i = 0;
+ while ($count_result < $max) {
+ my $sum = 0;
+ $sum += $_ for split //, $i;
+ if (exists $fibo{$sum}) {
+ push @numbers, $i;
+ $count_result++;
+ }
+ $i++
+ }
+ say "@numbers";
+}
+
+fib_digit_sum(shift);
diff --git a/challenge-149/laurent-rosenfeld/perl/ch-2.pl b/challenge-149/laurent-rosenfeld/perl/ch-2.pl
new file mode 100644
index 0000000000..1468a8326b
--- /dev/null
+++ b/challenge-149/laurent-rosenfeld/perl/ch-2.pl
@@ -0,0 +1,32 @@
+use strict;
+use warnings;
+use feature "say";
+
+sub base_to_b {
+ my ($n, $b) = @_;
+ my $s = "";
+ while ($n) {
+ $s .= ('0'..'9','A'..'Z')[$n % $b];
+ $n = int($n / $b);
+ }
+ scalar(reverse($s));
+}
+
+sub has_unique_digits {
+ my $in = shift;
+ my %seen = map { $_ => 1 } split //, $in;
+ return length $in == scalar keys %seen;
+}
+
+sub largest {
+ my $base = shift;
+ my $largest_num = $base ** $base - 1;
+ my $largest_root = int sqrt $largest_num;
+ for my $i ( reverse 1..$largest_root) {
+ my $sq = base_to_b ($i*$i, $base);
+ next unless has_unique_digits $sq;
+ say "f($base) = $sq" and last;
+ }
+}
+
+largest $_ for 1..14;
diff --git a/challenge-149/laurent-rosenfeld/raku/ch-1.raku b/challenge-149/laurent-rosenfeld/raku/ch-1.raku
new file mode 100644
index 0000000000..96e60f2c13
--- /dev/null
+++ b/challenge-149/laurent-rosenfeld/raku/ch-1.raku
@@ -0,0 +1,14 @@
+sub MAIN (Int $max = 20) { # 20: default input value
+ my $fibo = set(0, 1, * + * ...^ * > 1000);
+ my $count = 0;
+ my @numbers = gather {
+ for 0 .. Inf -> $num {
+ if $num.comb.sum (elem) $fibo {
+ take $num;
+ $count++;
+ last if $count >= $max;
+ }
+ }
+ }
+ say @numbers;
+}
diff --git a/challenge-149/laurent-rosenfeld/raku/ch-2.raku b/challenge-149/laurent-rosenfeld/raku/ch-2.raku
new file mode 100644
index 0000000000..f6928c3844
--- /dev/null
+++ b/challenge-149/laurent-rosenfeld/raku/ch-2.raku
@@ -0,0 +1,10 @@
+sub largest ($base) {
+ my $largest_num = $base ** $base - 1;
+ my $largest_root = $largest_num.sqrt.Int;
+ for (1..$largest_root).reverse -> $i {
+ my $sq = $i².base($base);
+ next if $sq.chars != $sq.comb.Set;
+ say "f($base) = $sq" and last;
+ }
+}
+for 1..14 -> $test { largest $test }