This returns all maximal ordered subsets:
Output:sub MaxOrderedSubList { my @order= @{ shift @_ }; my %order; @order{@order}= 0..$#order; my @list= @{ shift @_ }; my @wins= ( [] ); my @idx= ( -1 ); my $i= 0; while( 1 ) { do { ++$idx[$i]; if( $#list < $idx[$i] ) { if( --$i < 0 ) { return @wins; } redo; } } while( 0 < $i && $order{$list[$idx[$i]]} <= $order{$list[$idx[$i-1]]} ); if( $#{$wins[0]} <= $i ) { @wins= () if $#{$wins[0]} < $i; push @wins, [ @list[@idx[0..$i]] ]; } $idx[$i+1]= $idx[$i]; ++$i; } } for my $win ( MaxOrderedSubList( [1,2,3,8,4,5,6], [2,1,3,5,4] ) ) { print "@$win\n"; } for my $win ( MaxOrderedSubList( [qw( t h i s w o r k a )], [qw( w h a t i s o k )] ) ) { print "@$win\n"; }
The maximum size for ordered subsets would be 0 + @{( MaxOrderedSubList( [...], [...] ) )[0]} (updated) - tye2 3 5 2 3 4 1 3 5 1 3 4 h i s o k t i s o k
In reply to (tye)Re2: Items in Order
by tye
in thread Items in Order
by artist
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |