gpt4 book ai didi

ruby - 如何跟踪和查找二维数组中的坐标

转载 作者:数据小太阳 更新时间:2023-10-29 08:36:39 25 4
gpt4 key购买 nike

我正在处理来自 adventofcode.com 的问题。我需要在未确定的网格上跟踪运动。我创建了一个移动函数,它使用这样的 case 方法。

def move(direction)
case move
when ">"
x += 1
when "<"
x -= 1
when "^"
y += 1
when "v"
y -= 1
end
end

我必须跟踪访问过的坐标,我想创建一个二维数组来跟踪并在我们访问新位置时推到它的后面。我不知道如何使用 if 语句跟踪唯一访问过的位置。

最佳答案

如果您只需要跟踪访问过的坐标并且它们的顺序无关紧要,那么您应该使用 Set相反:

visited = Set.new

visited << [0,0]
visited << [1,0]
visited << [1,1]
visited << [1,0]

p visited
# => #<Set: {[0, 0], [1, 0], [1, 1]}>

p visited.include?([1,1])
# => true

如果由于某种原因您不能使用 Set,您可以使用 Hash 完成同样的事情(这基本上是 Set 在幕后的工作方式):

visited = {}

visited[ [0,0] ] = true
visited[ [1,0] ] = true
# Or:
visited.store([0, 0], true)

p visited
# { [0, 0] => true,
# [1, 0] => true
# }

p visited[ [1,0] ] # => true
p visited[ [2,5] ] # => nil

# Or:
p visited.key?([2,5]) # => false

这是一个如何在 Grid 类中使用 Set 的示例:

require 'set'

class Grid
attr_reader :visited

def initialize
@visited = Set.new
end

def visit!(x, y)
visited << [x, y]
end

def visited?(x, y)
visited.include?([x, y])
end
end

grid = Grid.new

grid.visit!(0, 0)
grid.visit!(1, 0)
grid.visit!(1, 1)
grid.visit!(1, 0)

p grid.visited
# => #<Set: {[0, 0], [1, 0], [1, 1]}>

p grid.visited?(1, 0) # => true
p grid.visited?(3, 3) # => false

关于ruby - 如何跟踪和查找二维数组中的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34098265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com