From d104e3d8920d27bad28f085c321509ab130e3663 Mon Sep 17 00:00:00 2001 From: KjetilS Date: Fri, 7 Nov 2025 17:01:07 +0100 Subject: https://theweeklychallenge.org/blog/perl-weekly-challenge-346/ --- challenge-346/kjetillll/perl/ch-1.pl | 64 ++++++++++++++++++++++++++++++++++++ challenge-346/kjetillll/perl/ch-2.pl | 17 ++++++++++ 2 files changed, 81 insertions(+) create mode 100644 challenge-346/kjetillll/perl/ch-1.pl create mode 100644 challenge-346/kjetillll/perl/ch-2.pl diff --git a/challenge-346/kjetillll/perl/ch-1.pl b/challenge-346/kjetillll/perl/ch-1.pl new file mode 100644 index 0000000000..1aab154ad5 --- /dev/null +++ b/challenge-346/kjetillll/perl/ch-1.pl @@ -0,0 +1,64 @@ +sub f { + my($s, $max_so_far) = (@_, 0); + $s =~ s/ ( \( (?1)* \) )+ //x + ? f( $s, length($&) > $max_so_far ? length($&) : $max_so_far ) + : $max_so_far +} + +print f( $$_[0] ) == $$_[1] ? "ok\n" : "error\n" for map [ /\S+/g ], split /\n/, <<''; +(()()) 6 +)()()) 4 +((()))()(((() 8 +))))((()( 2 +()(() 2 +()()(()()() 6 +)))))))))))))))))))))))))))))) 0 +))()))()(()((((((()((()(()(((( 2 +)())))())))((((((())(((((())(( 4 +((()((())(()()(((((()(())(()() 6 +))))((()()))))()()(()(()(((()( 8 +()())))((((()))))))))((()))((( 10 +)()((((()))()(()((()((()))(()) 12 +)(())((())))((((())((()()()))( 14 +((()(())()()))())(((()((())))) 16 +))()))(()(((()))()(()()))((()) 18 +((()(()()(()(()()()(((())()))) 20 +((()))((()()()((())((()))()))( 22 +()(((())))((()(())()))())(())) 24 +)((((())())((())((((()())))))( 26 +(()()()(())((())(()())()))())( 28 +(()()(((()())(((()))))(())())) 30 +)))())()))(()(()((((()(((()((((((((((((((((((((((((((()((((()((((()( 2 +))))(()))))()))())()))(()()(((((((()(((((())((((())((()((())(()(()(( 4 +)()())(())())((()))))(((()())(((())(((((((((((())(()()((()(())(()((( 6 +)()))()()))()())))(()()(((()(()(()((())(((()()()(()((()(()(())()(()( 8 +))()()))))()())))()())))(())()()())))(())(())))))())))())()(()(((()) 10 +)))()())(()()))))(())(()))((())())()())((()()()(((((())())(()()(((() 12 +())((())()))))))))()))()))((()))((()))()((())()()((((()))((((((())(( 14 +)())(()))))))()(((()))())))(())())((()((()))))()())))(()(()))))(()(( 16 +(())))(()())((())((((()))(()()((((()(())))(((()(((())((()()())(()))( 18 +))((()()(((()))))(()(((()(()))(())(()()(()((((())))(()())()()()((((( 20 +))(()()))))((()((((()))))())(())))()()((())((()(())(()(())((()()()(( 22 +)()())())(())))))(()()((())((()())))))((()(()((())((()(())())()()))( 24 +()))(()()())))(())(()(()(()(()))())((((()()(())()((()))(()()(()))((( 26 +))))()))())())()()()(((((())())))()()())()((((((((()(()(((()(((((((( 28 +()((((()((()))())(())(((((((()(()(())(((())()))))())))(((()))((()()( 30 +)()(((((()))((()(()()))(())((()(((()()()(()))())())(()()()))((()()() 32 +((())))()))(()(((()((()))(())())))((())))(())))(()())((())(())(()()( 34 +((()())(()((())))))((((())((())))(((((()))()()))())(()))((()(((((()) 36 +)()((()()))()(((()((()())())((()))))()))))))()(()()(())()))))()))()( 38 +(()()((())))((()())()((((()))(()))())())))()(()()(())))()((()()(()(( 40 +)((())()()())()(()()(()()(()(())((()()()(())((()))())(()(()))((()))) 42 +)(())(()))((())()())()((())()()(((()((())()())()(())())((())()))())( 44 +)()(()))()))))))))())(()(((()((()())()))(((()))()()()(()))(()()))()) 46 +)(())())))()()((((()()(((((()()(())()))))))())()))((()))()))))(())(( 48 +)()))())(()(())(()()((())()()()(()()())())(())())())(())())))((())() 50 +(()))()((()()(()((()()()))()())((()))((())()(())))()(())))))((((()() 52 +))(()))())())((()(())(()()())((())()()))()((()(()))())(()())((())()) 54 +(((())(())((((())(()(((()(())))))(())))())()())(()()))())((()())(()( 56 +(((()()())()(((())((()()()((()())))((()(()))))))()()))()()))()())))( 58 +()((((()()(((((())())())))())())(())()(((())(((()))))((())))()()((() 60 +(())(((((())())()())((()(())((((())()())()())))((())(()(())())()())) 62 +))((((())())(()())(()())(()()()(()((())))(()))(()()(())(()))))(())(( 64 +)(()(()()(()))((()((())()(((()(()))))((((())))))())(((())(()())))))( 66 +(((())))(()(()())(()(())))(((((((())()())))()(((()(()())()))))()))() 68 diff --git a/challenge-346/kjetillll/perl/ch-2.pl b/challenge-346/kjetillll/perl/ch-2.pl new file mode 100644 index 0000000000..ecec17007c --- /dev/null +++ b/challenge-346/kjetillll/perl/ch-2.pl @@ -0,0 +1,17 @@ +sub f { + my($str, $target) = @_; + grep !/0\d/ && eval == $target, + map $str =~ s{ \d\B }{ [ $& . substr(' +-*', $_ % 4,1), $_ >>= 2 ]->[0] }gxer =~ s/ //gr, + 0 .. 4 ** length($str) / 4 - 1 +} + +use Test::More; +is_deeply [ sort( f( @$_{'str','target'} ) ) ], + [ sort( @{ @$_{'output'} } ) ] +for {str => "123", target => 6, output => ["1*2*3", "1+2+3"] }, + {str => "105", target => 5, output => ["1*0+5", "10-5"] }, + {str => "232", target => 8, output => ["2*3+2", "2+3*2"] }, + {str => "1234", target => 10, output => ["1*2*3+4", "1+2+3+4"] }, + {str => "1001", target => 2, output => ["1+0*0+1", "1+0+0+1", "1+0-0+1", "1-0*0+1", "1-0+0+1", "1-0-0+1"] }; +done_testing; + -- cgit From 16dc4478f22c5a77c42c74891730e885c920cb82 Mon Sep 17 00:00:00 2001 From: KjetilS Date: Fri, 7 Nov 2025 17:38:55 +0100 Subject: https://theweeklychallenge.org/blog/perl-weekly-challenge-346/ --- challenge-346/kjetillll/perl/ch-2.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-346/kjetillll/perl/ch-2.pl b/challenge-346/kjetillll/perl/ch-2.pl index ecec17007c..eb9b945f1d 100644 --- a/challenge-346/kjetillll/perl/ch-2.pl +++ b/challenge-346/kjetillll/perl/ch-2.pl @@ -1,7 +1,7 @@ sub f { my($str, $target) = @_; grep !/0\d/ && eval == $target, - map $str =~ s{ \d\B }{ [ $& . substr(' +-*', $_ % 4,1), $_ >>= 2 ]->[0] }gxer =~ s/ //gr, + map $str =~ s{ \d\B }{ [ $& . ['','+','-','*']->[$_ % 4], $_ >>= 2 ]->[0] }gxer, 0 .. 4 ** length($str) / 4 - 1 } -- cgit