aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xchallenge-287/feng-chang/raku/ch-1.raku9
-rwxr-xr-xchallenge-287/feng-chang/raku/ch-1a.raku14
-rwxr-xr-xchallenge-287/feng-chang/raku/ch-2.raku13
-rwxr-xr-xchallenge-287/feng-chang/raku/test.raku37
4 files changed, 73 insertions, 0 deletions
diff --git a/challenge-287/feng-chang/raku/ch-1.raku b/challenge-287/feng-chang/raku/ch-1.raku
new file mode 100755
index 0000000000..de4d6b70d9
--- /dev/null
+++ b/challenge-287/feng-chang/raku/ch-1.raku
@@ -0,0 +1,9 @@
+#!/bin/env raku
+
+unit sub MAIN(Str:D $str where /^<alnum>*$/);
+
+put max(
+ 3 - .match(/<lower>/).Bool - .match(/<upper>/).Bool - .match(/<digit>/).Bool,
+ .match(/(.)$0$0+/, :g).map({ .chars div 3 }).sum,
+ 6 - .chars,
+) with $str;
diff --git a/challenge-287/feng-chang/raku/ch-1a.raku b/challenge-287/feng-chang/raku/ch-1a.raku
new file mode 100755
index 0000000000..6948a31806
--- /dev/null
+++ b/challenge-287/feng-chang/raku/ch-1a.raku
@@ -0,0 +1,14 @@
+#!/bin/env raku
+
+unit sub MAIN(Str:D $str where /^<alnum>*$/);
+
+my $richness = 3;
+--$richness if $str ~~ /<lower>/;
+--$richness if $str ~~ /<upper>/;
+--$richness if $str ~~ /<digit>/;
+
+my $thickness = $str.match(/(.)$0$0+/, :g).map({ .chars div 3 }).sum;
+
+my $size = 6 - $str.chars;
+
+put max($richness, $thickness, $size);
diff --git a/challenge-287/feng-chang/raku/ch-2.raku b/challenge-287/feng-chang/raku/ch-2.raku
new file mode 100755
index 0000000000..78f38b6870
--- /dev/null
+++ b/challenge-287/feng-chang/raku/ch-2.raku
@@ -0,0 +1,13 @@
+#!/bin/env raku
+
+unit sub MAIN(Str:D $num);
+
+grammar Number {
+ rule TOP { <decimal> || <integer> }
+ token sign { '-' || '+' }
+ token exponent { <[eE]> <sign>? <digit>+ }
+ token integer { <sign>? <digit>+ <exponent>? }
+ rule decimal { <sign>? <digit>+ '.' <digit>* || <sign>? '.' <digit>+ }
+}
+
+put so Number.parse($num);
diff --git a/challenge-287/feng-chang/raku/test.raku b/challenge-287/feng-chang/raku/test.raku
new file mode 100755
index 0000000000..07cdce7e44
--- /dev/null
+++ b/challenge-287/feng-chang/raku/test.raku
@@ -0,0 +1,37 @@
+#!/bin/env raku
+
+# The Weekly Challenge 287
+use Test;
+
+sub pwc-test(Str:D $script, Bool :$deeply? = False, *@input) {
+ my ($expect, $assertion) = @input.splice(*-2, 2);
+ my $p = run $script, |@input, :out;
+ if $deeply {
+ is-deeply $p.out.slurp(:close).chomp.words.Bag, $expect, $assertion;
+ } else {
+ is $p.out.slurp(:close).chomp, $expect, $assertion;
+ }
+}
+
+# Task 1, Strong Password
+pwc-test './ch-1.raku', 'a', 5, 'Strong Password: a => 5';
+pwc-test './ch-1.raku', 'aB2', 3, 'Strong Password: aB2 => 3';
+pwc-test './ch-1.raku', 'PaaSW0rd', 0, 'Strong Password: PaaSW0rd => 0';
+pwc-test './ch-1.raku', 'Paaasw0rd', 1, 'Strong Password: Paaasw0rd => 1';
+pwc-test './ch-1.raku', 'aaaaa', 2, 'Strong Password: aaaaa => 2';
+
+pwc-test './ch-1a.raku', 'a', 5, 'Strong Password: a => 5';
+pwc-test './ch-1a.raku', 'aB2', 3, 'Strong Password: aB2 => 3';
+pwc-test './ch-1a.raku', 'PaaSW0rd', 0, 'Strong Password: PaaSW0rd => 0';
+pwc-test './ch-1a.raku', 'Paaasw0rd', 1, 'Strong Password: Paaasw0rd => 1';
+pwc-test './ch-1a.raku', 'aaaaa', 2, 'Strong Password: aaaaa => 2';
+
+# Task 2, Valid Number
+pwc-test './ch-2.raku', '--', '1', 'True', 'Valid Number: 1 => true';
+pwc-test './ch-2.raku', '--', 'a', 'False', 'Valid Number: a => false';
+pwc-test './ch-2.raku', '--', '.', 'False', 'Valid Number: . => false';
+pwc-test './ch-2.raku', '--', '1.2e4.2', 'False', 'Valid Number: 1.2e4.2 => false';
+pwc-test './ch-2.raku', '--', '-1.', 'True', 'Valid Number: -1. => true';
+pwc-test './ch-2.raku', '--', '+1E-8', 'True', 'Valid Number: +1E-8 => true';
+pwc-test './ch-2.raku', '--', '.44', 'True', 'Valid Number: .44 => true';
+pwc-test './ch-2.raku', '--', '.44e5', 'False', 'Valid Number: .44e5 => false';