From 5b01700650004ded216dd7cc94527e77e1990bde Mon Sep 17 00:00:00 2001 From: Alberto Venturini Date: Tue, 29 Oct 2019 21:42:13 +0200 Subject: [PATCH] Add valid? method --- spec/board_spec.cr | 11 +++++++++++ src/board.cr | 10 ++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/spec/board_spec.cr b/spec/board_spec.cr index aa53a45..75cb232 100644 --- a/spec/board_spec.cr +++ b/spec/board_spec.cr @@ -42,4 +42,15 @@ describe Sudoku::Board do board.extract_block(3, 1).should eq [[42, 43], [44, 45]] end + it "validates cells correctly" do + board = Sudoku::Board.new(9, 3) + board.put(1, 0, 0) + board.put(2, 0, 1) + board.put(3, 1, 0) + board.valid?(4, 0, 2).should be_true + board.valid?(4, 2, 0).should be_true + board.valid?(3, 0, 2).should be_false + board.valid?(3, 2, 0).should be_false + end + end diff --git a/src/board.cr b/src/board.cr index 7dcd152..24da810 100644 --- a/src/board.cr +++ b/src/board.cr @@ -24,8 +24,14 @@ module Sudoku @grid[y][x] end - def check_valid(value : Value, x, y) - + def valid?(value : Value, x, y) + if value == nil + true + else + extract_row(y).all? { |i| i != value } && + extract_column(x).all? { |i| i != value } && + extract_block(x, y).all? { |i| i.all? { |j| j != value } } + end end def extract_row(y)