ANSWERS TO RE/FSA EXERCISES

 1. Easy way to do it, that doesn't answer the question:
        egrep -v 'a' filename
    Without using the -v option:
        egrep '^[^a]*$' filename
    The pattern [^a]* matches all strings with no a's. The ^ at the beginning 
    and the $ at the end specify that the entire line must be such a string.
    Without these, [^a]* matches every line, since it include the strings of 
    length 0.

 2. egrep -v '\.' filename

    The backslash is needed to 'quote' the period.

 3. '\$([0-9])+(\.[0-9][0-9])?'

    Dollar sign, followed by one or more digits, followed (optionally)
    by a period and two digits.

 4. The following commands are the tail end of a 30-second sequence of
    commands used to find this out.

      % egrep 'oo' /usr/dict/words | egrep '.............'
      bootstrapping
      schoolgirlish
      schoolteacher
      tablespoonful
      % egrep 'ee' /usr/dict/words | egrep '.............'
      committeewoman
      committeewomen


 5. (a)  State transitions: 0 -> 0 -> 0 -> 1 -> 1 -> 1.

    (b)  State transitions: 0 -> 0 -> 1 -> 1 -> 3 -> 3.

    (c)  All binary strings with exactly two 1s.

    (d)  0*10*10*
         

 6.
7.
8. State i represents bitstrings whose remainder is i upon division by 4.
9. (a) Binary strings ending in 0 with no two consecutive 1's or the empty string. (b) (0 | 10)*