kata from http://codekata.pragprog.com/2007/01/code_kata_fifte.html#more