From: Daniel Moore Date: 2009-07-06T07:36:59+09:00 Subject: [QUIZ][SUMMARY] Plot the Shape (#211) --0015175cb7daf2824b046dfd06d2 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit There were many good solutions to this week's quiz, but Chris Howe's solution stands out as the best. Chris's solution consists of two parts: a `Shape` class that handles creating the shape and tracking lookups to the grid and a `ShapePlot` class that handles the guesses. Chris also provides a mode that draws the board as it is searched. The '@' characters represent the parts of the shape that have been discovered so far, the 'x' characters represent misses, and the '.' characters represent neighbors to the discovered shapes: the places that the program will search next.
    +-------------------+
    |            x      |
    |                   |
    |                   |
    |                   |
    |    . x x .        |
    |x x x @ @ .        |
    |x @ @ @ x .        |
    |x x @ x x          |
    |  . x .       x    |
    |    x              |
    +-------------------+
As you can see the two 'x's off to the side are random choices that missed. The program continues to guess randomly a location with part of the shape is found. A piece of the shape was then discovered near the bottom left and the program began searching the neighbors of the already discovered pieces to find the rest of it. The default output of the program is to display one game in drawing mode, and then run 999 more games to generate the statistics for the average number of lookups. After 1000 plays the average number of lookups is around 31.7. Thank you Brabuhr, Chris Cacciatore, Chris Howe, Kendal Gifford, and Sandro Paganotti for your solutions this week! --0015175cb7daf2824b046dfd06d2 Content-Type: application/x-gzip; name="211.tar.gz" Content-Disposition: attachment; filename="211.tar.gz" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fwsblw440 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 --0015175cb7daf2824b046dfd06d2--