使用字符串替换整数数组内的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
我试图找到一种方法,现在更换内这个零点带下划线“_”的数组。对于任何反馈,我们都表示感谢。谢谢。
答
如何?这是一个面向对象的语言,对吧?不过,我想方法#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
它不影响的代码,但什么是 “seduku”? – sawa 2015-02-11 22:34:52
[Sudoku](http://en.wikipedia.org/wiki/Sudoku)拼写错误。或者也许拼写。 – 2015-02-11 22:36:25
它不影响代码,但什么是“sedoku”? – sawa 2015-02-11 22:37:39