diff options
| -rwxr-xr-x | challenge-287/feng-chang/raku/ch-1.raku | 9 | ||||
| -rwxr-xr-x | challenge-287/feng-chang/raku/ch-1a.raku | 14 | ||||
| -rwxr-xr-x | challenge-287/feng-chang/raku/ch-2.raku | 13 | ||||
| -rwxr-xr-x | challenge-287/feng-chang/raku/test.raku | 37 |
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'; |
