aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xchallenge-044/feng-chang/ch-1.raku14
-rwxr-xr-xchallenge-104/feng-chang/raku/ch-1.raku12
-rwxr-xr-xchallenge-104/feng-chang/raku/ch-2.raku51
-rwxr-xr-xchallenge-109/feng-chang/raku/ch-1.raku2
-rwxr-xr-xchallenge-109/feng-chang/raku/ch-2.raku18
-rwxr-xr-xchallenge-110/feng-chang/raku/ch-1.raku16
-rwxr-xr-xchallenge-110/feng-chang/raku/ch-2.raku8
-rw-r--r--challenge-110/feng-chang/raku/ch-2.txt5
-rwxr-xr-xchallenge-111/feng-chang/raku/ch-1.raku19
-rw-r--r--challenge-111/feng-chang/raku/ch-1.txt5
-rwxr-xr-xchallenge-111/feng-chang/raku/ch-2.raku7
11 files changed, 157 insertions, 0 deletions
diff --git a/challenge-044/feng-chang/ch-1.raku b/challenge-044/feng-chang/ch-1.raku
new file mode 100755
index 0000000000..c7691dd4a8
--- /dev/null
+++ b/challenge-044/feng-chang/ch-1.raku
@@ -0,0 +1,14 @@
+#!/bin/env raku
+
+use MONKEY-SEE-NO-EVAL;
+
+my @even = 0, 2 ... 16;
+my @odd = 1, 3 ... 15;
+
+([X] (['', '+', '-'] xx 8)).race(degree => 2, batch => 200).map({
+ my @a;
+ @a[@even] = '123456789'.comb;
+ @a[@odd] = $_;
+ my $s = @a.join;
+ put $s if EVAL($s) == 100;
+});
diff --git a/challenge-104/feng-chang/raku/ch-1.raku b/challenge-104/feng-chang/raku/ch-1.raku
new file mode 100755
index 0000000000..19d124c75a
--- /dev/null
+++ b/challenge-104/feng-chang/raku/ch-1.raku
@@ -0,0 +1,12 @@
+#!/bin/env raku
+
+multi fusc(0) { 0 }
+multi fusc(1) { 1 }
+
+multi fusc(UInt:D \n where n > 0 && n %% 2)
+{ fusc((n/2).UInt) }
+
+multi fusc(UInt:D \n where * > 0)
+{ fusc(((n-1)/2).UInt) + fusc(((n+1)/2).UInt) }
+
+put (0..49)».&fusc.join(' ');
diff --git a/challenge-104/feng-chang/raku/ch-2.raku b/challenge-104/feng-chang/raku/ch-2.raku
new file mode 100755
index 0000000000..81d4200622
--- /dev/null
+++ b/challenge-104/feng-chang/raku/ch-2.raku
@@ -0,0 +1,51 @@
+#!/bin/env raku
+
+sub human-play(UInt:D \n --> UInt:D) {
+ my UInt $pick;
+
+ repeat {
+ $pick = prompt "{ n } tokens left, please input number of tokens you take: ";
+ } while $pick != 1|2|3 || $pick > n;
+ put '';
+
+ $pick;
+}
+
+sub computer-play(UInt:D \n --> UInt:D) {
+ my UInt $pick = do given n {
+ when n < 4 { n }
+ when n %% 4 { (1..3).pick }
+ default { n % 4 }
+ };
+ put "{ n } tokens left, I take $pick tokens.\n";
+
+ $pick;
+}
+
+multi MAIN(UInt:D $n is copy, Bool:D \human-plays-first = True) {
+ my Bool $human-won = True;
+
+ while $n > 0 {
+ given human-plays-first {
+ when ?* {
+ $n -= human-play($n);
+
+ if $n > 0 {
+ $n -= computer-play($n);
+ $human-won = False if $n == 0;
+ }
+ }
+ default {
+ $n -= computer-play($n);
+
+ if $n == 0 {
+ $human-won = False;
+ } else {
+ $n -= human-play($n);
+ }
+ }
+ }
+ }
+
+ put "{ $human-won ?? 'You' !! 'I' } won.";
+}
diff --git a/challenge-109/feng-chang/raku/ch-1.raku b/challenge-109/feng-chang/raku/ch-1.raku
new file mode 100755
index 0000000000..0e3494f184
--- /dev/null
+++ b/challenge-109/feng-chang/raku/ch-1.raku
@@ -0,0 +1,2 @@
+#!/bin/env raku
+(1..20).map({ (2..^$^a).grep($^a%%*).sum }).put;
diff --git a/challenge-109/feng-chang/raku/ch-2.raku b/challenge-109/feng-chang/raku/ch-2.raku
new file mode 100755
index 0000000000..54d6c89ced
--- /dev/null
+++ b/challenge-109/feng-chang/raku/ch-2.raku
@@ -0,0 +1,18 @@
+#!/bin/env raku
+
+sub tell-the-answer(@*a) {
+ my %h;
+ for 'a'..'g' Z ^7 -> ($c, $n) {
+ %h{$c} = @*a[$n];
+ put "$c = { %h{$c} }";
+ }
+
+ put "Box 1: a + b = {%h<a>} + {%h<b>} = { %h<a> + %h<b> }";
+ put "Box 2: b + c + d = {%h<b>} + {%h<c>} + {%h<d>} = { %h<b> + %h<c> + %h<d> }";
+ put "Box 3: d + e + f = {%h<d>} + {%h<e>} + {%h<f>} = { %h<d> + %h<e> + %h<f> }";
+ put "Box 4: f + g = {%h<f>} + {%h<g>} = { %h<f> + %h<g> }";
+
+ put ' - ' x 11;
+}
+
+(1..7).permutations.grep({ .&tell-the-answer if .[0]+.[1] == .[1]+.[2]+.[3] == .[3]+.[4]+.[5] == .[5]+.[6] });
diff --git a/challenge-110/feng-chang/raku/ch-1.raku b/challenge-110/feng-chang/raku/ch-1.raku
new file mode 100755
index 0000000000..7e6f7bd5cc
--- /dev/null
+++ b/challenge-110/feng-chang/raku/ch-1.raku
@@ -0,0 +1,16 @@
+#!/bin/env raku
+
+grammar Phone-Number {
+ regex TOP { <prefix> \s+ <local> }
+ token prefix { '+'\d\d || '('\d\d')' || \d\d\d\d }
+ token local { \d ** 10 }
+}
+
+my @numbers =
+ '0044 1148820341',
+ '+44 1148820341',
+ '44-11-4882-0341',
+ '(44) 1148820341',
+ '00 1148820341';
+
+.put if Phone-Number.parse($_) for @numbers;
diff --git a/challenge-110/feng-chang/raku/ch-2.raku b/challenge-110/feng-chang/raku/ch-2.raku
new file mode 100755
index 0000000000..78a5c3dfb3
--- /dev/null
+++ b/challenge-110/feng-chang/raku/ch-2.raku
@@ -0,0 +1,8 @@
+#!/bin/env raku
+
+sub MAIN(Str:D $f where *.IO.e = 'ch-2.txt') {
+ my @a = $f.IO.lines».split(',');
+ for ^@a[0].elems -> $i {
+ put @a.map(*[$i]).join(',');
+ }
+}
diff --git a/challenge-110/feng-chang/raku/ch-2.txt b/challenge-110/feng-chang/raku/ch-2.txt
new file mode 100644
index 0000000000..716ebdce75
--- /dev/null
+++ b/challenge-110/feng-chang/raku/ch-2.txt
@@ -0,0 +1,5 @@
+name,age,sex
+Mohammad,45,m
+Joe,20,m
+Julie,35,f
+Cristina,10,f
diff --git a/challenge-111/feng-chang/raku/ch-1.raku b/challenge-111/feng-chang/raku/ch-1.raku
new file mode 100755
index 0000000000..0355d1e80c
--- /dev/null
+++ b/challenge-111/feng-chang/raku/ch-1.raku
@@ -0,0 +1,19 @@
+#!/bin/env raku
+
+sub binary-search(@a, Int:D $start, Int:D $end, Int:D $n) {
+ my $middle = ($start + $end) div 2;
+ do given @a[$middle] {
+ when $_ == $n { 1 }
+ when $start == $end { 0 }
+ when $_ > $n { binary-search(@a, $start, $middle - 1, $n) }
+ default { binary-search(@a, $middle + 1, $end, $n) }
+ }
+}
+
+sub MAIN(
+ Int:D $n,
+ Str:D $f where *.IO.f = 'ch-1.txt'
+) {
+ my @a = $f.IO.words;
+ put binary-search(@a, 0, @a.elems - 1, $n);
+}
diff --git a/challenge-111/feng-chang/raku/ch-1.txt b/challenge-111/feng-chang/raku/ch-1.txt
new file mode 100644
index 0000000000..1daf55c92c
--- /dev/null
+++ b/challenge-111/feng-chang/raku/ch-1.txt
@@ -0,0 +1,5 @@
+ 1 2 3 5 7
+ 9 11 15 19 20
+23 24 25 29 31
+32 33 39 40 42
+45 47 48 49 50
diff --git a/challenge-111/feng-chang/raku/ch-2.raku b/challenge-111/feng-chang/raku/ch-2.raku
new file mode 100755
index 0000000000..a5d8d40c7d
--- /dev/null
+++ b/challenge-111/feng-chang/raku/ch-2.raku
@@ -0,0 +1,7 @@
+#!/bin/env raku
+
+sub MAIN(Str:D $words where *.IO.e = '/usr/share/dict/words') {
+ my @w = $words.IO.words.grep({ [le] $_.lc.comb });
+ my $max-length = @w».chars.max;
+ @w.grep(*.chars == $max-length).put;
+}