diff options
| -rw-r--r-- | challenge-346/kjetillll/perl/ch-1.pl | 64 | ||||
| -rw-r--r-- | challenge-346/kjetillll/perl/ch-2.pl | 17 |
2 files changed, 81 insertions, 0 deletions
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; + |
