$delim = 'A -3 C -4 B';
$array =
['A -4 A','A -1 C','C -4 D','D -4 B','B -3 C','C -2 B','B -1 E'];
+ * + * + * + * + * + *
# Note that in $array, starting from
# second element $array->[1] until $array->[-1],
# the first alphabet ( asterisks *) is actually
# a repeat of the last alphabet ( plus +)
# from the previous element.
####
my $delim = 'A -3 C -4 B';
my $delim_reg = ['A -3 C','C -4 B'];
####
my $delim_reg = ['A -3 C','C -4 B'];
\__i__/ \__j__/ --> sub-regions
my $array =
['A -4 A','A -1 C','C -4 D','D -4 B','B -3 C', 'C -2 B','B -1 E'];
|\_____i_______/ \__j__/|-> Inst 1
|____________________________________________________|
|\_i__/ \_____j________/ |-------> Instance 2
|_________________________|
... till
|\_____i_______/ \_______________j__________________/ |--> Inst 6
|______________________________________________________|
####
my $VAR = [
[['A -4 A', 'A -1 C'], ['C -2 B']], # Ins1
[['A -4 A', 'A -1 C'], ['C -4 D','D -4 B']], # Ins2
[['A -4 A', 'A -1 C'], ['C -4 D','D -4 B','B -4 C','C -2 B']], # Ins3
[['A -4 A', 'A -1 C', 'C -4 D','D -4 B','B -4 C'],['C -2 B']], # Ins4
[['A -1 C'], ['C -4 D', 'D -4 B']], # Ins5
[['A -1 C'], ['C -4 D', 'D -4 B','B -3 C','C -2 B']], # Ins6
]
####
use Data::Dumper;
my $delim = 'A -3 C -4 B';
my $array =
['A -4 A','A -1 C','C -4 D','D -4 B','B -3 C','C -2 B','B -1 E'];
get_delim_region($delim,$array);
sub get_delim_region{
my ($delim,$array) = @_;
my $delim_reg = decomp_str($delim);
# I'm really stuck from here.....
my @instances;
OUT:
foreach my $delim_rg ( @{$delim_reg} ){
my @delimreg;
my $st1 = (split(" ",$delim_rg))[0];
my $st2 = (split(" ",$delim_rg))[2];
IN:
foreach my $i ( 0 .. @{$array}-1 ){
my $tr1 = (split(" ",$array->[$i]))[0];
my $tr2 = (split(" ",$array->[$i]))[2];
if($st1 eq $tr1){
push @delimreg,$array->[$i];
}
elsif($st2 eq $tr2){
push @delimreg,$array->[$i];
next OUT;
}
push @instances, [ @delimreg ];
}
}
print Dumper \@instances;
return ;
}
sub decomp_str{
# This subroutine decompose a string into sub-regions i.e
# from: $delim = 'A -3 C -4 B';
# into: $delim_reg = ['A -3 C','C -4 B'];
# Credit Roy Johnson - fastest
[$_[0] =~ /(?=([a-z]\s*(?:\S+\s*){2}))\S+\s*/gi ]
}