コード例 #1
0
ファイル: Program.cs プロジェクト: ufcpp/UnicodeDataCsharp
        private static void ReadLines(byte[] content)
        {
            var lines = new LineEnumerable <string, Utf8ToString>(content);

            foreach (var s in lines.Take(10))
            {
                Console.WriteLine(s);
            }
        }
コード例 #2
0
        private bool fillOnlyOneElement(Definition.GridLine gridLine)
        {
            //get empty element
            Definition.Element emptyElement = null;
            using (var e = gridLine.Elements
                           .Where(item => !item.HasValue)
                           .GetEnumerator())
            {
                if (!e.MoveNext())
                {
                    return(true);                               //not empty element
                }
                emptyElement = e.Current;
                if (e.MoveNext())
                {
                    return(false);                              //more than one empty element
                }
            }

            var lineType = gridLine.LineType;

            //get two other grids
            var currentGrid = gridLine.Grid;

            Definition.Grid otherGrid1, otherGrid2;
            currentGrid.GetOtherGrids(lineType, out otherGrid1, out otherGrid2);

            int currentLineIndex = gridLine.Index;

            var grid1Completed = otherGrid1
                                 .GetElementsInCurrentGridLine(currentLineIndex, lineType)
                                 .AllHasValue();
            var grid2Completed = otherGrid2
                                 .GetElementsInCurrentGridLine(currentLineIndex, lineType)
                                 .AllHasValue();

            //only when one other grid line is completed
            if (grid1Completed == grid2Completed)
            {
                return(false);
            }

            var targetGrid = grid1Completed ? otherGrid2 : otherGrid1;

            //if one of seats value appeared in target grid, fill to complete
            var seatValues = new LineEnumerable(this.sudoku, lineType)
                             //.ElementAt(currentLineIndex) //should get sudoku line index here
                             .ElementAt(getSudokuLineIndex(currentLineIndex, currentGrid.Index, lineType))
                             .Elements
                             .Values()
                             .SudokuExcept();
            var intersectResults = targetGrid.Elements.Values()
                                   .Except(currentGrid.Elements.Values())
                                   .Intersect(seatValues);

            int value = intersectResults.SingleOrDefault(-1);

            if (value > 0)
            {
                filling(emptyElement, value);
                emptyElement.SetValue(value);
                return(true);
            }
            return(false);
        }