my $max_weight = 10;
my %items = ( # value, weight: positive integers
'a' => { v => 1, w => 2 },
'b' => { v => 11, w => 9 },
);
####
first half second half
$1 $2
attempt 1: v vvvvvvvvvvv --> ww + wwwwwwwww = 11, not enough w's!
backtrack
attempt 2: v --> ww = 2, enough w's for this, so accepted
##
##
# used to be:
# my $re = sprintf "%s0\n(?=\n%s)\n", $left, $right;
use Data::Dumper;
my $re = sprintf qq[%s0\n(?{ print "trying " . Dumper \\%%+})\n(?=\n%s)\n],
$left, $right;
print $re;
##
##
STRING:
vvvvvvvvvvvv0wwwwwwwwww
REGEX:
(?(?:vvvvvvvvvvv)?)
(?(?:v)?)
0
(?{ print "trying " . Dumper \%+})
(?=
(?(?{ $1 })wwwwwwwww|)
(?(?{ $2 })ww|)
)
OUTPUT:
trying $VAR1 = {
'a' => 'v',
'b' => 'vvvvvvvvvvv'
};
trying $VAR1 = {
'a' => '',
'b' => 'vvvvvvvvvvv'
};
##
##
STRING:
vvvvvvvvvvvv0wwwwwwwwww
REGEX:
(?(?:v)?)
(?(?:vvvvvvvvvvv)?)
0
(?{ print "trying " . Dumper \%+})
(?=
(?(?{ $1 })ww|)
(?(?{ $2 })wwwwwwwww|)
)
OUTPUT:
trying $VAR1 = {
'a' => 'v',
'b' => 'vvvvvvvvvvv'
};
trying $VAR1 = {
'a' => '',
'b' => 'vvvvvvvvvvv'
};
##
##
^
(?(?:v)?)
(?(?:vvvvvvvvvvv)?)
v*
0
##
##
(?(?:v)?)
(?(?:vvvvvvvvvvv)?)
0