aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-346/kjetillll/perl/ch-1.pl64
-rw-r--r--challenge-346/kjetillll/perl/ch-2.pl17
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;
+