# [Tutor] trying to understand pattern matching code

Joel Goldstick joel.goldstick at gmail.com
Fri Apr 25 14:16:57 CEST 2014

```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/c5aff22e/attachment.html>
```