Пример #1
0
        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);
        }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
        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;
        }