Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Re: Previous Line Matching Issues

by InfiniteSilence (Curate)
on May 21, 2014 at 00:13 UTC ( [id://1086886]=note: print w/replies, xml ) Need Help??


in reply to Previous Line Matching Issues

My approach involves using a simple data structure to tell you about the past -- a stack:

perl -e '@stack = (); sub notify { return qq~!!!!@_[0]!!!~}; for(qw~+ +- + - + - + + - +~) {push @stack, $_; (@stack[-2] ne $_ )? print 0 : + print notify(1) };'

What's happening here:

  • You start with a list of intermittent signals; here just + or - that arrive sequentially
  • We use a data structure that will tell us what the last n elements are in order
  • If some criteria is met we can run some kind of notification. In our case what we want to know is if the current element matches the previous one.

One additional note: the first example essentially caches everything in the @stack. You can keep only what you need in there by discarding things at the head like this:

perl -e '@stack = (); sub notify { return qq~!!!!@_[0]!!!~}; for(qw~+ + - + - + - + + - +~) {push @stack, $_; (@stack[-2] ne $_ )? print 0 +: print notify(1); if (@stack >= 3){shift @stack} }; use Data::Dum +per; print Dumper \@stack;'

gives,

0000000!!!!1!!!00$VAR1 = [ '-', '+' ];

Celebrate Intellectual Diversity

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1086886]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others musing on the Monastery: (4)
As of 2024-04-18 22:58 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found