From: Daniel Moore Date: 2010-01-29T13:57:32+09:00 Subject: [QUIZ][SUMMARY] Hamurabi (#223) --001636b2bc83aa0e41047e4678ba Content-Type: text/plain; charset=ISO-8859-1 There were many great solutions to this week's quiz. Most of the solutions took the route of translating the BASIC code into Ruby though James Edward Gray III actually built a BASIC interpreter. James uses regex based parsing and makes use of StringScanner[1], which provides for lexical scanning operations on a `String`. BASIC is pretty amenable to parsing with regex because of it's simple syntax. I'm not familiar enough with BASIC to know if a grammar would be required to provide a full implementation, but it may add simplicity in some situations of complex expressions. I ran into some glitches with my grain count getting extremely large and plagues happening every turn, but overall this was definitely the most adventurous attempt. Benoit Daloze's solution translated the original statement sections into Ruby methods. Each of these methods ended with a call to another method as the last expression in the method. This is to simulate either an implicit fallthrough or an explicit goto to another logical section of the code. genericpenguin gives us another translation, though with a little bit more of the control flow abstracted into the `run_iteration` method. Martin DeMello has the most Rubyish translation. Each logical section was translated into a method and the overall program flow was controlled by a main loop. The main loop can easily be extended to have the game run for a 20 year term, or even thousands (maybe even rivalling Civilization). It is interesting to look back on these older computer games and the spectrum of complexity and see how even simple games can provide so much enjoyment. And to also note how even simple games can be tricky to implement. Speaking of tricky, there was some lively discussion about a multiplayer version. Some possible game mechanics include: a free market for buying and selling land, migrant populations, and the tradeoffs of public healthcare. Maybe even a cap and trade system for carbon emissions, who knows? In playing many of these solutions I was doing pretty well, up until the point where everyone died. This quiz was a lot of fun, special thanks go to Martin DeMello[2] who suggested[3] it. Thank you everyone for the great solutions and discussion! Hamurabi (#223) - Solutions[4] [1]: http://ruby-doc.org/core/classes/StringScanner.html [2]: http://zem.novylen.net [3]: http://rubyquiz.strd6.com/suggestions [4]: http://rubyquiz.strd6.com/quizzes/223.tar.gz --001636b2bc83aa0e41047e4678ba Content-Type: application/x-gzip; name="223.tar.gz" Content-Disposition: attachment; filename="223.tar.gz" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g50i5hel0 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 /r/TfwGJdeXQAMgAAA== --001636b2bc83aa0e41047e4678ba--