aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2024-10-02 21:10:07 +0100
committerGitHub <noreply@github.com>2024-10-02 21:10:07 +0100
commit18fc202c4a8a00a116f516795b660dcc0616f8b8 (patch)
treec794c894d27cabf274520ae0a8c830704444d681
parenteaefd6a35935cf175ba3e13fb6687367881cd1c9 (diff)
parent300178b5020f30745c6c2b5c84d511a72811b047 (diff)
downloadperlweeklychallenge-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.
-rw-r--r--challenge-287/jaldhar-h-vyas/blog.txt1
-rwxr-xr-xchallenge-287/jaldhar-h-vyas/perl/ch-1.pl50
-rwxr-xr-xchallenge-287/jaldhar-h-vyas/perl/ch-2.pl24
-rwxr-xr-xchallenge-287/jaldhar-h-vyas/raku/ch-1.raku48
-rwxr-xr-xchallenge-287/jaldhar-h-vyas/raku/ch-2.raku20
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;
+}