Summary of quiz #189 coming in a day or two.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
The three rules of Ruby Q.:
-
Please do not post any solutions or spoiler discussion for this
quiz until 48 hours have elapsed from the time this message was
sent. -
Support Ruby Q. by submitting ideas and responses
as often as you can! Visit: http://rubyquiz.strd6.com -
Enjoy!
Suggestion: A [QUIZ] in the subject of emails about the problem
helps everyone on Ruby T. 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
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