diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-03-18 22:11:37 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-03-18 22:11:37 +0000 |
| commit | 721d5d14bb05d597b0e3595ac6dc0253631a822e (patch) | |
| tree | c9bc5d88176be17f6737948c66f69cd45425667e | |
| parent | 3efb2f796efcaa664b1248fc67f8d40cc3d547c2 (diff) | |
| parent | 34a0ad3f74be41ba6730acded8a6a984b9daee97 (diff) | |
| download | perlweeklychallenge-club-721d5d14bb05d597b0e3595ac6dc0253631a822e.tar.gz perlweeklychallenge-club-721d5d14bb05d597b0e3595ac6dc0253631a822e.tar.bz2 perlweeklychallenge-club-721d5d14bb05d597b0e3595ac6dc0253631a822e.zip | |
Merge pull request #5794 from arnesom/branch-for-challenge-156
Arne Sommer
| -rw-r--r-- | challenge-156/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-156/arne-sommer/raku/ch-1.raku | 7 | ||||
| -rwxr-xr-x | challenge-156/arne-sommer/raku/ch-2.raku | 23 | ||||
| -rwxr-xr-x | challenge-156/arne-sommer/raku/pernicious-numbers | 7 | ||||
| -rwxr-xr-x | challenge-156/arne-sommer/raku/unpernicious-numbers | 7 | ||||
| -rwxr-xr-x | challenge-156/arne-sommer/raku/weird-number | 23 | ||||
| -rwxr-xr-x | challenge-156/arne-sommer/raku/weird-number-exit | 23 | ||||
| -rwxr-xr-x | challenge-156/arne-sommer/raku/weird-number-exits | 38 | ||||
| -rwxr-xr-x | challenge-156/arne-sommer/raku/weird-number-seq | 32 |
9 files changed, 161 insertions, 0 deletions
diff --git a/challenge-156/arne-sommer/blog.txt b/challenge-156/arne-sommer/blog.txt new file mode 100644 index 0000000000..bc8920923c --- /dev/null +++ b/challenge-156/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/weirdly-pernicious.html diff --git a/challenge-156/arne-sommer/raku/ch-1.raku b/challenge-156/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..727105e251 --- /dev/null +++ b/challenge-156/arne-sommer/raku/ch-1.raku @@ -0,0 +1,7 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $length where $length > 0 = 10); + +my $pn := (1..Inf).grep({ $_.fmt('%b').comb.sum.is-prime }); + +$pn.head($length).join(", ").say; diff --git a/challenge-156/arne-sommer/raku/ch-2.raku b/challenge-156/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..e63cee9fab --- /dev/null +++ b/challenge-156/arne-sommer/raku/ch-2.raku @@ -0,0 +1,23 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $n where $n > 0); + +my @proper-divisors = divisors($n, :not-self); + +say @proper-divisors.sum <= $n + ?? 0 + !! + ! so any(@proper-divisors.combinations>>.sum) == $n; + +sub divisors ($number, :$not-self, :$not-one) +{ + my @divisors; + + for ($not-one ?? 2 !! 1) .. $number/2 -> $candidate + { + @divisors.push: $candidate if $number %% $candidate; + } + + @divisors.push: $number unless $not-self; + + return @divisors; +} diff --git a/challenge-156/arne-sommer/raku/pernicious-numbers b/challenge-156/arne-sommer/raku/pernicious-numbers new file mode 100755 index 0000000000..727105e251 --- /dev/null +++ b/challenge-156/arne-sommer/raku/pernicious-numbers @@ -0,0 +1,7 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $length where $length > 0 = 10); + +my $pn := (1..Inf).grep({ $_.fmt('%b').comb.sum.is-prime }); + +$pn.head($length).join(", ").say; diff --git a/challenge-156/arne-sommer/raku/unpernicious-numbers b/challenge-156/arne-sommer/raku/unpernicious-numbers new file mode 100755 index 0000000000..b7b6510869 --- /dev/null +++ b/challenge-156/arne-sommer/raku/unpernicious-numbers @@ -0,0 +1,7 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $length where $length > 0 = 10); + +my $pn := (1..Inf).grep({ $_.fmt('%b').comb.sum.is-prime.not }); + +$pn.head($length).join(", ").say; diff --git a/challenge-156/arne-sommer/raku/weird-number b/challenge-156/arne-sommer/raku/weird-number new file mode 100755 index 0000000000..e63cee9fab --- /dev/null +++ b/challenge-156/arne-sommer/raku/weird-number @@ -0,0 +1,23 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $n where $n > 0); + +my @proper-divisors = divisors($n, :not-self); + +say @proper-divisors.sum <= $n + ?? 0 + !! + ! so any(@proper-divisors.combinations>>.sum) == $n; + +sub divisors ($number, :$not-self, :$not-one) +{ + my @divisors; + + for ($not-one ?? 2 !! 1) .. $number/2 -> $candidate + { + @divisors.push: $candidate if $number %% $candidate; + } + + @divisors.push: $number unless $not-self; + + return @divisors; +} diff --git a/challenge-156/arne-sommer/raku/weird-number-exit b/challenge-156/arne-sommer/raku/weird-number-exit new file mode 100755 index 0000000000..6154d5ebef --- /dev/null +++ b/challenge-156/arne-sommer/raku/weird-number-exit @@ -0,0 +1,23 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $n where $n > 0); + +my @proper-divisors = divisors($n, :not-self); + +(say 0; exit) if @proper-divisors.sum <= $n; + +say + ! so any(@proper-divisors.combinations>>.sum) == $n; + +sub divisors ($number, :$not-self, :$not-one) +{ + my @divisors; + + for ($not-one ?? 2 !! 1) .. $number/2 -> $candidate + { + @divisors.push: $candidate if $number %% $candidate; + } + + @divisors.push: $number unless $not-self; + + return @divisors; +} diff --git a/challenge-156/arne-sommer/raku/weird-number-exits b/challenge-156/arne-sommer/raku/weird-number-exits new file mode 100755 index 0000000000..213cac0207 --- /dev/null +++ b/challenge-156/arne-sommer/raku/weird-number-exits @@ -0,0 +1,38 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $n where $n > 0); + +my @proper-divisors = divisors($n, :not-self); + +if (@proper-divisors.sum > $n) +{ + for @proper-divisors.combinations -> @combination + { + if @combination.sum == $n + { + say 0; + exit; + } + } + + say 1; + exit; +} + +say 0; + +sub divisors ($number, :$not-self, :$not-one) +{ + my @divisors; + + for ($not-one ?? 2 !! 1) .. $number/2 -> $candidate + { + @divisors.push: $candidate if $number %% $candidate; + } + + @divisors.push: $number unless $not-self; + + # say ": $number has { @divisors.elems } divisors: { @divisors.join(", ") }" if $verbose; + + return @divisors; +} diff --git a/challenge-156/arne-sommer/raku/weird-number-seq b/challenge-156/arne-sommer/raku/weird-number-seq new file mode 100755 index 0000000000..bcae628529 --- /dev/null +++ b/challenge-156/arne-sommer/raku/weird-number-seq @@ -0,0 +1,32 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $limit where $limit > 0 = 10, :v(:$verbose)); + +my $wns := (1..Inf).grep( *.&is-weird ); + +say $wns.head($limit).join(", "); + +sub is-weird (Int $number) +{ + my @proper-divisors = divisors($number, :not-self); + + return @proper-divisors.sum <= $number + ?? False + !! ! so any(@proper-divisors.combinations>>.sum) == $number; +} + +sub divisors ($number, :$not-self, :$not-one) +{ + my @divisors; + + for ($not-one ?? 2 !! 1) .. $number/2 -> $candidate + { + @divisors.push: $candidate if $number %% $candidate; + } + + @divisors.push: $number unless $not-self; + + say ": $number has divisors: { @divisors.join(", ") }" if $verbose; + + return @divisors; +} |
