diff options
| -rwxr-xr-x | challenge-141/feng-chang/raku/ch-1.raku | 5 | ||||
| -rwxr-xr-x | challenge-141/feng-chang/raku/ch-2.raku | 5 | ||||
| -rwxr-xr-x | challenge-143/feng-chang/raku/ch-1.raku | 63 | ||||
| -rwxr-xr-x | challenge-143/feng-chang/raku/ch-2.raku | 15 | ||||
| -rwxr-xr-x | challenge-144/feng-chang/raku/ch-1.raku | 6 | ||||
| -rwxr-xr-x | challenge-144/feng-chang/raku/ch-2.raku | 19 | ||||
| -rwxr-xr-x | challenge-145/feng-chang/raku/ch-1.raku | 4 | ||||
| -rw-r--r-- | challenge-145/feng-chang/raku/i01.txt | 2 | ||||
| -rwxr-xr-x | challenge-146/feng-chang/raku/ch-1.raku | 3 | ||||
| -rwxr-xr-x | challenge-146/feng-chang/raku/ch-2.raku | 16 |
10 files changed, 138 insertions, 0 deletions
diff --git a/challenge-141/feng-chang/raku/ch-1.raku b/challenge-141/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..ba42e19fb3 --- /dev/null +++ b/challenge-141/feng-chang/raku/ch-1.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +my method divisors(UInt:D $n : --> Seq:D) { (1..$n).grep($n %% *) } + +put (1..∞).grep(*.&divisors == 8)[^10]; diff --git a/challenge-141/feng-chang/raku/ch-2.raku b/challenge-141/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..4f47828458 --- /dev/null +++ b/challenge-141/feng-chang/raku/ch-2.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +sub MAIN(UInt:D \m, UInt:D \n) { + put m.comb.combinations(1 .. m.comb.elems-1)».join.grep(* %% n).elems; +} diff --git a/challenge-143/feng-chang/raku/ch-1.raku b/challenge-143/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..2ba225b57f --- /dev/null +++ b/challenge-143/feng-chang/raku/ch-1.raku @@ -0,0 +1,63 @@ +#!/bin/env raku + +use MONKEY-SEE-NO-EVAL; + +grammar Expression { + rule TOP { <expression> } + + rule expression { <term>+ % <add-op> } + rule term { <item>+ % <mul-op> } + rule item { || '(' <expression> ')' || <number> } + + token add-op { '+' | '-' } + token mul-op { '*' | '/' } + token number { \d+ } +} + +class ExpressionActions { + method TOP($/) { make $<expression>.made } + + method expression($/) { + my $n = $<term>[0].made; + for $<add-op>».made Z $<term>[1..*]».made -> (\op, \term) { + given op { + when '+' { $n += term } + when '-' { $n -= term } + } + } + make $n; + } + + method term($/) { + my $n = $<item>[0].made; + for $<mul-op>».made Z $<item>[1..*]».made -> (\op, \item) { + given op { + when '*' { $n *= item } + when '/' { $n div= item } + } + } + make $n; + } + + method item($/) { make $<expression>.defined ?? $<expression>.made !! $<number>.made } + + method add-op($/) { make $/.Str } + method mul-op($/) { make $/.Str } + method number($/) { make $/.Int } +} + +my Str $s; + +use Test; + +repeat { + $s = prompt 'Please enter an arithmetic expression: '; + { put ''; last } unless $s; + + my $er = (EVAL $s).Int; + my $gr = Expression.parse($s, :actions(ExpressionActions)).made; + + is $er, $gr, "'$s' = $gr, EVAL agrees with Grammar"; +} while $s.chars > 0; + +done-testing; diff --git a/challenge-143/feng-chang/raku/ch-2.raku b/challenge-143/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..5f561558ac --- /dev/null +++ b/challenge-143/feng-chang/raku/ch-2.raku @@ -0,0 +1,15 @@ +#!/bin/env raku + +unit sub MAIN(UInt:D \n); + +sub is-stealthy(UInt:D \n --> Bool:D) { + (1..sqrt(n).Int) + .grep(n %% *) + .map({ [$_, n div $_] }) + .combinations(2) + .grep({ abs(.[0].sum - .[1].sum) == 1 }) + .elems + > 0 +} + +put +is-stealthy(n); diff --git a/challenge-144/feng-chang/raku/ch-1.raku b/challenge-144/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..396b38301c --- /dev/null +++ b/challenge-144/feng-chang/raku/ch-1.raku @@ -0,0 +1,6 @@ +#!/bin/env raku + +unit sub MAIN(UInt:D \N = 300); + +my @candis = (2..sqrt(N).Int).grep(*.is-prime); +put (@candis X* @candis).grep(* < N).sort.unique; diff --git a/challenge-144/feng-chang/raku/ch-2.raku b/challenge-144/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..10bd9f5d44 --- /dev/null +++ b/challenge-144/feng-chang/raku/ch-2.raku @@ -0,0 +1,19 @@ +#!/bin/env raku + +unit sub MAIN(UInt:D \u, UInt:D \v where v > u); + +my @ulam = lazy gather { + take u; + take v; + + my $n = 2; + loop { + my %b; + (@ulam[^$n] X @ulam[^$n]).map({ ++%b{.[0]+.[1]} if .[1] > .[0] }); + take %b.keys».UInt.sort.grep({ $_ > @ulam[$n-1] and %b{$_} == 1 }).first; + + ++$n; + } +}; + +put @ulam[^20]; diff --git a/challenge-145/feng-chang/raku/ch-1.raku b/challenge-145/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..5cde190653 --- /dev/null +++ b/challenge-145/feng-chang/raku/ch-1.raku @@ -0,0 +1,4 @@ +#!/bin/env raku + +put [+] prompt('Array @a: ').words».Int »*« + prompt('Array @b: ').words».Int; diff --git a/challenge-145/feng-chang/raku/i01.txt b/challenge-145/feng-chang/raku/i01.txt new file mode 100644 index 0000000000..b36d133ce1 --- /dev/null +++ b/challenge-145/feng-chang/raku/i01.txt @@ -0,0 +1,2 @@ +1 2 3 +4 5 6 diff --git a/challenge-146/feng-chang/raku/ch-1.raku b/challenge-146/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..acba62e935 --- /dev/null +++ b/challenge-146/feng-chang/raku/ch-1.raku @@ -0,0 +1,3 @@ +#!/bin/env raku + +put (2..∞).grep(*.is-prime)[100_00]; diff --git a/challenge-146/feng-chang/raku/ch-2.raku b/challenge-146/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..86f1c53b16 --- /dev/null +++ b/challenge-146/feng-chang/raku/ch-2.raku @@ -0,0 +1,16 @@ +#!/bin/env raku + +unit sub MAIN(Rat:D \r); + +put "parent: {r.&parent.&toStr} " ~ + "grandparent: {r.&parent.&parent.&toStr}"; + +my method parent(Rat:D \r : --> Rat:D) { + r < 1 ?? + r.numerator/(r.denominator - r.numerator) !! + (r.numerator - r.denominator)/r.denominator +} + +my method toStr(Rat:D \r : --> Str:D) { + "{r.numerator}/{r.denominator}" +} |
