From 08923cde36bfc9a71f9acdf6c8274355c1db9157 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Mon, 29 Nov 2021 19:20:49 +0800 Subject: challenge 141, raku solutions --- challenge-141/feng-chang/raku/ch-1.raku | 5 +++++ challenge-141/feng-chang/raku/ch-2.raku | 5 +++++ 2 files changed, 10 insertions(+) create mode 100755 challenge-141/feng-chang/raku/ch-1.raku create mode 100755 challenge-141/feng-chang/raku/ch-2.raku 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; +} -- cgit From f64eeab74717065c4ba545593f3b472797594855 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Mon, 27 Dec 2021 15:17:36 +0800 Subject: Challenge 144, Raku solutions --- challenge-144/feng-chang/raku/ch-1.raku | 4 ++++ challenge-144/feng-chang/raku/ch-2.raku | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100755 challenge-144/feng-chang/raku/ch-1.raku create mode 100755 challenge-144/feng-chang/raku/ch-2.raku 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..7a2926a77d --- /dev/null +++ b/challenge-144/feng-chang/raku/ch-1.raku @@ -0,0 +1,4 @@ +#!/bin/env raku + +my @candis = (2..47).grep(*.is-prime); +put (@candis X* @candis).grep(* < 100).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..f0d9f21764 --- /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[^10]; -- cgit From fb3913c8d38cf4ce52c90ae62bb92737d2836a0d Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Mon, 27 Dec 2021 17:59:09 +0800 Subject: challenge 145, #1 --- challenge-144/feng-chang/raku/ch-1.raku | 6 ++++-- challenge-144/feng-chang/raku/ch-2.raku | 2 +- challenge-145/feng-chang/raku/ch-1.raku | 4 ++++ challenge-145/feng-chang/raku/i01.txt | 2 ++ 4 files changed, 11 insertions(+), 3 deletions(-) create mode 100755 challenge-145/feng-chang/raku/ch-1.raku create mode 100644 challenge-145/feng-chang/raku/i01.txt diff --git a/challenge-144/feng-chang/raku/ch-1.raku b/challenge-144/feng-chang/raku/ch-1.raku index 7a2926a77d..396b38301c 100755 --- a/challenge-144/feng-chang/raku/ch-1.raku +++ b/challenge-144/feng-chang/raku/ch-1.raku @@ -1,4 +1,6 @@ #!/bin/env raku -my @candis = (2..47).grep(*.is-prime); -put (@candis X* @candis).grep(* < 100).sort.unique; +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 index f0d9f21764..10bd9f5d44 100755 --- a/challenge-144/feng-chang/raku/ch-2.raku +++ b/challenge-144/feng-chang/raku/ch-2.raku @@ -16,4 +16,4 @@ my @ulam = lazy gather { } }; -put @ulam[^10]; +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 -- cgit From 839d7a80050e6cdcede7c9d658c3c35406671d7e Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Tue, 28 Dec 2021 18:45:54 +0800 Subject: challenge 143, raku solutions --- challenge-143/feng-chang/raku/ch-1.raku | 63 +++++++++++++++++++++++++++++++++ challenge-143/feng-chang/raku/ch-2.raku | 15 ++++++++ 2 files changed, 78 insertions(+) create mode 100755 challenge-143/feng-chang/raku/ch-1.raku create mode 100755 challenge-143/feng-chang/raku/ch-2.raku 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 { } + + rule expression { + % } + rule term { + % } + rule item { || '(' ')' || } + + token add-op { '+' | '-' } + token mul-op { '*' | '/' } + token number { \d+ } +} + +class ExpressionActions { + method TOP($/) { make $.made } + + method expression($/) { + my $n = $[0].made; + for $».made Z $[1..*]».made -> (\op, \term) { + given op { + when '+' { $n += term } + when '-' { $n -= term } + } + } + make $n; + } + + method term($/) { + my $n = $[0].made; + for $».made Z $[1..*]».made -> (\op, \item) { + given op { + when '*' { $n *= item } + when '/' { $n div= item } + } + } + make $n; + } + + method item($/) { make $.defined ?? $.made !! $.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); -- cgit From bcc880330eb7fd7877eb6cd2f5d3dbb825809ec2 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Mon, 3 Jan 2022 23:20:45 +0800 Subject: Challenge 146, raku solutions --- challenge-146/feng-chang/raku/ch-1.raku | 3 +++ challenge-146/feng-chang/raku/ch-2.raku | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100755 challenge-146/feng-chang/raku/ch-1.raku create mode 100755 challenge-146/feng-chang/raku/ch-2.raku 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}" +} -- cgit