The three rules of Ruby Quiz: 1. Please do not post any solutions or spoiler discussion for this quiz until 48 hours have passed from the time on this message. 2. Support Ruby Quiz by submitting ideas as often as you can: http://www.rubyquiz.com/ 3. Enjoy! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= by Bob Sidebotham There's a little pencil and paper game, Tactics, played on a 4x4 grid. The play starts with an empty grid. On each turn, a player can fill in one to four adjacent squares, either horizontally or vertically. The player who fills in the last square loses. Here's a sample game to help clarify the above rules. The board position at the end of each play is shown (best viewed in a fixed-width font): First player Second player X X X X X X X X (Turn 1) _ _ _ _ _ _ _ _ _ _ _ _ _ _ X _ _ _ _ _ _ _ X _ X X X X X X X X (Turn 2) X X _ _ X X _ X _ _ X _ _ _ X X _ _ X _ _ _ X _ X X X X X X X X (Turn 3) X X _ X X X X X _ _ X X _ _ X X _ _ X X _ _ X X X X X X X X X X (Turn 4) X X X X X X X X X X X X X X X X _ _ X X X _ X X X X X X (Turn 5 X X X X Second X X X X player X X X X wins!) Your task, should you choose to accept it, is to write a Ruby program which, given only these rules, determines whether the first or second player is bound to be the winner, assuming perfect play. It should do this in a "reasonable" amount of time and memory--it should definitely take under a minute on any processor less than 5 years old. Bonus points if you can make the case that your program actually gets the right answer for the right reason!