diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2024-09-22 23:56:02 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-22 23:56:02 +0100 |
| commit | 8c74e54fead7956d03781eabfe0b59268359a197 (patch) | |
| tree | c20c4f470668e2ca418b1b3fb81afbb999166654 | |
| parent | a27dc5f5d4c66e571ad85cc0bb6a79008b800833 (diff) | |
| parent | 2083b68e738a6e887636228a69f7059c4133d3a8 (diff) | |
| download | perlweeklychallenge-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.md | 44 | ||||
| -rwxr-xr-x | challenge-287/matthias-muth/perl/ch-1.pl | 91 | ||||
| -rwxr-xr-x | challenge-287/matthias-muth/perl/ch-2.pl | 11 |
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'; |
