Finished 28

Although my solution was alarmingly literal, it works and it's fast. I
guess I could have figured out the patterns, but something about having
a visual map of my progress was appealing.