in reply to Re^2: Searching parallel arrays.
in thread Searching parallel arrays.

Hmmm, here are some test cases where your code appears to fail.

[ 7, 100, 204, 312 ], [ 8, 102, 313, 409 ], [ 9, 205, 206, 315 ], [ 10, 207, 210, 314 ], [ 100, 204, 312 ], [ 102, 313, 409 ], [ 205, 206, 315 ], [ 207, 210, 314, 401, 402, 403, 404 ], [ 1, 6, 11 ], [ 2, 7, 12 ], [ 3, 8, 13 ], [ 4, 9, 14 ],

I'm off out now, so I've got no time to look for a pattern (or to attempt to understand your code :-)...

Quick update: Limbic~Region's code, above, gets these right.

Replies are listed 'Best First'.
Re^4: Searching parallel arrays.
by BrowserUk (Patriarch) on Dec 09, 2006 at 22:20 UTC

    Thanks for this. You've found two problems, one of which I had already discovered and solved, the other I had not.

    The first was that this code

    if( @seq > 1 and $seq[ -1 ][ 0 ] > ( $seq[ -2 ][ 0 ] + 1 ) ) { pop @seq; if( @seq >= 4 ) { push @seqs, [ @seq ]; } undef @seq;

    discarded the non sequential value. If that was the start of a new sequence, the new sequence was missed or truncated. The fix is:

    if( @seq > 1 and $seq[ -1 ][ 0 ] > ( $seq[ -2 ][ 0 ] + 1 ) ) { my $temp = pop @seq; if( @seq >= 4 ) { push @seqs, [ @seq ]; } @seq = $temp;

    The second is that if the last value of the set is also the last value of a sequence, and that sequence is also the minimal length (4 in this case), that sequence is not saved. I'm not sure how to fix this yet.

    Update: Not as clean as I would hope to achieve, but a final check for a complient sequence outside the while loop fixes the second problem. I'll update the code above to reflect the fix.


    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.