使用字符串替换整数数组内的Ruby

问题描述:

目前,我有如下所示的代码:使用字符串替换整数数组内的Ruby

def sudoku_generator 

    @initial_board = [0] * 81 

    a = (1..9).sort_by{rand} 
    b = (1..9).sort_by{rand} 
    c = (1..9).sort_by{rand} 

    @initial_board[0..2] = a[0..2] 
    @initial_board[9..11] = a[3..5] 
    @initial_board[18..20] = a[6..8] 
    @initial_board[30..32] = b[0..2] 
    @initial_board[39..41] = b[3..5] 
    @initial_board[48..50] = b[6..8] 

    @initial_board[60..62] = c[0..2] 
    @initial_board[69..71] = c[3..5] 
    @initial_board[78..80] = c[6..8] 

    @initial_board.each_slice(9) do |make_better| 
    puts make_better.join(' | ') 
    end 

end 

print sudoku_generator 

这将返回:

3 | 7 | 9 | 0 | 0 | 0 | 0 | 0 | 0 
1 | 5 | 6 | 0 | 0 | 0 | 0 | 0 | 0 
2 | 8 | 4 | 0 | 0 | 0 | 0 | 0 | 0 
0 | 0 | 0 | 1 | 5 | 8 | 0 | 0 | 0 
0 | 0 | 0 | 6 | 7 | 2 | 0 | 0 | 0 
0 | 0 | 0 | 3 | 4 | 9 | 0 | 0 | 0 
0 | 0 | 0 | 0 | 0 | 0 | 5 | 1 | 3 
0 | 0 | 0 | 0 | 0 | 0 | 4 | 8 | 7 
0 | 0 | 0 | 0 | 0 | 0 | 6 | 2 | 9 

我试图找到一种方法,现在更换内这个零点带下划线“_”的数组。对于任何反馈,我们都表示感谢。谢谢。

+0

它不影响的代码,但什么是 “seduku”? – sawa 2015-02-11 22:34:52

+0

[Sudoku](http://en.wikipedia.org/wiki/Sudoku)拼写错误。或者也许拼写。 – 2015-02-11 22:36:25

+1

它不影响代码,但什么是“sedoku”? – sawa 2015-02-11 22:37:39

由于@sawa的意见建议,我会默认数组'_',但你总是可以只是交换0'_'为您打印:

用类
puts make_better.map { |x| x == 0 ? '_' : x }.join(' | ') 
+1

你可以做'x.zero?'。 – sawa 2015-02-11 22:42:45

+0

也可以使用'map!' – 2015-02-11 22:44:11

+0

谢谢大家的快速回复。我今天学到了东西。 ;) – Josh 2015-02-11 23:19:41

如何?这是一个面向对象的语言,对吧?不过,我想方法#to_s可能更漂亮。

class Grid 
    SIZE = 3 

    def initialize 
    @array = Array.new(3) { |line| Array.new(3) { |column| generator.call(line, column) } } 
    end 

    def generator 
    proc { '_' } 
    end 

    def to_a 
    @array 
    end 
end 

class RandomGrid < Grid 
    def generator 
    @random_numbers ||= (1..9).to_a.shuffle 
    proc { @random_numbers.shift } 
    end 
end 


class DiagonalBoard < Grid 
    def generator 
    proc { |line, column| (line == column ? RandomGrid : Grid).new } 
    end 

    def to_s 
    @array.map do |grids| 
     grids.map(&:to_a).transpose.map do |rows| 
     rows.flatten.join('|') 
     end.join("\n") 
    end.join("\n") 
    end 
end 

puts DiagonalBoard.new 

输出

9|2|8|_|_|_|_|_|_ 
5|3|7|_|_|_|_|_|_ 
1|4|6|_|_|_|_|_|_ 
_|_|_|8|1|5|_|_|_ 
_|_|_|6|2|9|_|_|_ 
_|_|_|3|4|7|_|_|_ 
_|_|_|_|_|_|2|9|1 
_|_|_|_|_|_|7|5|6 
_|_|_|_|_|_|3|8|4