diff options
| -rwxr-xr-x | challenge-044/feng-chang/ch-1.raku | 14 | ||||
| -rwxr-xr-x | challenge-104/feng-chang/raku/ch-1.raku | 12 | ||||
| -rwxr-xr-x | challenge-104/feng-chang/raku/ch-2.raku | 51 | ||||
| -rwxr-xr-x | challenge-109/feng-chang/raku/ch-1.raku | 2 | ||||
| -rwxr-xr-x | challenge-109/feng-chang/raku/ch-2.raku | 18 | ||||
| -rwxr-xr-x | challenge-110/feng-chang/raku/ch-1.raku | 16 | ||||
| -rwxr-xr-x | challenge-110/feng-chang/raku/ch-2.raku | 8 | ||||
| -rw-r--r-- | challenge-110/feng-chang/raku/ch-2.txt | 5 | ||||
| -rwxr-xr-x | challenge-111/feng-chang/raku/ch-1.raku | 19 | ||||
| -rw-r--r-- | challenge-111/feng-chang/raku/ch-1.txt | 5 | ||||
| -rwxr-xr-x | challenge-111/feng-chang/raku/ch-2.raku | 7 |
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; +} |
