diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2022-01-27 19:16:10 +0000 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2022-01-27 19:16:10 +0000 |
| commit | 9abeab654b54c1b827d65af90628b3014bdad0fb (patch) | |
| tree | 632e6e46f2847ec89db83d663551ee177a454ee0 /challenge-149 | |
| parent | d5ee7c5fa4fe77b9ea632d61d68f37800a569312 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rw-r--r-- | challenge-149/laurent-rosenfeld/perl/ch-1.pl | 29 | ||||
| -rw-r--r-- | challenge-149/laurent-rosenfeld/perl/ch-2.pl | 32 | ||||
| -rw-r--r-- | challenge-149/laurent-rosenfeld/raku/ch-1.raku | 14 | ||||
| -rw-r--r-- | challenge-149/laurent-rosenfeld/raku/ch-2.raku | 10 |
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 } |
