Я реализую гомуку в Ruby, это вариация tic-tac-toe, играемая на доске 15x15, и первый игрок, который размещает 5 O или X в горизонтальном, вертикальном или побеждает диагональный ряд.Ruby count duplicates в диагональных рядах матрицы
Во-первых, я назначая Матрицу переменной и заполнить его с числами от 0 до 224, так что нет никаких повторений, и я мог сосчитать их позже
gomoku = Matrix.zero(15)
num = 0
15.times do |i|
15.times do |j|
gomoku[i, j] = num
num += 1
end
end
затем игроки по очереди, и после каждого хода I проверить выигрыш с помощью метода win?
def win? matrix
15.times do |i|
return true if matrix.row_vectors[i].chunk{|e| e}.map{|_, v| v.length}.max > 4 # thanks to sawa for this way of counting adjacent duplicates
return true if matrix.column_vectors[i].chunk{|e| e}.map{|_, v| v.length}.max > 4
end
return false
end
Я знаю, что я, вероятно, делаю это неправильно, но моя проблема не в том, хотя предложения приветствуются. Проблема заключается в диагональных строках. Я не знаю, как считать дубликаты в диагональных рядах.
«Матрица» неизменна, вы не сможете делать «gomoku [i, j] = num' ... – Amadan
Вы ошиблись, я просто попробовал – budkin
Если вы используете [стандартную Ruby' Matrix' ] (http://www.ruby-doc.org/stdlib-2.1.2/libdoc/matrix/rdoc/Matrix.html#method-i-clone): «... Не должно быть веских оснований для этого так как * Матрицы неизменяемы *. Также обратите внимание на то, как 'Matrix # [] =' не существует. 'ruby -r matrix -e" a = Matrix.zero (2); a [0, 0] = 1 "' будет возвращать 'private method' [] = 'для Matrix [[0, 0], [0, 0]]: Матрица (NoMethodError) '. Если, с другой стороны, вы используете библиотеку, возможно, вы хотели бы указать ее. – Amadan