Disclaimer: I'm enjoying solving the puzzles but making no attempt to refactor, implement convoluted OO patterns, or follow clean coding practices. Copy and paste at your own risk :)