/// <summary> /// Checks nonogram for obvious errors related to specified tile. /// </summary> /// <param name="row">Row index of tile</param> /// <param name="column">Column index of tile</param> /// <returns>True if error was found.</returns> private bool Error(int row, int column) { int lineSum = _ng.RowSum(row); for (int i = 0; i < _ng.Width; i++) { if (_grid[row][i].HasValue && _grid[row][i].Value) { lineSum--; } if (lineSum < 0) { return(true); } } lineSum = _ng.ColumnSum(column); for (int i = 0; i < _ng.Height; i++) { if (_grid[i][column].HasValue && _grid[i][column].Value) { lineSum--; } if (lineSum < 0) { return(true); } } if (_grid[row].All(x => x.HasValue)) { int num = 0; List <int> nums = new List <int>(); for (int i = 0; i < _ng.Width; i++) { if (_grid[row][i].HasValue && _grid[row][i].Value) { num++; } else { if (num != 0) { nums.Add(num); } num = 0; } } if (num != 0) { nums.Add(num); } for (int i = 0; i < nums.Count; i++) { if (nums[i] != _ng.GetRowNum(row, i)) { return(true); } } if (_ng.GetRowNum(row, nums.Count) != 0) { return(true); } } if (_grid.All(x => x[column].HasValue)) { int num = 0; List <int> nums = new List <int>(); for (int i = 0; i < _ng.Height; i++) { if (_grid[i][column].HasValue && _grid[i][column].Value) { num++; } else { if (num != 0) { nums.Add(num); } num = 0; } } if (num != 0) { nums.Add(num); } for (int i = 0; i < nums.Count; i++) { if (nums[i] != _ng.GetColumnNum(column, i)) { return(true); } } if (_ng.GetColumnNum(column, nums.Count) != 0) { return(true); } } return(false); }
public void ColumnSumTest() { Assert.AreEqual(5, ng.ColumnSum(0)); Assert.AreEqual(3, ng.ColumnSum(2)); }