diff options
| author | rir <rirans@comcast.net> | 2022-04-05 16:55:35 -0400 |
|---|---|---|
| committer | rir <rirans@comcast.net> | 2022-04-05 16:55:35 -0400 |
| commit | f84d1af8a344d0ce309c282c0950aed158f0dcb1 (patch) | |
| tree | eeba26875e9cbd87d1249e4d0c021e76c3b6ee1b | |
| parent | 21b2771f7439710ee9a4631c40679a916ca9f723 (diff) | |
| download | perlweeklychallenge-club-f84d1af8a344d0ce309c282c0950aed158f0dcb1.tar.gz perlweeklychallenge-club-f84d1af8a344d0ce309c282c0950aed158f0dcb1.tar.bz2 perlweeklychallenge-club-f84d1af8a344d0ce309c282c0950aed158f0dcb1.zip | |
159
| -rw-r--r-- | challenge-159/0rir/raku/ch-1.raku | 22 | ||||
| -rw-r--r-- | challenge-159/0rir/raku/ch-2.raku | 52 |
2 files changed, 74 insertions, 0 deletions
diff --git a/challenge-159/0rir/raku/ch-1.raku b/challenge-159/0rir/raku/ch-1.raku new file mode 100644 index 0000000000..3867df64f7 --- /dev/null +++ b/challenge-159/0rir/raku/ch-1.raku @@ -0,0 +1,22 @@ +#!/usr/bin/env raku +# :vim ft=raku sw=4 expandtabs +use v6.d; + +my $n = 7; + +say "Input: \$n = $n"; + +my @farey + = sort { $^a <=> $^b }, gather + { for 1 .. $n -> $de { + for 0 .. $de -> $nu { + take $nu/$de; + } + } + }.unique; + +for @farey -> $f is rw { + $f = $f.numerator ~ '/' ~ $f.denominator; +} + +say "Output = @farey.join(', ')."; diff --git a/challenge-159/0rir/raku/ch-2.raku b/challenge-159/0rir/raku/ch-2.raku new file mode 100644 index 0000000000..74750da588 --- /dev/null +++ b/challenge-159/0rir/raku/ch-2.raku @@ -0,0 +1,52 @@ +#!/usr/bin/env raku +# :vim ft=raku sw=4 expandtabs +use v6.d; +use lib $?FILE.IO.parent(2).add("lib"); +use Test; + +constant TEST = False; + +my @exp = ( 1, −1, −1, 0, −1, 1, −1, 0, 0, 1, + −1, 0, −1, 1, 1, 0, −1, 0, −1, 0, + 1, 1, −1, 0, 0, 1, 0, 0, −1, −1, + −1, 0, 1, 1, 1, 0, −1, 1, 1, 0, + −1, −1, −1, 0, 0, 1, −1, 0, 0, 0 ); + +sub MAIN( $n = 123456789 ) { + say prime-factors( $n); + say "Input: \$n = $n\nOutput = ", μ($n); +} + +my @prime = grep {.is-prime}, (2,3,(* + 2) … ∞); + +sub prime-factors ( $int --> Array ) { + my $n = $int; + my @ret; + my $ix = 0; + while $n > 1 { + my $candi = @prime[$ix]; + $ix++; + next unless ( $n %% $candi ); + $ix = 0; + $n ÷= $candi; + @ret.push: $candi; + } + return @ret; +} + +sub μ ( Int $n where $n > 0 --> Int ) { + return 1 if $n == 1; + my @prime-factor = prime-factors( $n); + return -1 if @prime-factor.elems == 1; + return 0 if @prime-factor.elems ≠ @prime-factor.unique.elems; + return 1 if @prime-factor.elems %% 2; + return -1; +} + +if TEST { + plan @exp.elems; + for 1 … 50 -> $i { + is μ($i), @exp[$i - 1], prime-factors( $i); + } + done-testing; +} |
