in reply to Re^2: Find Length Of Longest Ascending/Descending Sequence
in thread Find Length Of Longest Ascending/Descending Sequence

Capturing in one go will return qw(123 56 543) instead of qw(123 56 6543);

Which isn't a problem when you just want the length. The result is 1 more than the length of the longest capture. That's why I increment $longest at the end.

...or rather, that's why I was planning on incrementing $longest at the end. Fixed.

  • Comment on Re^3: Find Length Of Longest Ascending/Descending Sequence

Replies are listed 'Best First'.
Re^4: Find Length Of Longest Ascending/Descending Sequence
by wind (Priest) on May 09, 2011 at 21:57 UTC
    The result is 1 more than the length of the longest capture.

    Why? If the full string is "123", then the result should be 3. If it's "21234", then the result should be 4. Still need to take overlaps into account even if you just want the length.

    Btw, still have the typo in your last bit of code where you use min instead of max.

    my $longest = min map length,

      You don't seen to have read my code closely enough. Specifically, you missed that I capture one short of the whole sequence.

      Why? If the full string is "123", then the result should be 3.

      For "123", "12" is captured and length("12") + 1 is 3.

      If it's "21234", then the result should be 4.

      For "21234", "123" is captured and length("123") + 1 is 4.

      Still need to take overlaps into account even if you just want the length.

      True, but I avoided needing to capture the same digit twice, and thus I avoided the need to visit the string twice.

      you use min instead of max.

      Thanks, fixed.

        you missed that I capture one short of the whole sequence.

        You're right, I missed the fact that when using the lookahead assertion you didn't capture the last digit.

        Obviously that could be "fixed" if you added a '.' to the end, but that would introduce the overlapping problem.