Summary of quiz #189 coming in a day or two.

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

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.

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

## Hexagonal Grid Game Board

This week's quiz is to create the distance computation methods for a
hexagonal game board. In addition to implementing the simple
unobstructed distance you will also implement an obstructed_distance
method: the distance between two positions where you must go around
obstructions. I've provided a couple of classes to help you get
started. The print method on HexBoard prints out a board where each
hex displays it's distance from position [4,4].

Partial solutions are welcome! Team solutions are welcome! I want to
see everyone on ruby-talk give this one a shot!

class Hex
  def obstructed?
    false
  end
end

class HexBoard
  def initialize(rows=9, cols=9)
    @rows, @cols = rows, cols
    @board = Array.new(@rows) do |row|
      Array.new(@cols) do |col|
        Hex.new
      end
    end
  end

  def distance(position1, position2)
    # Distance between two hexes on the board
  end

  def obstructed_distance(position1, position2, &block)
    # Distance between two hexes on the board having to navigate obstructions
    # Obstructions are detected by passing the hex in question into the block
    # block will return true if the yielded hex should be counted as obstructed
    # EX: dist = obstructed_distance(a, b) { |hex| hex.obstructed? }
  end

  # This will print the board out to the console to let you
  # know if you're on the right track
  def draw
    @rows.times do |row|
      line = ''
      line << "#{row}:"
      (@cols - row).times {line << ' '}

      @cols.times do |col|
        line << (distance([4,4], [row,col]) || 'X').to_s
        line << ' '
      end

      puts line
    end
  end

  def [](row)
    @board[row]
  end
end

board = HexBoard.new
board.draw

- - - - - - - - - - - - - - - - - - - - - - - -
Example Output of print:
0:         4 4 4 4 4 5 6 7 8
1:        4 3 3 3 3 4 5 6 7
2:       4 3 2 2 2 3 4 5 6
3:      4 3 2 1 1 2 3 4 5
4:     4 3 2 1 0 1 2 3 4
5:    5 4 3 2 1 1 2 3 4
6:   6 5 4 3 2 2 2 3 4
7:  7 6 5 4 3 3 3 3 4
8: 8 7 6 5 4 4 4 4 4

-- 
-Daniel
http://rubyquiz.strd6.com