Example #1
0
        public void SolveLine(bool onlyOne)
        {
            var r           = new Random((int)(DateTime.Now.Ticks % int.MaxValue));
            var allLinesTop =
                Top
                .Where(l => l.Sections.All(s => s.State != SectionState.Wrong))
                .Select((l, i) => new
            {
                IsLeft = false,
                Line   = i,
                Rand   = r.Next()
            });

            var allLinesLeft =
                Left
                .Where(l => l.Sections.All(s => s.State != SectionState.Wrong))
                .Select((l, i) => new
            {
                IsLeft = true,
                Line   = i,
                Rand   = r.Next()
            });

            var allLinesRandom =
                allLinesTop
                .Concat(allLinesLeft)
                .OrderBy(al => al.Rand);

            foreach (var line in allLinesRandom)
            {
                var side     = line.IsLeft ?  Left: Top;
                var sections = side[line.Line].Sections.Select(s => s.Len).ToArray();
                var cells    = GetMapLine(line.Line, line.IsLeft);
                var check    = new CheckLineClass(cells, sections);
                var result   = check.DoSolveLine();
                // if cells
                if (!cells.Where((t, i) => t == CellState.Unknown && result[i] != CellState.Unknown).Any())
                {
                    continue;
                }

                for (int i = 0; i < result.Length; i++)
                {
                    if (GetMapCell(line.Line, i, line.IsLeft) == CellState.Unknown)
                    {
                        SetMapCell(line.Line, i, line.IsLeft, result[i]);
                    }
                }
                HistoryNextStep();
                if (onlyOne)
                {
                    return;
                }
            }
        }
Example #2
0
        private static void CheckLine(Line line, CellState[] cells)
        {
            var lines     = line.Sections.Select(l => l.Len).ToArray();
            var checkLine = new CheckLineClass(cells, lines);
            var result    = checkLine.DoCheckLine();

            for (int i = 0; i < result.Length; i++)
            {
                line.Sections[i].State = result[i];
            }
            line.IsSolveChecked = true;
        }
Example #3
0
 private static void CheckLine(Line line, CellState[] cells)
 {
     var lines = line.Sections.Select(l => l.Len).ToArray();
     var checkLine = new CheckLineClass(cells, lines);
     var result = checkLine.DoCheckLine();
     for (int i = 0; i < result.Length; i++)
     {
         line.Sections[i].State = result[i];
     }
     line.IsSolveChecked = true;
 }
Example #4
0
        public void SolveLine(bool onlyOne)
        {
            var r = new Random((int) (DateTime.Now.Ticks%int.MaxValue));
            var allLinesTop =
                Top
                    .Where(l => l.Sections.All(s => s.State != SectionState.Wrong))
                    .Select((l, i) => new
                    {
                        IsLeft = false,
                        Line = i,
                        Rand = r.Next()
                    });

            var allLinesLeft =
                Left
                    .Where(l => l.Sections.All(s => s.State != SectionState.Wrong))
                    .Select((l, i) => new
                    {
                        IsLeft = true,
                        Line = i,
                        Rand = r.Next()
                    });

            var allLinesRandom =
                allLinesTop
                    .Concat(allLinesLeft)
                    .OrderBy(al => al.Rand);

            foreach (var line in allLinesRandom)
            {
                var side = line.IsLeft ?  Left: Top;
                var sections = side[line.Line].Sections.Select(s => s.Len).ToArray();
                var cells = GetMapLine(line.Line, line.IsLeft);
                var check = new CheckLineClass(cells, sections);
                var result = check.DoSolveLine();
                // if cells
                if (!cells.Where((t, i) => t == CellState.Unknown && result[i] != CellState.Unknown).Any())
                    continue;

                for (int i = 0; i < result.Length; i++)
                {
                    if (GetMapCell(line.Line, i, line.IsLeft) == CellState.Unknown)
                        SetMapCell(line.Line, i, line.IsLeft, result[i]);
                }
                HistoryNextStep();
                if (onlyOne)
                    return;
            }
        }