diff options
| -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; +} |
