From fced8c82c54301c4c10e12c92822d9d227b22a92 Mon Sep 17 00:00:00 2001 From: Luis Mochan Date: Mon, 16 Sep 2024 13:31:54 -0600 Subject: Solve PWC287 --- challenge-287/wlmb/blog.txt | 1 + challenge-287/wlmb/perl/ch-1.pl | 22 ++++++++++++++++++++++ challenge-287/wlmb/perl/ch-2.pl | 21 +++++++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 challenge-287/wlmb/blog.txt create mode 100755 challenge-287/wlmb/perl/ch-1.pl create mode 100755 challenge-287/wlmb/perl/ch-2.pl diff --git a/challenge-287/wlmb/blog.txt b/challenge-287/wlmb/blog.txt new file mode 100644 index 0000000000..9076be72ee --- /dev/null +++ b/challenge-287/wlmb/blog.txt @@ -0,0 +1 @@ +https://wlmb.github.io/2024/09/16/PWC287/ diff --git a/challenge-287/wlmb/perl/ch-1.pl b/challenge-287/wlmb/perl/ch-1.pl new file mode 100755 index 0000000000..06db6ab211 --- /dev/null +++ b/challenge-287/wlmb/perl/ch-1.pl @@ -0,0 +1,22 @@ +#!/usr/bin/env perl +# Perl weekly challenge 287 +# Task 1: Strong Password +# +# See https://wlmb.github.io/2024/09/16/PWC287/#task-1-strong-password +use v5.36; +use List::Util qw(max); +die <<~"FIN" unless @ARGV; + Usage: $0 P1 P2... + to find the minimum number of steps required to convert + the passwords Pi into strong passwords + FIN +for(@ARGV){ + my $single_triad=/^(.)\1\1$/; + my $missing_classes=(!/[a-z]/)+(!/[A-Z]/)+(!/[0-9]/); + my $triads=0; + ++$triads while /(.)\1\1/g; + my $missing_classes=max($missing_classes-$triads, 0); + my $missing_chars=max(6-(length)-$missing_classes, 0); + my $steps=$single_triad?3:$triads+$missing_chars+$missing_classes; + say "$_ -> $steps"; +} diff --git a/challenge-287/wlmb/perl/ch-2.pl b/challenge-287/wlmb/perl/ch-2.pl new file mode 100755 index 0000000000..f0a3244324 --- /dev/null +++ b/challenge-287/wlmb/perl/ch-2.pl @@ -0,0 +1,21 @@ +#!/usr/bin/env perl +# Perl weekly challenge 287 +# Task 2: Valid Number +# +# See https://wlmb.github.io/2024/09/16/PWC287/#task-2-valid-number +use v5.36; +my $re = qr/ + ^ # start of string + (\+|-)? # optional sign + (\d+ # integer + | \d+\.\d* # or integer part and optional decimal part + | \d*\.\d+ # or optional integer part and decimal part + ) + ( # exponent + (e|E) # letter e or E + (\+|-)? # optional sign + \d+ # integer exponent + )? # is optional + $ # end of string + /x; +say "$_ -> ", /$re/?"true":"false" for (@ARGV); -- cgit