【问题标题】:How to select adjacent array value if adjacent is empty with rubyruby - 如果相邻为空,如何选择相邻数组值
【发布时间】:2012-10-22 09:11:44
【问题描述】:

我正在尝试弄清楚如何选择一个数组值,如果它与填充的数组值相邻并且为空。

假设数组引用的网格是这样布局的。

 a1,a2,a3,
 b1,b2,b3,
 c1,c2,c3

如果 a1 包含 X,则网格现在看起来像这样。

 X,a2,a3,
 b1,b2,b3,
 c1,c2,c3

我希望该方法能够找到相邻的数组值,在本例中为 a2、b1 和 b2。

但在下一个例子中,O 持有中心值。

 X,a2,a3,
 b1,O,b3,
 c1,c2,c3  

...该方法将选择 a2, b1

谁能提供解决方案或提示?

这是一个简单的井字游戏

这是网格所在的类。

class Board
attr_reader :grid

def initialize(cell_value = " ")
  @grid = {
    a1: cell_value, a2: cell_value, a3: cell_value,
    b1: cell_value, b2: cell_value, b3: cell_value,
    c1: cell_value, c2: cell_value, c3: cell_value
  }
end

def printgrid
  board = "\n"
  board << "a #{@grid[:a1]}|#{@grid[:a2]}|#{@grid[:a3]} \n"
  board << "----------\n"
  board << "b #{@grid[:b1]}|#{@grid[:b2]}|#{@grid[:b3]} \n"
  board << "----------\n"
  board << "c #{@grid[:c1]}|#{@grid[:c2]}|#{@grid[:c3]} \n"
  board << "----------\n"
  board << "  1 2 3\n"
end

def space_taken?(cell_location)
  cell_value = cell_location
  @grid[cell_value] != " "
end
end

【问题讨论】:

  • 网格的结构是什么?是二维的吗?它与数组有什么关系?什么是“中心值”?
  • 一个 2 年的帐户究竟是如何获得 11000 积分的?
  • 虽然下面 Stefan 的方法可以工作,但您最根本的问题是您使用 1D 数据结构来表示 2D 情况。让网格成为二维结构,整个问题就变得更容易理解了。
  • 我还建议先在纸上或其他东西上做这个 - 太沉迷于代码很可能是导致你遇到这个问题的原因。
  • @BenParsons 我是 ruby​​ 的菜鸟。几个月来我一直在开发这款游戏。我什至不知道要问“这应该是二维结构吗”

标签: ruby


【解决方案1】:

您可以实现一种方法来确定单元格是否位于X 旁边:

def next_to_x?(cell_location)
  case cell_location
  when :a1
    @grid[:a2] == 'X' or @grid[:b1] == 'X' or @grid[:b2] == 'X'
  when :a2
    @grid[:a1] == 'X' or @grid[:a3] == 'X' or @grid[:b1] == 'X' or @grid[:b2] == 'X' or @grid[:b3] == 'X'
  # ...
  end
end

然后,查找所有空且位于X 旁边的单元格:

[:a1, :a2, :a3, :b1, :b2, :b3, :c1, :c2, :c3].find_all { |cell_location|
  !space_taken(cell_location) and next_to_x?(cell_location)
}

【讨论】:

  • 谢谢你,我想我会试试这个回答我原来的问题。
猜你喜欢
  • 2021-11-17
  • 1970-01-01
  • 2014-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-05
  • 2011-10-16
  • 2019-05-05
相关资源
最近更新 更多