[QUIZ] Sliding Puzzle (#196)

Discussion in 'Ruby' started by Daniel Moore, Mar 13, 2009.

  1. Daniel Moore

    Daniel Moore Guest

    -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    The three rules of Ruby Quiz:

    1. Please do not post any solutions or spoiler discussion for this
    quiz until 48 hours have elapsed from the time this message was
    sent.

    2. Support Ruby Quiz by submitting ideas and responses
    as often as you can! Visit: <http://rubyquiz.strd6.com>

    3. Enjoy!

    Suggestion: A [QUIZ] in the subject of emails about the problem
    helps everyone on Ruby Talk follow the discussion. Please reply to
    the original quiz message, if you can.

    -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    ## Sliding Puzzle (#196)

    Bienvenidos fellow Rubyists,

    This weeks quiz will be to create and implement a [sliding puzzle][1].
    The puzzle must be playable from keyboard input. The program will
    generate a puzzle in a random configuration and the puzzle generated
    must be solvable. You may create either the 8-puzzle or the 15-puzzle.
    You may include a mode that will automatically solve the puzzle or
    present a hint.

    The puzzle must throw a small party when solved.

    Bonus: Have the puzzle be displayed as an ascii art image that needs
    to be arranged instead of simple numbers.

    [1]: http://en.wikipedia.org/wiki/Fifteen_puzzle


    Have Fun!
    --
    -Daniel
    http://rubyquiz.strd6.com
    Daniel Moore, Mar 13, 2009
    #1
    1. Advertising

  2. Daniel Moore

    Daniel Moore Guest

    [SUMMARY] Sliding Puzzle (#196)

    The sole submission to this week's quiz comes from Martin Boese.
    Martin provided a simple and versatile solution. It can generate
    puzzles of any size, and is able to shuffle to a random starting
    configuration. It also throws a nice party when the player succeeds.

    The program provides a driver that reads keyboard commands and
    translates them into the correct actions on the puzzle class. The
    program accepts four movement commands as well as commands to quit and
    shuffle.

    Here's a look at the puzzle's shuffle method to randomize the configuration:

    def shuffle
    100.times { move 'udlr'[(rand*4).to_i].chr }
    end

    The shuffling is done by making 100 random moves, this ensures that
    the puzzle remains solvable; a random shuffling of the tiles without
    maintaining the movement constraints is not necessarily solvable.
    Additionally, this leverages the existing functionality of the `move`
    method to keep the code simple. One potential drawback is that this
    doesn't select all possible starting positions with equal probability.
    However, having the random configurations generated with equal
    probability wasn't a quiz requirement, and it is often best to go with
    the least complex solution that meets the requirements.

    The method to detect whether or not the puzzle is solved also
    leverages existing functionality to reduce complexity, it checks if
    the current board is equal to a newly created board. Because the newly
    created board starts in the solved position and the board is an array
    of integers, this leads to a short and sweet definition:

    def solved?
    @board == mkboard(@x,@y) && @moved
    end

    The check for `@moved` to be true is to prevent the puzzle from
    partying when the game is first created and before it is shuffled.
    Speaking of the party, here's the section responsible for that magical
    functionality:

    puts
    10.times { $stdout.print '*'; sleep 0.1; $stdout.flush }
    puts " You won!\n"

    It creates a rapid display of asterisks and congratulates the player!

    Thank you, Martin, for a wonderful solution!

    http://rubyquiz.strd6.com/quizzes/196

    - Daniel
    Daniel Moore, Mar 23, 2009
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Developwebsites

    OT: sliding puzzle code

    Developwebsites, Aug 23, 2003, in forum: Java
    Replies:
    1
    Views:
    568
    Tim Tyler
    Aug 26, 2003
  2. Developwebsites

    sliding puzzle code help

    Developwebsites, Aug 23, 2003, in forum: C++
    Replies:
    1
    Views:
    675
    White Wolf
    Aug 23, 2003
  3. Ruby Quiz

    [QUIZ] Animal Quiz (#15)

    Ruby Quiz, Jan 14, 2005, in forum: Ruby
    Replies:
    11
    Views:
    351
    James Edward Gray II
    Jan 18, 2005
  4. David Tran
    Replies:
    9
    Views:
    176
    David Tran
    Jan 21, 2005
  5. Ruby Quiz

    [QUIZ] 1-800-THE-QUIZ (#20)

    Ruby Quiz, Feb 18, 2005, in forum: Ruby
    Replies:
    15
    Views:
    314
    gabriele renzi
    Feb 24, 2005
Loading...

Share This Page