private static void ReadLines(byte[] content) { var lines = new LineEnumerable <string, Utf8ToString>(content); foreach (var s in lines.Take(10)) { Console.WriteLine(s); } }
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); }