use strict; use warnings; use PDL; my $trees = 1 + rcols *DATA, { COLSEP => qr//, KEEP => qr/^\d+$/ }, []; my $size = max shape $trees; $trees-> reshape(( $size ) x 2 ); my $SLTM = identity( $size ) -> cumusumover -> xor( identity $size ) -> transpose; my $t4 = $trees-> dummy( -1, 4 )-> copy; { my @s = map $t4-> slice( "X, X, $_" ), 0 .. 3; $s[ 1 ] .= $s[ 1 ]-> copy-> transpose; $s[ 2 ] .= $s[ 2 ]-> copy-> slice( '-1:0, X' ); $s[ 3 ] .= $s[ 3 ]-> copy-> transpose-> slice( '-1:0, X' ); } my $cummax = maxover $SLTM * $t4-> dummy( 1 ); my $seen = $t4 > $cummax; { my @s = map $seen-> slice( "X, X, $_" ), 0 .. 3; $s[ 1 ] .= $s[ 1 ]-> copy-> transpose; $s[ 2 ] .= $s[ 2 ]-> copy-> slice( '-1:0, X' ); $s[ 3 ] .= $s[ 3 ]-> copy-> slice( '-1:0, X' )-> transpose; } print $seen-> mv( -1, 0 )-> orover-> sum; __END__ 002100030222341303232115221524311502200403234452204125251345024423544443305142410110142101223120110 ... skipped, see 11148843