Exemple #1
0
        public IEnumerable <HexStep> GetSolutions_Double(HexHintList hintlist)
        {
            var varcells = GetCells().Where(p => p.Type == HexagonType.HIDDEN).ToList();

            if (varcells.Count > LIMIT_DOUBLE)
            {
                yield break;
            }

            List <HexHint> hints = varcells.SelectMany(p => hintlist.Get(p.Position)).Distinct().ToList();

            foreach (var add_cells in hints.OrderBy(p => p.GetCells().Count(q => q.Type == HexagonType.HIDDEN)).Where(p => p.GetCells().Where(q => q.Type == HexagonType.HIDDEN).Any(q => !varcells.Contains(q))))
            {
                var new_varcells = varcells.Concat(add_cells.GetCells().Where(p => p.Type == HexagonType.HIDDEN)).Distinct().ToList();

                if (new_varcells.Count > LIMIT_DOUBLE)
                {
                    break;
                }

                var new_hints = varcells.SelectMany(p => hintlist.Get(p.Position)).Distinct().ToList();

                foreach (var solution in GetSolutions(new_varcells, -1, new_hints))
                {
                    yield return(solution);
                }
            }
        }
Exemple #2
0
        public List <HexStep> GetSolutions_Single(HexHintList hintlist)
        {
            var varcells = GetCells().Where(p => p.Type == HexagonType.HIDDEN).ToList();

            if (varcells.Count > LIMIT_SINGLE)
            {
                return(Enumerable.Empty <HexStep>().ToList());
            }

            List <HexHint> hints = varcells.SelectMany(p => hintlist.Get(p.Position)).Distinct().ToList();

            int myNumber = GetNumber() - GetCells().Count(p => p.Type == HexagonType.ACTIVE);

            if (myNumber < 0)
            {
                throw new Exception("Invalid Game state [Number < 0]");
            }

            return(GetSolutions(varcells, myNumber, hints));
        }