Improved solution to 3-4. Condensed code considerably using a tuple of tower-pairs. Added an assert_towers_valid() function to ensure towers never reach an illegal state. Iterate through several games with different numbers of disks, to test multiple cases of the game.