aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2023-03-25 16:58:08 +0000
committerGitHub <noreply@github.com>2023-03-25 16:58:08 +0000
commit26a440ff23bd8e155a191831a7b1642fac5daad9 (patch)
treef3458a5d35add8ae93193c1a869a44aaf846d696
parent0a8cfa079f20b41b13e99da3dc8c2df2c3bf084e (diff)
parent31949ab1009e2d4a1de77cf0cde9d06113183bd6 (diff)
downloadperlweeklychallenge-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-xchallenge-209/feng-chang/raku/ch-1.raku25
-rwxr-xr-xchallenge-209/feng-chang/raku/ch-2.raku36
-rw-r--r--challenge-209/feng-chang/raku/emails01.txt3
-rw-r--r--challenge-209/feng-chang/raku/emails02.txt4
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