diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-03-27 07:13:07 +0000 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-03-27 07:13:07 +0000 |
| commit | 587ace174264bf714737fa20e2f84e256b24ba44 (patch) | |
| tree | 47c6231780e7c4dd8f6bfd798cc2bb20eeea126a | |
| parent | a899f2647c231dab288f83af85bee2deb49f19d9 (diff) | |
| download | perlweeklychallenge-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.p6 | 49 |
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; +} |
