aboutsummaryrefslogtreecommitdiff
path: root/challenge-041
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-01-04 17:47:24 +0000
committerGitHub <noreply@github.com>2020-01-04 17:47:24 +0000
commit6b23e3e7590487bfdae397dc6fbb98f27d847509 (patch)
tree4f58be7a2e0f6c9218eca016166d63ce53e6ec70 /challenge-041
parent7fd8514508842aecb0e6b11dfb12792d9824b420 (diff)
parent7649e23d2b150b36cdd134bcf17125f3b9696ada (diff)
downloadperlweeklychallenge-club-6b23e3e7590487bfdae397dc6fbb98f27d847509.tar.gz
perlweeklychallenge-club-6b23e3e7590487bfdae397dc6fbb98f27d847509.tar.bz2
perlweeklychallenge-club-6b23e3e7590487bfdae397dc6fbb98f27d847509.zip
Merge pull request #1103 from drclaw1394/master
drclaw/ruben solutions to w41 ch-1 and ch-2. perl and raku
Diffstat (limited to 'challenge-041')
-rw-r--r--challenge-041/ruben-westerberg/README4
-rwxr-xr-xchallenge-041/ruben-westerberg/perl/ch-1.pl44
-rwxr-xr-xchallenge-041/ruben-westerberg/perl/ch-2.pl13
-rwxr-xr-xchallenge-041/ruben-westerberg/raku/ch-1.p625
-rwxr-xr-xchallenge-041/ruben-westerberg/raku/ch-2.p610
5 files changed, 94 insertions, 2 deletions
diff --git a/challenge-041/ruben-westerberg/README b/challenge-041/ruben-westerberg/README
index be0526d4eb..739bcf2117 100644
--- a/challenge-041/ruben-westerberg/README
+++ b/challenge-041/ruben-westerberg/README
@@ -2,11 +2,11 @@ Solution by Ruben Westerberg
ch-1.pl and ch-1.p6
===================
-Run the program to select a slice of an array of arrays. Indexes can be specified from the command line
+Run program to show 'attractive numbers' between 1 and 50
ch-2.pl and ch-2.p6
===================
-Run the program to sort the specified entries in the predfined list.
+Run program to display the first 20 Leonardo Numbers
diff --git a/challenge-041/ruben-westerberg/perl/ch-1.pl b/challenge-041/ruben-westerberg/perl/ch-1.pl
new file mode 100755
index 0000000000..3610ec040c
--- /dev/null
+++ b/challenge-041/ruben-westerberg/perl/ch-1.pl
@@ -0,0 +1,44 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+for (1..50) {
+ my @a=primeFactors($_);
+ print "Attractive number $_: prime factors @a\n" if (prime(scalar @a));
+}
+sub prime {
+ my $n=shift;
+ if ($n <= 3 ) {
+ return $n > 1;
+ }
+ elsif ($n % 2 == 0 or $n % 3 ==0 ) {
+ return 0;
+ }
+ my $i=5;
+ while ($i**2 <= $n) {
+ if ( $n % $i ==0 or $n % ($i+2) == 0 ) {
+ return 0;
+ }
+ $i+=6;
+ }
+ return 1;
+}
+
+sub primeFactors {
+ my @factors;
+ my $i=shift;
+ for (1..$i/2) {
+ if ($i%$_ == 0 and prime $_ ) {
+ my $b=$i/$_;
+ push @factors, $_;
+ if (prime $b) {
+ push @factors, $b;
+ }
+ else {
+ push @factors, primeFactors($b);
+ }
+ last;
+ }
+ }
+ @factors;
+}
+
diff --git a/challenge-041/ruben-westerberg/perl/ch-2.pl b/challenge-041/ruben-westerberg/perl/ch-2.pl
new file mode 100755
index 0000000000..3a2f87592d
--- /dev/null
+++ b/challenge-041/ruben-westerberg/perl/ch-2.pl
@@ -0,0 +1,13 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use v5.26;
+
+print map { "n: $_ l: ".l($_)."\n"} 0..19;
+
+sub l {
+ my $i=shift;
+ state @cache=(1,1);
+ push @cache, $cache[-1]+$cache[-2]+1 while(! defined($cache[$i]));
+ $cache[$i];
+}
diff --git a/challenge-041/ruben-westerberg/raku/ch-1.p6 b/challenge-041/ruben-westerberg/raku/ch-1.p6
new file mode 100755
index 0000000000..a34917c95c
--- /dev/null
+++ b/challenge-041/ruben-westerberg/raku/ch-1.p6
@@ -0,0 +1,25 @@
+#!/usr/bin/env perl6
+
+for 1..50 {
+ my @a=primeFactors($_).flat;
+ put "Attractive number $_: prime factors @a[]" if @a.is-prime;
+}
+
+sub primeFactors($i) {
+ gather {
+ for 1..$i/2 {
+ if ($i%%$_) && $_.is-prime {
+ take $_;
+ given $i/$_ {
+ if .is-prime {
+ take $_;
+ }
+ else {
+ take (|primeFactors($_));
+ }
+ last;
+ }
+ }
+ }
+ }
+}
diff --git a/challenge-041/ruben-westerberg/raku/ch-2.p6 b/challenge-041/ruben-westerberg/raku/ch-2.p6
new file mode 100755
index 0000000000..cd75f4258a
--- /dev/null
+++ b/challenge-041/ruben-westerberg/raku/ch-2.p6
@@ -0,0 +1,10 @@
+#!/usr/bin/env perl6
+
+put (0..19).map({ "n: $_ l: "~l($_)}).join("\n");
+
+sub l($i) {
+ state @cache=(1,1);
+ @cache.push(@cache[*-1,*-2].sum+1) while !@cache[$i].defined;
+ @cache[$i];
+}
+