See https://www.sparkfun.com/news/2115 for context. Read challenge.cpp for algorithm details.
https://www.sparkfun.com/news/2115