[Tutor] trying to understand pattern matching code

Fri Apr 25 15:33:54 CEST 2014

```Thanks joel

Could you elaborate more on bitwise, and why do we need to double bit. I
experimented with some input

ShiftAnd('pattern', 'textcontainingpatternandpatern')

print out the (masks, accept_state), looks like bellow, the rest make sense
couse the numbers are doubled, but the 't' goes 4+8 = 12. why is this?

({'a': 2, 'e': 16, 'n': 64, 'p': 1, 'r': 32, 't': 12}, 64)

and  i could not make sense of this line yet :  D = (( D << 1) + 1) & masks
[ c ]

to Dave,

i do i do the text mode? i had no idea this was on html
Am 25.04.2014 14:16 schrieb "Joel Goldstick" <joel.goldstick at gmail.com>:

>
> On Apr 25, 2014 7:14 AM, "rahmad akbar" <matbioinfo at gmail.com> wrote:
> >
> > hey guys,
> > i am trying to understand this code pasted bellow,
> > 1. what is line means? mask[c] |= bit
> This bitwise or.  It sets the rightmost bit in masks[c]
> > 2. then the line bit *=2, this increment the bit to 2 for each characters
> This doubles bit.
> > 3. what is this line means? accept_state = bit //2
> Integer division
> > 4. lastly, what is this scary line means? D = (( D << 1) + 1) & masks [
> c
>
> The << is bitwise shift left
> > def ShiftAnd (P , T ):
> >   m = len ( P )
> >   masks = dict () # empty dictionary
> >   bit = 1
> >   for c in P :
> >     if c not in masks : masks [ c ] = 0
> >     masks [ c ] |= bit
> >     bit *= 2
> >   accept_state = bit // 2
> >   D = 0 # bit - mask of active states
> >   i = 0
> >   for c in T :
> >     D = (( D << 1) + 1) & masks [ c ]
> >   if ( D & accept_state ) != 0:
> >     yield i
> >   i += 1
> >
> >
> You should sprinkle some print statements in and run with various arguments
> >
> >
> >
> > --
> > many thanks
> > mat
> >
> > _______________________________________________
> > Tutor maillist  -  Tutor at python.org
> > To unsubscribe or change subscription options:
> > https://mail.python.org/mailman/listinfo/tutor
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20140425/fb36b67e/attachment-0001.html>
```