diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-04-11 00:00:57 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-04-11 00:00:57 +0100 |
| commit | 9db0d32f57309e706303e598874c4e4db957d946 (patch) | |
| tree | aa7660ce7ce5ee30e935457e3e34d24a0289f163 | |
| parent | b4302eda5b87a6c11c1c6bd7b0eecb45bd15f685 (diff) | |
| parent | 5cfdbce58bb3acab34e145243883acfbac22edbf (diff) | |
| download | perlweeklychallenge-club-9db0d32f57309e706303e598874c4e4db957d946.tar.gz perlweeklychallenge-club-9db0d32f57309e706303e598874c4e4db957d946.tar.bz2 perlweeklychallenge-club-9db0d32f57309e706303e598874c4e4db957d946.zip | |
Merge pull request #5907 from arnesom/branch-for-challenge-159
Arne Sommer
| -rw-r--r-- | challenge-159/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-159/arne-sommer/raku/ch-1.raku | 22 | ||||
| -rwxr-xr-x | challenge-159/arne-sommer/raku/ch-2.raku | 39 | ||||
| -rwxr-xr-x | challenge-159/arne-sommer/raku/farey-sequence | 22 | ||||
| -rwxr-xr-x | challenge-159/arne-sommer/raku/moebius-number | 39 |
5 files changed, 123 insertions, 0 deletions
diff --git a/challenge-159/arne-sommer/blog.txt b/challenge-159/arne-sommer/blog.txt new file mode 100644 index 0000000000..4742664056 --- /dev/null +++ b/challenge-159/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/farey-moebius.html diff --git a/challenge-159/arne-sommer/raku/ch-1.raku b/challenge-159/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..16f3d4dcca --- /dev/null +++ b/challenge-159/arne-sommer/raku/ch-1.raku @@ -0,0 +1,22 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $n where $n > 0, :v(:$verbose)); + +my @fs = (0/1, 1/1); + +for 1 .. $n -1 -> $numerator +{ + for $numerator +1 .. $n -> $denominator + { + @fs.push: $numerator/$denominator; + } +} + +if $verbose +{ + say ":Unsorted: { @fs.join(", ") }"; + say ":Unsorted x/y: { @fs.map( *.nude.join("/") ).join(", ") }"; + say ":Sorted x/y: { @fs.sort.map( *.nude.join("/") ).join(", ") }"; +} + +@fs.sort.unique.map( *.nude.join("/") ).join(", ").say; diff --git a/challenge-159/arne-sommer/raku/ch-2.raku b/challenge-159/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..78db0dcae1 --- /dev/null +++ b/challenge-159/arne-sommer/raku/ch-2.raku @@ -0,0 +1,39 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $n where $n > 0, :v(:$verbose)); + +my @prime-factors = factors($n, :include-one); + +say ": Factor count: { @prime-factors.elems } (Factors: { @prime-factors.join(", ")})" if $verbose; + +if @prime-factors.repeated.elems +{ + say 0; +} +else +{ + say @prime-factors.elems %% 2 ?? -1 !! 1; +} + +sub factors ($number is copy, :$include-one) +{ + return (1) if $number == 1; + + if $number.is-prime + { + return :$include-one ?? (1, $number) !! ($number); + } + + my @factors = $include-one ?? 1 !! (); + + for (2 .. $number div 2).grep( *.is-prime ) -> $candidate + { + while $number %% $candidate + { + @factors.push: $candidate; + $number /= $candidate; + } + } + + return @factors; +} diff --git a/challenge-159/arne-sommer/raku/farey-sequence b/challenge-159/arne-sommer/raku/farey-sequence new file mode 100755 index 0000000000..16f3d4dcca --- /dev/null +++ b/challenge-159/arne-sommer/raku/farey-sequence @@ -0,0 +1,22 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $n where $n > 0, :v(:$verbose)); + +my @fs = (0/1, 1/1); + +for 1 .. $n -1 -> $numerator +{ + for $numerator +1 .. $n -> $denominator + { + @fs.push: $numerator/$denominator; + } +} + +if $verbose +{ + say ":Unsorted: { @fs.join(", ") }"; + say ":Unsorted x/y: { @fs.map( *.nude.join("/") ).join(", ") }"; + say ":Sorted x/y: { @fs.sort.map( *.nude.join("/") ).join(", ") }"; +} + +@fs.sort.unique.map( *.nude.join("/") ).join(", ").say; diff --git a/challenge-159/arne-sommer/raku/moebius-number b/challenge-159/arne-sommer/raku/moebius-number new file mode 100755 index 0000000000..78db0dcae1 --- /dev/null +++ b/challenge-159/arne-sommer/raku/moebius-number @@ -0,0 +1,39 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $n where $n > 0, :v(:$verbose)); + +my @prime-factors = factors($n, :include-one); + +say ": Factor count: { @prime-factors.elems } (Factors: { @prime-factors.join(", ")})" if $verbose; + +if @prime-factors.repeated.elems +{ + say 0; +} +else +{ + say @prime-factors.elems %% 2 ?? -1 !! 1; +} + +sub factors ($number is copy, :$include-one) +{ + return (1) if $number == 1; + + if $number.is-prime + { + return :$include-one ?? (1, $number) !! ($number); + } + + my @factors = $include-one ?? 1 !! (); + + for (2 .. $number div 2).grep( *.is-prime ) -> $candidate + { + while $number %% $candidate + { + @factors.push: $candidate; + $number /= $candidate; + } + } + + return @factors; +} |
