aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2024-09-22 23:56:02 +0100
committerGitHub <noreply@github.com>2024-09-22 23:56:02 +0100
commit8c74e54fead7956d03781eabfe0b59268359a197 (patch)
treec20c4f470668e2ca418b1b3fb81afbb999166654
parenta27dc5f5d4c66e571ad85cc0bb6a79008b800833 (diff)
parent2083b68e738a6e887636228a69f7059c4133d3a8 (diff)
downloadperlweeklychallenge-club-8c74e54fead7956d03781eabfe0b59268359a197.tar.gz
perlweeklychallenge-club-8c74e54fead7956d03781eabfe0b59268359a197.tar.bz2
perlweeklychallenge-club-8c74e54fead7956d03781eabfe0b59268359a197.zip
Merge pull request #10892 from MatthiasMuth/muthm-287
Challenge 287 Task 1 and 2 solutions in Perl by Matthias Muth - Second update
-rw-r--r--challenge-287/matthias-muth/README.md44
-rwxr-xr-xchallenge-287/matthias-muth/perl/ch-1.pl91
-rwxr-xr-xchallenge-287/matthias-muth/perl/ch-2.pl11
3 files changed, 74 insertions, 72 deletions
diff --git a/challenge-287/matthias-muth/README.md b/challenge-287/matthias-muth/README.md
index e71685fb46..073176fc91 100644
--- a/challenge-287/matthias-muth/README.md
+++ b/challenge-287/matthias-muth/README.md
@@ -91,7 +91,7 @@ Some more examples:
These examples show that for dealing with longer sequences, *replacing* characters is more efficient than *inserting* characters.<br/>
This leads us to some more test cases:<br/>
- `aaa1B` => 1 (e.g. *replacing* one `a` by `b` to get `aab1B`)<br/> `aaaa1B` => 1 (e.g. *replacing* one `a` by `b` to get `aaba1B`)<br/> `aaaaa1B` => 1 (e.g. *replacing* one `a` by `b` to get `aabaa1B`)<br/> `aaaaaa1B` => 2 (e.g. *replacing* 2 times `a` by `b` to get `aabaab1B`)<br/> `aaaaaaa1B` => 2 (e.g. *replacing* 2 times `a` by `b` to get `aabaaba1B`)<br/> `aaaaaaaa1B` => 2 (e.g. *replacing* 2 times `a` by `b` to get `aabaabaa1B`)<br/>
+ `aaa1B` => 1 (e.g. *inserting* one `b` to get `aaba1B`)<br/> `aaaa1B` => 1 (e.g. *replacing* one `a` by `b` to get `aaba1B`)<br/> `aaaaa1B` => 1 (e.g. *replacing* one `a` by `b` to get `aabaa1B`)<br/> `aaaaaa1B` => 2 (e.g. *replacing* 2 times `a` by `b` to get `aabaab1B`)<br/> `aaaaaaa1B` => 2 (e.g. *replacing* 2 times `a` by `b` to get `aabaaba1B`)<br/> `aaaaaaaa1B` => 2 (e.g. *replacing* 2 times `a` by `b` to get `aabaabaa1B`)<br/>
`aaaaaaaaaaaa1B` => 4 (e.g. *replacing* 4 times `a` by `b` to get `aabaabaabaab1B`)
#### Up to three birds with one shot!
@@ -113,7 +113,7 @@ Similarly, we also can solve *two* problems at the same time by *replacing* one
* shorten a long repeating character sequence by choosing a 'third' character to be replaced, which will 'neutralize' the two characters preceding it.
For example (and yet another test case):<br/>
- `aaaabC` => `aa1aabC` => 1 change only for solving two shortcomings.
+ `aaaabC` => `aa1abC` => 1 change only for solving two shortcomings.
#### Solution structure
@@ -237,26 +237,26 @@ sub strong_password( $str ) {
The `ch-1.pl` file also contains switchable debugging output, and all the test cases. This is its output:
```terminal
-ok 1 - Example 1: strong_password( "a" ) == 5
-ok 2 - Example 2: strong_password( "aB2" ) == 3
-ok 3 - Example 3: strong_password( "PaaSW0rd" ) == 0
-ok 4 - Example 4: strong_password( "Paaasw0rd" ) == 1
-ok 5 - Example 5: strong_password( "aaaaa" ) == 2 (like "aa1aaB")
-ok 6 - Extra 1: strong_password( "" ) == 6 (like "1aBcde")
-ok 7 - Extra 2: strong_password( "abcABC" ) == 1 (like "a1cABC")
-ok 8 - Extra 3: strong_password( "abcdef" ) == 2 (like "a1Adef")
-ok 9 - Extra 4: strong_password( "aaa1B" ) == 1 (like "aab1B")
-ok 10 - Extra 5: strong_password( "aaaa1B" ) == 1 (like "aaba1B")
-ok 11 - Extra 6: strong_password( "aaaaa1B" ) == 1 (like "aabaa1B")
-ok 12 - Extra 7: strong_password( "aaaaaa1B" ) == 2 (like "aabaab1B")
-ok 13 - Extra 8: strong_password( "aaaaaaa1B" ) == 2 (like "aabaaba1B")
-ok 14 - Extra 9: strong_password( "aaaaaaaa1B" ) == 2 (like "aabaabaa1B")
-ok 15 - Extra 10: strong_password( "aaaaaaaaaaaa1B" ) == 4 (like "aabaabaabaab1B")
-ok 16 - Extra 11: strong_password( "aaaBc" ) == 1 (like "aa1aBc")
-ok 17 - Extra 12: strong_password( "aaaabC" ) == 1 (like "aa1aabC")
-ok 18 - Extra 13: strong_password( "aaaacccc" ) == 2 (like "aa1accBc")
-ok 19 - Extra 14: strong_password( "aaaaaabbbbbb" ) == 4 (like "aa1aaXbbYbbY")
-ok 20 - Extra 15: strong_password( "aaacc" ) == 2 (like "aa1ccX")
+ok 1 - Example 1: strong_password( 'a' ) == 5
+ok 2 - Example 2: strong_password( 'aB2' ) == 3
+ok 3 - Example 3: strong_password( 'PaaSW0rd' ) == 0
+ok 4 - Example 4: strong_password( 'Paaasw0rd' ) == 1
+ok 5 - Example 5: strong_password( 'aaaaa' ) == 2 (like 'aa1aaB')
+ok 6 - Extra 1: strong_password( '' ) == 6 (like '1aBcde')
+ok 7 - Extra 2: strong_password( 'abcABC' ) == 1 (like 'a1cABC')
+ok 8 - Extra 3: strong_password( 'abcdef' ) == 2 (like 'a1Adef')
+ok 9 - Extra 4: strong_password( 'aaa1B' ) == 1 (like 'aaba1B' using one insert)
+ok 10 - Extra 5: strong_password( 'aaaa1B' ) == 1 (like 'aaba1B' using one replace)
+ok 11 - Extra 6: strong_password( 'aaaaa1B' ) == 1 (like 'aabaa1B')
+ok 12 - Extra 7: strong_password( 'aaaaaa1B' ) == 2 (like 'aabaab1B')
+ok 13 - Extra 8: strong_password( 'aaaaaaa1B' ) == 2 (like 'aabaaba1B')
+ok 14 - Extra 9: strong_password( 'aaaaaaaa1B' ) == 2 (like 'aabaabaa1B')
+ok 15 - Extra 10: strong_password( 'aaaaaaaaaaaa1B' ) == 4 (like 'aabaabaabaab1B')
+ok 16 - Extra 11: strong_password( 'aaabC' ) == 1 (like 'aa1abC' using one insert)
+ok 17 - Extra 12: strong_password( 'aaaabC' ) == 1 (like 'aa1abC')
+ok 18 - Extra 13: strong_password( 'aaaacccc' ) == 2 (like 'aa1accBc')
+ok 19 - Extra 14: strong_password( 'aaaaaabbbbbb' ) == 4 (like 'aa1aaXbbYbbY')
+ok 20 - Extra 15: strong_password( 'aaacc' ) == 2 (like 'aa1ccX')
1..20
```
diff --git a/challenge-287/matthias-muth/perl/ch-1.pl b/challenge-287/matthias-muth/perl/ch-1.pl
index c1d702eca8..6c33bd9569 100755
--- a/challenge-287/matthias-muth/perl/ch-1.pl
+++ b/challenge-287/matthias-muth/perl/ch-1.pl
@@ -78,50 +78,51 @@ sub strong_password( $str ) {
}
use Test2::V0 qw( -no_srand );
-is strong_password( "a" ), 5,
- 'Example 1: strong_password( "a" ) == 5';
-is strong_password( "aB2" ), 3,
- 'Example 2: strong_password( "aB2" ) == 3';
-is strong_password( "PaaSW0rd" ), 0,
- 'Example 3: strong_password( "PaaSW0rd" ) == 0';
-is strong_password( "Paaasw0rd" ), 1,
- 'Example 4: strong_password( "Paaasw0rd" ) == 1';
-is strong_password( "aaaaa" ), 2,
- 'Example 5: strong_password( "aaaaa" ) == 2 (like "aa1aaB")';
-
-is strong_password( "" ), 6,
- 'Extra 1: strong_password( "" ) == 6 (like "1aBcde")';
-
-is strong_password( "abcABC" ), 1,
- 'Extra 2: strong_password( "abcABC" ) == 1 (like "a1cABC")';
-is strong_password( "abcdef" ), 2,
- 'Extra 3: strong_password( "abcdef" ) == 2 (like "a1Adef")';
-
-is strong_password( "aaa1B" ), 1,
- 'Extra 4: strong_password( "aaa1B" ) == 1 (like "aab1B")';
-is strong_password( "aaaa1B" ), 1,
- 'Extra 5: strong_password( "aaaa1B" ) == 1 (like "aaba1B")';
-is strong_password( "aaaaa1B" ), 1,
- 'Extra 6: strong_password( "aaaaa1B" ) == 1 (like "aabaa1B")';
-is strong_password( "aaaaaa1B" ), 2,
- 'Extra 7: strong_password( "aaaaaa1B" ) == 2 (like "aabaab1B")';
-is strong_password( "aaaaaaa1B" ), 2,
- 'Extra 8: strong_password( "aaaaaaa1B" ) == 2 (like "aabaaba1B")';
-is strong_password( "aaaaaaaa1B" ), 2,
- 'Extra 9: strong_password( "aaaaaaaa1B" ) == 2 (like "aabaabaa1B")';
-is strong_password( "aaaaaaaaaaaa1B" ), 4,
- 'Extra 10: strong_password( "aaaaaaaaaaaa1B" ) == 4 (like "aabaabaabaab1B")';
-
-is strong_password( "aaaBc" ), 1,
- 'Extra 11: strong_password( "aaaBc" ) == 1 (like "aa1aBc")';
-is strong_password( "aaaabC" ), 1,
- 'Extra 12: strong_password( "aaaabC" ) == 1 (like "aa1aabC")';
-
-is strong_password( "aaaacccc" ), 2,
- 'Extra 13: strong_password( "aaaacccc" ) == 2 (like "aa1accBc")';
-is strong_password( "aaaaaabbbbbb" ), 4,
- 'Extra 14: strong_password( "aaaaaabbbbbb" ) == 4 (like "aa1aaXbbYbbY")';
-is strong_password( "aaacc" ), 2,
- 'Extra 15: strong_password( "aaacc" ) == 2 (like "aa1ccX")';
+
+is strong_password( 'a' ), 5,
+ "Example 1: strong_password( 'a' ) == 5";
+is strong_password( 'aB2' ), 3,
+ "Example 2: strong_password( 'aB2' ) == 3";
+is strong_password( 'PaaSW0rd' ), 0,
+ "Example 3: strong_password( 'PaaSW0rd' ) == 0";
+is strong_password( 'Paaasw0rd' ), 1,
+ "Example 4: strong_password( 'Paaasw0rd' ) == 1";
+is strong_password( 'aaaaa' ), 2,
+ "Example 5: strong_password( 'aaaaa' ) == 2 (like 'aa1aaB')";
+
+is strong_password( '' ), 6,
+ "Extra 1: strong_password( '' ) == 6 (like '1aBcde')";
+
+is strong_password( 'abcABC' ), 1,
+ "Extra 2: strong_password( 'abcABC' ) == 1 (like 'a1cABC')";
+is strong_password( 'abcdef' ), 2,
+ "Extra 3: strong_password( 'abcdef' ) == 2 (like 'a1Adef')";
+
+is strong_password( 'aaa1B' ), 1,
+ "Extra 4: strong_password( 'aaa1B' ) == 1 (like 'aaba1B' using one insert)";
+is strong_password( 'aaaa1B' ), 1,
+ "Extra 5: strong_password( 'aaaa1B' ) == 1 (like 'aaba1B' using one replace)";
+is strong_password( 'aaaaa1B' ), 1,
+ "Extra 6: strong_password( 'aaaaa1B' ) == 1 (like 'aabaa1B')";
+is strong_password( 'aaaaaa1B' ), 2,
+ "Extra 7: strong_password( 'aaaaaa1B' ) == 2 (like 'aabaab1B')";
+is strong_password( 'aaaaaaa1B' ), 2,
+ "Extra 8: strong_password( 'aaaaaaa1B' ) == 2 (like 'aabaaba1B')";
+is strong_password( 'aaaaaaaa1B' ), 2,
+ "Extra 9: strong_password( 'aaaaaaaa1B' ) == 2 (like 'aabaabaa1B')";
+is strong_password( 'aaaaaaaaaaaa1B' ), 4,
+ "Extra 10: strong_password( 'aaaaaaaaaaaa1B' ) == 4 (like 'aabaabaabaab1B')";
+
+is strong_password( 'aaaBc' ), 1,
+ "Extra 11: strong_password( 'aaabC' ) == 1 (like 'aa1abC' using one insert)";
+is strong_password( 'aaaabC' ), 1,
+ "Extra 12: strong_password( 'aaaabC' ) == 1 (like 'aa1abC')";
+
+is strong_password( 'aaaacccc' ), 2,
+ "Extra 13: strong_password( 'aaaacccc' ) == 2 (like 'aa1accBc')";
+is strong_password( 'aaaaaabbbbbb' ), 4,
+ "Extra 14: strong_password( 'aaaaaabbbbbb' ) == 4 (like 'aa1aaXbbYbbY')";
+is strong_password( 'aaacc' ), 2,
+ "Extra 15: strong_password( 'aaacc' ) == 2 (like 'aa1ccX')";
done_testing;
diff --git a/challenge-287/matthias-muth/perl/ch-2.pl b/challenge-287/matthias-muth/perl/ch-2.pl
index ed9a331159..757747f5d3 100755
--- a/challenge-287/matthias-muth/perl/ch-2.pl
+++ b/challenge-287/matthias-muth/perl/ch-2.pl
@@ -10,16 +10,17 @@
use v5.36;
-sub valid_number( $str ) {
- return $str =~ /^ [+-]? (?: \.\d+ | \d+(?:\.\d*)? ) (?: [Ee] [+-]? \d+ )? $/xa;
-}
-
use Regexp::Common;
-sub Xvalid_number( $str ) {
+sub valid_number( $str ) {
return $str =~ /^$RE{num}{real}$/;
}
+sub valid_number_usimg_re( $str ) {
+ return
+ $str =~ /^ [+-]? (?: \.\d+ | \d+(?:\.\d*)? ) (?: [Ee] [+-]? \d+ )? $/xa;
+}
+
use Test2::V0 qw( -no_srand );
ok valid_number( 1 ),
'Example 1: valid_number( 1 ) is true';