in reply to Find Length Of Longest Ascending/Descending Sequence
How about
my ($longest) = reduce { length($a) >= length($b) ? $a : $b } / ( [0-9] (?: (?: (?<=0)1 | (?<=1)2 | (?<=2)3 | (?<=3)4 | (?<=4)5 | (?<=5)6 | (?<=6)7 | (?<=7)8 | (?<=8)9 | (?<=9)0 )+ | (?: (?<=0)9 | (?<=1)0 | (?<=2)1 | (?<=3)2 | (?<=4)3 | (?<=5)4 | (?<=6)5 | (?<=7)6 | (?<=8)7 | (?<=9)8 )+ ) ) /xg;
And I thought contiguous would be easier than non-contiguous.
Update: No, that's not right. Endpoints can belong to an ascending and a descending series.
my ($longest) = reduce { length($a) >= length($b) ? $a : $b } / ( [0-9] (?: (?<=0)1 | (?<=1)2 | (?<=2)3 | (?<=3)4 | (?<=4)5 | (?<=5)6 | (?<=6)7 | (?<=7)8 | (?<=8)9 | (?<=9)0 )+ ) /xg, / ( [0-9] (?: (?<=0)9 | (?<=1)0 | (?<=2)1 | (?<=3)2 | (?<=4)3 | (?<=5)4 | (?<=6)5 | (?<=7)6 | (?<=8)7 | (?<=9)8 )+ ) /xg;
Update: This can be simplified if you just want the length of the longest rather than the sequence itself.
my $longest = max map length, / ( (?: 1(?=2) | 2(?=3) | 3(?=4) | 4(?=5) | 5(?=6) | 6(?=7) | 7(?=8) | 8(?=9) | 9(?=0) | 0(?=1) )+ | (?: 1(?=0) | 2(?=1) | 3(?=2) | 4(?=3) | 5(?=4) | 6(?=5) | 7(?=6) | 8(?=7) | 9(?=8) | 0(?=9) )+ ) /xg; if (defined($longest)) { ++$longest; } else { $longest = /[0-9]/ ? 1 : 0; }
Ok, maybe not simpler.
I could save typing by using reverse, but it would be a bit slower.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Find Length Of Longest Ascending/Descending Sequence
by wind (Priest) on May 09, 2011 at 19:50 UTC | |
by ikegami (Patriarch) on May 09, 2011 at 20:49 UTC | |
by wind (Priest) on May 09, 2011 at 21:57 UTC | |
by ikegami (Patriarch) on May 09, 2011 at 23:05 UTC | |
by wind (Priest) on May 09, 2011 at 23:33 UTC |