(a) if the current x is lower than the previous x: (a.1) if the current x has been seen before, discard the current point (a.2) else discard the previous point. (b) elsif the current x is identical to the prev. x (due to a.1 on prev.iteration) (b.1) discard previous point #### #! perl -slw use strict; printf "%s", scalar ; my @points = map[ split ' ', $_ ], ; my @modified; my %xseen; push @modified, shift @points; $xseen{$modified[-1][0]} = undef; while ( @points ) { if ( $points[0][0] < $modified[-1][0] ) { if ( exists( $xseen{$points[0][0]} )) { shift @points; next; } else { pop @modified; } } elsif ( $points[0][0] eq $modified[-1][0] ) { pop @modified; } push @modified, shift @points; $xseen{$modified[-1][0]} = undef; } print join ' ', @$_ for @modified; #### 0.0036759 0.4018006 0.0036759 0.4018006 0.0036962 0.4074616 0.0036962 0.4074616 0.0037064 0.4216399 0.0037064 0.4216399 0.0037166 0.4438854 0.0037166 0.4438854 0.0037268 0.4628417 0.0037268 0.4628417 0.0037370 0.4894152 0.0037370 0.4894152 0.0037471 0.4952320 0.0037471 0.4952320 0.0037675 0.4979326 0.0037675 0.4979326 0.0037879 0.5014988 0.0037879 0.5014988 0.0038082 0.5057747 0.0038082 0.5057747 0.0038184 0.5166984 0.0038184 0.5558402 0.0038286 0.5613627 0.0038286 0.5613627 0.0038388 0.6026338 0.0038388 0.6026338 0.0038490 0.6257104 0.0038693 0.6709805 0.0038693 0.6709805 0.0038795 0.6808655 0.0038795 0.6808655 0.0038897 0.6866130 0.0038897 0.6866130 0.0039202 0.6981425 0.0039202 0.6981425 0.0039406 0.7057251 0.0039406 0.7057251 0.0039508 0.7161121 0.0039610 0.7216518 0.0039610 0.7216518 0.0039712 0.7433434 0.0039712 0.7433434 0.0039813 0.7577987 0.0039915 0.7713018 0.0039915 0.7713018 0.0040017 0.7981869 0.0040017 0.7981869 0.0040119 0.8014242 0.0040119 0.8014242 0.0040221 0.8264223 0.0040221 0.8264223 0.0040526 0.8290191 0.0040526 0.8290191 0.0040628 0.8323083 0.0040628 0.8323083 0.0040933 0.8361688 0.0040933 0.8361688 0.0041035 0.8409814 0.0041035 0.8409814 0.0041137 0.8527880 0.0041239 0.8591068 0.0041239 0.8591068 0.0041341 0.864785 0.0041443 0.8760895 0.0041443 0.8760895