Inspired by http://codekata.pragprog.com/