diff options
| author | 冯昶 <fengchang@novel-supertv.com> | 2023-03-20 19:28:22 +0800 |
|---|---|---|
| committer | 冯昶 <fengchang@novel-supertv.com> | 2023-03-20 19:28:22 +0800 |
| commit | 31949ab1009e2d4a1de77cf0cde9d06113183bd6 (patch) | |
| tree | e6043f2a8e370e3f2126ee874deafc2e6b9f726e | |
| parent | 9c5cd2108a8f6cf8b793c28051fdf8d767a4c8a9 (diff) | |
| download | perlweeklychallenge-club-31949ab1009e2d4a1de77cf0cde9d06113183bd6.tar.gz perlweeklychallenge-club-31949ab1009e2d4a1de77cf0cde9d06113183bd6.tar.bz2 perlweeklychallenge-club-31949ab1009e2d4a1de77cf0cde9d06113183bd6.zip | |
challenge 209, raku solutions
| -rwxr-xr-x | challenge-209/feng-chang/raku/ch-1.raku | 25 | ||||
| -rwxr-xr-x | challenge-209/feng-chang/raku/ch-2.raku | 36 | ||||
| -rw-r--r-- | challenge-209/feng-chang/raku/emails01.txt | 3 | ||||
| -rw-r--r-- | challenge-209/feng-chang/raku/emails02.txt | 4 |
4 files changed, 68 insertions, 0 deletions
diff --git a/challenge-209/feng-chang/raku/ch-1.raku b/challenge-209/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..a82d33ee9d --- /dev/null +++ b/challenge-209/feng-chang/raku/ch-1.raku @@ -0,0 +1,25 @@ +#!/bin/env raku + +sub USAGE() { + print qq:to/END/; + examples: + $*PROGRAM-NAME 100 + $*PROGRAM-NAME 1110 + END +} + +unit sub MAIN(Str:D $s); + +grammar SBC { + token TOP { <Character>* } + token Character { '0' || '10' || '11' } +} + +class SBC-Actions { + state %chars = <0 10 11> Z=> <a b c>; + + method TOP($/) { make $<Character>».made.join } + method Character($/) { make %chars{$/.Str} } +} + +put +so SBC.parse($s, :actions(SBC-Actions)).made ~~ /a$/; diff --git a/challenge-209/feng-chang/raku/ch-2.raku b/challenge-209/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..0f9520d3fb --- /dev/null +++ b/challenge-209/feng-chang/raku/ch-2.raku @@ -0,0 +1,36 @@ +#!/bin/env raku + +sub USAGE() { + print qq:to/END/; + examples: + $*PROGRAM-NAME emails01.txt + $*PROGRAM-NAME emails02.txt + END +} + +unit sub MAIN(Str:D $f where *.IO.e); + +my @email-data = $f.IO.lines.map({ .words.Array }); + +my %email-sets; +for @email-data -> $list { + my $name = $list.head; + my $new-set = $list.tail(*-1).Set; + + my Bool $joined = False; + for ^%email-sets{$name}.elems -> $i { + if $new-set (&) %email-sets{$name}[$i] > 0 { + %email-sets{$name}[$i] (|)= $new-set; + $joined = True; + last; + } + + LAST { %email-sets{$name}.push($new-set) unless $joined; } + } +} + +for %email-sets.keys -> $name { + for %email-sets{$name}.Array -> $list { + put $name, ', ', $list.keys.join(', '); + } +} diff --git a/challenge-209/feng-chang/raku/emails01.txt b/challenge-209/feng-chang/raku/emails01.txt new file mode 100644 index 0000000000..2b5fa16d5c --- /dev/null +++ b/challenge-209/feng-chang/raku/emails01.txt @@ -0,0 +1,3 @@ +A a1@a.com a2@a.com +B b1@b.com +A a3@a.com a1@a.com diff --git a/challenge-209/feng-chang/raku/emails02.txt b/challenge-209/feng-chang/raku/emails02.txt new file mode 100644 index 0000000000..303d9161b3 --- /dev/null +++ b/challenge-209/feng-chang/raku/emails02.txt @@ -0,0 +1,4 @@ +A a1@a.com a2@a.com +B b1@b.com +A a3@a.com +B b2@b.com b1@b.com |
