aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2020-03-27 07:13:07 +0000
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2020-03-27 07:13:07 +0000
commit587ace174264bf714737fa20e2f84e256b24ba44 (patch)
tree47c6231780e7c4dd8f6bfd798cc2bb20eeea126a
parenta899f2647c231dab288f83af85bee2deb49f19d9 (diff)
downloadperlweeklychallenge-club-587ace174264bf714737fa20e2f84e256b24ba44.tar.gz
perlweeklychallenge-club-587ace174264bf714737fa20e2f84e256b24ba44.tar.bz2
perlweeklychallenge-club-587ace174264bf714737fa20e2f84e256b24ba44.zip
- Added unit test version of Vowel String solution in Raku.
-rw-r--r--challenge-053/mohammad-anwar/raku/ch-2a.p649
1 files changed, 49 insertions, 0 deletions
diff --git a/challenge-053/mohammad-anwar/raku/ch-2a.p6 b/challenge-053/mohammad-anwar/raku/ch-2a.p6
new file mode 100644
index 0000000000..8e2597a763
--- /dev/null
+++ b/challenge-053/mohammad-anwar/raku/ch-2a.p6
@@ -0,0 +1,49 @@
+#!/usr/bin/env perl6
+
+use Test;
+
+my $unit-tests = :{
+ 1 => ["a", "e", "i", "o", "u"],
+ 2 => ["ae", "ai", "ei", "io", "iu", "ou"],
+ 3 => ["aei", "aeo", "aeu", "aio", "aiu", "aou", "eio", "eiu", "eou", "iou"],
+ 4 => ["aeio", "aeiu", "aeou", "aiou", "eiou"],
+ 5 => ["aeiou"]
+};
+
+for $unit-tests.keys.sort -> $size {
+ is-deeply(vowel-strings($size), $unit-tests{$size}, "vowel strings size $size.");
+}
+
+done-testing;
+
+sub vowel-strings(Int $size = 2) {
+ die "ERROR: Invalid size $size.\n"
+ unless $size ~~ any (1, 2, 3, 4, 5);
+
+ my @chars = <a e i o u>;
+ return @chars if $size == 1;
+
+ my @char-sets = @chars.combinations: $size;
+ my @comb-sets = @char-sets.map({ .join });
+
+ my @rules = (
+ rx/ a<[ie]> /,
+ rx/ e<[i]> /,
+ rx/ i<[aeou]> /,
+ rx/ o<[au]> /,
+ rx/ u<[oe]> /,
+ );
+
+ my @vowel-strings = ();
+ for @comb-sets -> $str {
+ my $pass = False;
+ for @rules -> $rule {
+ if $str ~~ /$rule/ {
+ $pass = True;
+ }
+ }
+ @vowel-strings.push($str) if $pass;
+ }
+
+ return @vowel-strings;
+}