public void CheckBlockOnUniqueNumberInBuffer() { Number num1 = new Number(1, 1, 1, true, false); num1.buffer.Add(2); num1.buffer.Add(5); num1.buffer.Add(6); num1.buffer.Add(8); num1.buffer.Add(9); Number num2 = new Number(2, 1, 2, true, false); num2.buffer.Add(2); num2.buffer.Add(6); num2.buffer.Add(8); Number num3 = new Number(2, 1, 2, true, false); num3.buffer.Add(2); num3.buffer.Add(5); num3.buffer.Add(8); num3.buffer.Add(9); Number num4 = new Number(2, 1, 2, true, false); num4.buffer.Add(1); num4.buffer.Add(2); num4.buffer.Add(6); num4.buffer.Add(8); Number num5 = new Number(2, 1, 2, true, false); num5.buffer.Add(2); num5.buffer.Add(5); num5.buffer.Add(8); num5.buffer.Add(9); Number num6 = new Number(2, 1, 2, true, false); num6.buffer.Add(2); num6.buffer.Add(5); num6.buffer.Add(6); num6.buffer.Add(8); num6.buffer.Add(9); Block block = new Block(1, 1); block.al.Add(num1); block.al.Add(num2); block.al.Add(num3); block.al.Add(num4); block.al.Add(num5); block.al.Add(num6); int expected = 1; Number actual = Program.FindUniqueNumberInBlockNumbersBuffer(block); Assert.IsNotNull(actual); Assert.AreEqual(expected, actual.number); }
private static void DivideArray() { rows = new List<Row>(); columns = new List<Column>(); blocks3x3 = new List<Block>(); for (int y = 1; y <= A; y++) { Row row = new Row(y); for (int x = 1; x <= A; x++) foreach (Number item in array) if (item.x == x && item.y == y) row.array.Add(item); rows.Add(row); } for (int x = 1; x <= A; x++) { Column column = new Column(x); for (int y = 1; y <= A; y++) foreach (Number item in array) if (item.x == x && item.y == y) column.array.Add(item); columns.Add(column); } for (int y1 = 1; y1 <= 3; y1++) { for (int x1 = 1; x1 <= 3; x1++) { Block block = new Block(x1, y1); foreach (Number item in array) if (isNumberInParticularBlock(x1, y1, item)) block.al.Add(item); blocks3x3.Add(block); } } }
internal static Number FindUniqueNumberInBlockNumbersBuffer(Block block) { List<PossibleNumber> possibleNumbers = new List<PossibleNumber>(); List<PossibleNumber> blackList = new List<PossibleNumber>(); foreach (Number item in block.al) { if (item.isEmpty && item.buffer.Count == 0) throw new EmptyBufferForEmptyNumberException(); else if (!item.isEmpty) continue; foreach (int n in item.buffer) { if (!searchInPossibleNumbersAndRemove(possibleNumbers, blackList, n) && !searchInBlackList(blackList, n)) { Number tempN = (Number)item.Clone(); tempN.number = n; possibleNumbers.Add(new PossibleNumber(tempN, n)); } } } if (possibleNumbers.Count == 1) return ((PossibleNumber)possibleNumbers[0]).number; else return null; }