diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2024-10-02 21:10:07 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-02 21:10:07 +0100 |
| commit | 18fc202c4a8a00a116f516795b660dcc0616f8b8 (patch) | |
| tree | c794c894d27cabf274520ae0a8c830704444d681 /challenge-287 | |
| parent | eaefd6a35935cf175ba3e13fb6687367881cd1c9 (diff) | |
| parent | 300178b5020f30745c6c2b5c84d511a72811b047 (diff) | |
| download | perlweeklychallenge-club-18fc202c4a8a00a116f516795b660dcc0616f8b8.tar.gz perlweeklychallenge-club-18fc202c4a8a00a116f516795b660dcc0616f8b8.tar.bz2 perlweeklychallenge-club-18fc202c4a8a00a116f516795b660dcc0616f8b8.zip | |
Merge pull request #10943 from jaldhar/challenge-287
Challenge 287 by Jaldhar H. Vyas.
Diffstat (limited to 'challenge-287')
| -rw-r--r-- | challenge-287/jaldhar-h-vyas/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-287/jaldhar-h-vyas/perl/ch-1.pl | 50 | ||||
| -rwxr-xr-x | challenge-287/jaldhar-h-vyas/perl/ch-2.pl | 24 | ||||
| -rwxr-xr-x | challenge-287/jaldhar-h-vyas/raku/ch-1.raku | 48 | ||||
| -rwxr-xr-x | challenge-287/jaldhar-h-vyas/raku/ch-2.raku | 20 |
5 files changed, 143 insertions, 0 deletions
diff --git a/challenge-287/jaldhar-h-vyas/blog.txt b/challenge-287/jaldhar-h-vyas/blog.txt new file mode 100644 index 0000000000..9cb281cd23 --- /dev/null +++ b/challenge-287/jaldhar-h-vyas/blog.txt @@ -0,0 +1 @@ +https://www.braincells.com/perl/2024/10/perl_weekly_challenge_week_287.html diff --git a/challenge-287/jaldhar-h-vyas/perl/ch-1.pl b/challenge-287/jaldhar-h-vyas/perl/ch-1.pl new file mode 100755 index 0000000000..647b997171 --- /dev/null +++ b/challenge-287/jaldhar-h-vyas/perl/ch-1.pl @@ -0,0 +1,50 @@ +#!/usr/bin/perl +use v5.38; + +sub pickOne($str) { + return substr $str, int(rand(length $str)), 1; +} + +my $str = shift; +my $steps = 0; + +my $digits = join q{}, '0' .. '9'; +my $lower = join q{}, 'a' .. 'z'; +my $upper = join q{}, 'A' .. 'Z'; +my $all = $digits . $lower . $upper; +my $nondigits = $lower . $upper; +my $nonlower = $digits . $upper; +my $nonupper = $digits . $lower; + +while ($str =~ /((.)\g{-1}\g{-1})/) { + my $chars = (index($lower, $2) > -1) + ? $nonlower + : (index($upper, $2) > -1) + ? $nonupper + : $digits; + my $c = $1; + $str =~ s/$c/substr($c, 0, 2) . pickOne($chars)/e; + $steps++; +} + +if ($str !~ / [$digits] /x) { + $str .= pickOne($digits); + $steps++; +} + +if ($str !~ / [$lower] /x) { + $str .= pickOne($lower); + $steps++; +} + +if ($str !~ / [$upper] /x) { + $str .= pickOne($upper); + $steps++; +} + +while (length $str < 6) { + $str .= pickOne($all); + $steps++; +} + +say $steps;
\ No newline at end of file diff --git a/challenge-287/jaldhar-h-vyas/perl/ch-2.pl b/challenge-287/jaldhar-h-vyas/perl/ch-2.pl new file mode 100755 index 0000000000..f8cd6b7f24 --- /dev/null +++ b/challenge-287/jaldhar-h-vyas/perl/ch-2.pl @@ -0,0 +1,24 @@ +#!/usr/bin/perl +use v5.38; +use Parse::RecDescent; + +my $str = shift // die "Need a number\n"; + +my $grammar = q{ + startrule: number + + number: decimal1 + | decimal2 + | integer + decimal1: sign(?) digit(s) decimalpoint + decimal2: sign(?) decimalpoint digit(s) + integer: sign(?) digit(s) exponent(?) + + decimalpoint: '.' + exponent: /[eE]/ integer + sign: /[-+]/ + digit: /\d/ +}; + +my $number = Parse::RecDescent->new($grammar)->startrule(\$str); +say 0+(length $str) ? 'false' : 'true'; diff --git a/challenge-287/jaldhar-h-vyas/raku/ch-1.raku b/challenge-287/jaldhar-h-vyas/raku/ch-1.raku new file mode 100755 index 0000000000..8964efb38c --- /dev/null +++ b/challenge-287/jaldhar-h-vyas/raku/ch-1.raku @@ -0,0 +1,48 @@ +#!/usr/bin/raku + + +sub MAIN( + Str $str is copy +) { + my $steps = 0; + + my $digits = ('0' .. '9').join; + my $lower = ('a' .. 'z').join; + my $upper = ('A' .. 'Z').join; + my $all = $digits ~ $lower ~ $upper; + my $nondigits = $lower ~ $upper; + my $nonlower = $digits ~ $upper; + my $nonupper = $digits ~ $lower; + + while $str ~~ /(.)$0$0/ { + my $chars = $0.Str ~~ $lower + ?? $nonlower + !! $0.Str ~~ $upper + ?? $nonupper + !! $digits; + $str = $str.subst($/, $/.substr(0, 2) ~ $chars.comb.pick(1).first); + $steps++; + } + + if $str !~~ / @($digits.comb) / { + $str ~= $digits.comb.pick(1).first; + $steps++; + } + + if $str !~~ / @($lower.comb) / { + $str ~= $lower.comb.pick(1).first; + $steps++; + } + + if $str !~~ / @($upper.comb) / { + $str ~= $upper.comb.pick(1).first; + $steps++; + } + + while $str.chars < 6 { + $str ~= $all.comb.pick(1).first; + $steps++; + } + + say $steps; +} diff --git a/challenge-287/jaldhar-h-vyas/raku/ch-2.raku b/challenge-287/jaldhar-h-vyas/raku/ch-2.raku new file mode 100755 index 0000000000..c2941fd114 --- /dev/null +++ b/challenge-287/jaldhar-h-vyas/raku/ch-2.raku @@ -0,0 +1,20 @@ +#!/usr/bin/raku + +sub MAIN( + Str $str #= a string representation of a number +) { + grammar Number { + rule TOP { <number> } + rule number { <integer> | <decimal> } + rule integer { <sign>?<digit>+<exponent>? } + rule decimal { <sign>?<digit>+<decimalpoint><digit>* | <sign>?<decimalpoint><digit>+ } + rule exponent { <exponentsymbol><integer> } + + token sign { <[+ -]> } + token digit { <[0 .. 9]> } + token decimalpoint { <[.]> } + token exponentsymbol { <[e E]> } + } + + Number.parse($str).so.say; +} |
