powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Ruby Вопрос по судоку
4 сообщений из 4, страница 1 из 1
Ruby Вопрос по судоку
    #38187040
leol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, уважаемые форумчане.
Может, кто-то сможет понять, почему код не работает, где ошибка?
Надеюсь, код более-менее читабельный. Заранее спасибо.
Ошибка где-то в методе create_field

Sudoku
class Sudoku
def initialize
@field = Hash.new()
@visited_nums = Hash.new()
end

def empty_field # creating empty sudoku 9x9 field
i = 1
while i<10
j = 1
while j<10
cell_key = [i,j]
@field[cell_key] = nil
j+=1
end
i+=1
end
end

def visited_numbers # creating empty arrays for already checked & invalid numbers for each cell
i = 1
while i<10
j = 1
while j<10
cell_key = [i,j]
@visited_nums[cell_key] = []
j+=1
end
i+=1
end
end

def check_column(pick, row) # checking the column
for c in 1..9
if @field[[row, c]] == pick
return false
end
end
return true
end

def check_row(pick, column) # checking the row
for r in 1..9
if @field[[r, column]] == pick
return false
end
end
return true
end

def check_segment(pick, row, column) # checking the 3x3 square
if column<=3
if row<=3
for i in 1..3
for j in 1..3
if @field[[i, j]] == pick
return false
end
end
end
elsif row>3 && row<=6
for i in 3..6
for j in 1..3
if @field[[i, j]] == pick
return false
end
end
end
elsif row>6 && row<=9
for i in 6..9
for j in 1..3
if @field[[i, j]] == pick
return false
end
end
end
end
elsif column>3 && column<=6
if row<=3
for i in 1..3
for j in 3..6
if @field[[i, j]] == pick
return false
end
end
end
elsif row>3 && row<=6
for i in 3..6
for j in 3..6
if @field[[i, j]] == pick
return false
end
end
end
elsif row>6 && row<=9
for i in 6..9
for j in 3..6
if @field[[i, j]] == pick
return false
end
end
end
end
elsif column>6 && column<=9
if row<=3
for i in 1..3
for j in 6..9
if @field[[i, j]] == pick
return false
end
end
end
elsif row>3 && row<=6
for i in 3..6
for j in 6..9
if @field[[i, j]] == pick
return false
end
end
end
elsif row>6 && row<=9
for i in 6..9
for j in 6..9
if @field[[i, j]] == pick
return false
end
end
end
end
end
return true
end

def create_field # generating solved puzzle
empty_field
visited_numbers
i = 1
while i<=9 # i - row counter
j = 1
marks_index = 8
marks = [1,2,3,4,5,6,7,8,9]
while j<=9 # j - column counter
pick = marks[rand(0..marks_index)]
if check_column(pick, i) && check_row(pick, j) && check_segment(pick, i, j)
@field[[i,j]] = pick
@visited_nums[[i,j]].push(pick)
j+=1
end
end
i+=1
puts ''
end

end

def show_field
i = 1
while i<10
j = 1
while j<10
#if @field[[i,j]] == nil
# @field[[i,j]] == ' '
#end
if j==4 || j==7
print '| '
end
if j%9==0
print "#{@field[[i,j]]} "
puts ''
if i==3 || i==6
for k in 0..8
print '--'
end
print '---'
puts "\n"
end
else
print "#{@field[[i,j]]} "
end
j+=1
end
i+=1
end
end

end

sudoku = Sudoku.new
puts ''
sudoku.create_field
puts ''
sudoku.show_field

...
Рейтинг: 0 / 0
Ruby Вопрос по судоку
    #38187042
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leolНадеюсь, код более-менее читабельный.И не надейся
...
Рейтинг: 0 / 0
Ruby Вопрос по судоку
    #38187082
Фотография arni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рабочий код можно взять в книге Д. Флэнаган, Ю. Мацумото. "Язык программирования Ruby", стр.37
Также тут еще можно посомтреть: http://rosettacode.org/wiki/Sudoku#Ruby
...
Рейтинг: 0 / 0
Ruby Вопрос по судоку
    #38187168
leol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
arni,

о! большое спасибо!
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Ruby Вопрос по судоку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]