diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2023-03-25 16:58:08 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-25 16:58:08 +0000 |
| commit | 26a440ff23bd8e155a191831a7b1642fac5daad9 (patch) | |
| tree | f3458a5d35add8ae93193c1a869a44aaf846d696 | |
| parent | 0a8cfa079f20b41b13e99da3dc8c2df2c3bf084e (diff) | |
| parent | 31949ab1009e2d4a1de77cf0cde9d06113183bd6 (diff) | |
| download | perlweeklychallenge-club-26a440ff23bd8e155a191831a7b1642fac5daad9.tar.gz perlweeklychallenge-club-26a440ff23bd8e155a191831a7b1642fac5daad9.tar.bz2 perlweeklychallenge-club-26a440ff23bd8e155a191831a7b1642fac5daad9.zip | |
Merge pull request #7770 from seaker/master
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 |
