I prefer limiting `and` and `or` to only control-flow situations, using `&&` and `||` for boolean expressions.

http://devblog.avdi.org/2010/08/02/using-and-and-or-in-ruby/

Do you mind changing the boolean `and` here (and in `compare` and `maches?`) to use `&&`?