in reply to Summing up duplicate lines

The first rule for any problem like this is: define a signature such that elements which should be seen as the same have the same signature, then use a hash with signatures as keys to group things.

I think by "repeated lines" you mean lines in which all three values are the same, so the signature should include all three values:

sub signature { my $arrayref = shift; # the examples imply that the inputs are integers # if not, use a different character to join them return join '.', @$arrayref; }

Once you have a signature, you can use a hash to accumulate any duplicates; in this case we just need a count:

my %seen; for my $arrayref (@all_inputs) { if ($arrayref->[0] && $arrayref->[1]) { # not interesting, just pass it through print_result($arrayref); } else { # get a signature, increase the count for that signature by 1 ++$seen{ signature($arrayref) }; } } # now construct combined results for the saved inputs for my $sig (keys %seen) { my $count = $seen{$sig}; my $arrayref = [ split /\./, $sig ]; # keep it easy: multiplying the zero value is a noop $arrayref->[$_] *= $count for (0, 1); print_result($arrayref); }

For your example data, this ends up with combined lines [ 0, 10, 1 ], [ -5, 0, 1 ], [ 30, 0, 1 ], [ 0, -45, 1 ].

Replies are listed 'Best First'.
Re^2: Summing up duplicate lines
by oko1 (Deacon) on May 08, 2024 at 20:56 UTC

    I'm afraid that didn't work - your output (once I created a 'sub print_result', that is :) ) looked like this:

    [ -1, 5, 1 ], [ 1, 5, 1 ], [ 3, 4, 1 ], [ 5, 1, 1 ], [ -23, -64, 0 ], [ -5, 1, 1 ], [ 30, 0, 1 ], [ -5, 0, 1 ], [ 0, -45, 1 ], [ 0, 10, 1 ]
    which skipped some lines. For comparison, choroba's was
    [-1 5 1] [0 10 1] [1 5 1] [3 4 1] [5 1 1] [30 0 1] [0 -45 1] [-23 -64 0] [-5 0 1] [-5 1 1]

    which was correct.

    -- 
    I hate storms, but calms undermine my spirits.
     -- Bernard Moitessier, "The Long Way"

      Actually, in terms of output content both are identical. The difference is that the two solutions give a different line order.

      Optimising for fewest key strokes only makes sense transmitting to Pluto or beyond

        I can't imagine why the default assumption would be that order doesn't matter, but - yes, it does. It's a series of mouse positions for drawing a shape, in case that matters as well.

        -- 
        I hate storms, but calms undermine my spirits.
         -- Bernard Moitessier, "The Long Way"