예제 #1
0
        private static CombinationSets GenerateAllSets()
        {
            int n  = GuessAttempts.Guess[0].Count; // length of the number
            var ks = GuessAttempts.RemainCorrectGuesses.GroupBy(c => c)
                     .Select(g => g.First())
                     .Where(c => c != 0)
                     .ToList();

            var dict = new CombinationSets();

            foreach (var k in ks)
            {
                var set = new vvi();
                GenerateSet_nk(n, k, new vi(), set);
                dict.Add(k, set);
            }

            return(dict);
        }
예제 #2
0
        private static void BacktrackGuess(CombinationSets sets, vi number, int guessIteration)
        {
            if (guessIteration == GuessAttempts.Guess.Count)
            {
                PrintNumber(number);
                return;
            }

            sets.TryGetValue(GuessAttempts.RemainCorrectGuesses[guessIteration],
                             out var comb);

            if (comb == null)
            {
                BacktrackGuess(sets, number, guessIteration + 1);
                return;
            }

            for (int i = 0; i < comb.Count; ++i)
            {
                var  initialNumber = number.Select(c => c).ToList();
                bool resSet        = TrySetNewDigits(number, comb[i], guessIteration);

                if (resSet)
                {
                    var initRemainCorrect = GuessAttempts.RemainCorrectGuesses.Select(c => c).ToList();
                    var initGuesses       = GuessAttempts.Guess.Select(c => c.ToList()).ToList();

                    bool legitimate = TryUpdateCorrectGuesses(number, comb[i]);

                    if (legitimate)
                    {
                        BacktrackGuess(sets, number, guessIteration + 1);
                    }

                    GuessAttempts.RemainCorrectGuesses = initRemainCorrect;
                    GuessAttempts.Guess = initGuesses;
                }

                number = initialNumber;
            }
        }