diff options
| -rw-r--r-- | challenge-041/ruben-westerberg/README | 4 | ||||
| -rwxr-xr-x | challenge-041/ruben-westerberg/perl/ch-1.pl | 44 | ||||
| -rwxr-xr-x | challenge-041/ruben-westerberg/raku/ch-1.p6 | 25 |
3 files changed, 71 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/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; + } + } + } + } +} |
