2012-10-22 98 views
-1

我想弄清楚如何選擇一個數組值,如果它是一個填充數組值附近,並且是空的。如何選擇相鄰的數組值,如果相鄰是空的紅寶石

所以,讓我們說數組引用的佈局如此佈置。

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 
+0

電網的結構是什麼?它是2D嗎?它與數組有什麼關係?什麼是「中心價值」? – sawa

+0

如何在2年內獲得11000分? – thefonso

+0

儘管下面的Stefan的方法可行,但您最根本的問題在於您使用1D數據結構來表示2D情況。使網格成爲二維結構,整個問題變得更容易理解。 –

回答

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) 
} 
+0

謝謝我想我會嘗試這個答案我原來的問題。 – thefonso