It won't win "most compact", but it might prove more efficient than many:
#! perl -slw use strict; sub z { my $soFar = 1; my $lastC = substr $_[0], 0, 1; my( $lastP, $bestN, $bestP ) = ( 0 ) x 3; for my $p ( 1 .. length( $_[0] )-1 ) { my $this = substr $_[0], $p, 1; my $d = abs( $this - $lastC ); if( $d != 1 and $d != 9 ) { $soFar = 1; $lastP = $p; } ++$soFar; if( $soFar > $bestN ) { $bestN = $soFar, $bestP = $lastP; } $lastC = $this; } return $bestN, $bestP; } while( <DATA> ) { chomp; print; my( $l, $p ) = z( $_ ); print ' ' x $p, substr( $_, $p, $l ), "\t", $l, "\n"; } __DATA__ 01234567890123456789 78901234567890123456 98765432109876543210 21098765432109876543 01234567890987654321 012345678890123456789 789012345677890123456 987654321099876543210 210987654322109876543 012345678900987654321 012345678909876543210
In the absence of an answer re: 090, I've noted your abs(1) criteria. Also, first of equal longest.
Could be simplified if you don't need to know where the longest occurs.
Output:
C:\test>junk 01234567890123456789 01234567890123456789 20 78901234567890123456 78901234567890123456 20 98765432109876543210 98765432109876543210 20 21098765432109876543 21098765432109876543 20 01234567890987654321 01234567890987654321 20 012345678890123456789 890123456789 13 789012345677890123456 78901234567 11 987654321099876543210 98765432109 11 210987654322109876543 21098765432 11 012345678900987654321 01234567890 11 012345678909876543210 012345678909876543210 21
In reply to Re: Find Length Of Longest Ascending/Descending Sequence
by BrowserUk
in thread Find Length Of Longest Ascending/Descending Sequence
by Limbic~Region
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |