diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-01-01 00:27:09 +0000 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-01-01 00:27:09 +0000 |
| commit | 3907c2e9b9b63acaa31122edd2c3b83a32227067 (patch) | |
| tree | 5d3dfe2c83c49a22b41ad43ee0f5c2598c79ff60 /challenge-041 | |
| parent | 5fbf0805a1e040ab5c97538389ab40d88025bec5 (diff) | |
| download | perlweeklychallenge-club-3907c2e9b9b63acaa31122edd2c3b83a32227067.tar.gz perlweeklychallenge-club-3907c2e9b9b63acaa31122edd2c3b83a32227067.tar.bz2 perlweeklychallenge-club-3907c2e9b9b63acaa31122edd2c3b83a32227067.zip | |
- Added solutions by Arne Sommer.
Diffstat (limited to 'challenge-041')
| -rw-r--r-- | challenge-041/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-041/arne-sommer/perl6/attractive-numbers | 36 | ||||
| -rwxr-xr-x | challenge-041/arne-sommer/perl6/ch-1.p6 | 36 | ||||
| -rwxr-xr-x | challenge-041/arne-sommer/perl6/ch-2.p6 | 8 | ||||
| -rwxr-xr-x | challenge-041/arne-sommer/perl6/divisors | 33 | ||||
| -rwxr-xr-x | challenge-041/arne-sommer/perl6/leonardo | 8 |
6 files changed, 122 insertions, 0 deletions
diff --git a/challenge-041/arne-sommer/blog.txt b/challenge-041/arne-sommer/blog.txt new file mode 100644 index 0000000000..72c65bb026 --- /dev/null +++ b/challenge-041/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/numbers.html diff --git a/challenge-041/arne-sommer/perl6/attractive-numbers b/challenge-041/arne-sommer/perl6/attractive-numbers new file mode 100755 index 0000000000..278d5bc263 --- /dev/null +++ b/challenge-041/arne-sommer/perl6/attractive-numbers @@ -0,0 +1,36 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $limit = 50, :$verbose); + +for 1 .. $limit -> $current +{ + my @divisors = divisors($current); + my $elems = @divisors.elems; + say ": $current: Divisors: { divisors($current) } Elements: $elems" if $verbose; + say "$current is an attractive number (with divisors: @divisors[])" if $elems.is-prime; +} + +sub divisors (Int $number is copy) +{ + return (1) if $number == 1; + return ($number) if $number.is-prime; + + my @divisors; + + for 2 .. ($number -1) -> $candidate + { + next unless $candidate.is-prime; + + while ($number %% $candidate) + { + @divisors.push: $candidate; + $number div= $candidate; + } + if $number.is-prime + { + @divisors.push: $number; + last; + } + } + return @divisors; +} diff --git a/challenge-041/arne-sommer/perl6/ch-1.p6 b/challenge-041/arne-sommer/perl6/ch-1.p6 new file mode 100755 index 0000000000..278d5bc263 --- /dev/null +++ b/challenge-041/arne-sommer/perl6/ch-1.p6 @@ -0,0 +1,36 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $limit = 50, :$verbose); + +for 1 .. $limit -> $current +{ + my @divisors = divisors($current); + my $elems = @divisors.elems; + say ": $current: Divisors: { divisors($current) } Elements: $elems" if $verbose; + say "$current is an attractive number (with divisors: @divisors[])" if $elems.is-prime; +} + +sub divisors (Int $number is copy) +{ + return (1) if $number == 1; + return ($number) if $number.is-prime; + + my @divisors; + + for 2 .. ($number -1) -> $candidate + { + next unless $candidate.is-prime; + + while ($number %% $candidate) + { + @divisors.push: $candidate; + $number div= $candidate; + } + if $number.is-prime + { + @divisors.push: $number; + last; + } + } + return @divisors; +} diff --git a/challenge-041/arne-sommer/perl6/ch-2.p6 b/challenge-041/arne-sommer/perl6/ch-2.p6 new file mode 100755 index 0000000000..13bd98e06b --- /dev/null +++ b/challenge-041/arne-sommer/perl6/ch-2.p6 @@ -0,0 +1,8 @@ +#! /usr/bin/env raku + +my $leonardo := (1, 1, { $^a + $^b +1 } ... Inf); + +unit sub MAIN ($limit = 20); + +say "$_: $leonardo[$_]" for ^$limit; + diff --git a/challenge-041/arne-sommer/perl6/divisors b/challenge-041/arne-sommer/perl6/divisors new file mode 100755 index 0000000000..e0c3e7fb9d --- /dev/null +++ b/challenge-041/arne-sommer/perl6/divisors @@ -0,0 +1,33 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $limit = 50); + +for 1 .. $limit -> $current +{ + say "$current: with divisors: { divisors($current) }"; +} + +sub divisors (Int $number is copy) +{ + return (1) if $number == 1; + return ($number) if $number.is-prime; + + my @divisors; + + for 2 .. ($number -1) -> $candidate + { + next unless $candidate.is-prime; + + while ($number %% $candidate) + { + @divisors.push: $candidate; + $number div= $candidate; + } + if $number.is-prime + { + @divisors.push: $number; + last; + } + } + return @divisors; +} diff --git a/challenge-041/arne-sommer/perl6/leonardo b/challenge-041/arne-sommer/perl6/leonardo new file mode 100755 index 0000000000..13bd98e06b --- /dev/null +++ b/challenge-041/arne-sommer/perl6/leonardo @@ -0,0 +1,8 @@ +#! /usr/bin/env raku + +my $leonardo := (1, 1, { $^a + $^b +1 } ... Inf); + +unit sub MAIN ($limit = 20); + +say "$_: $leonardo[$_]" for ^$limit; + |
