Esempio n. 1
0
        public TrafficLightDigits[] Predict(Models.TrafficLight trafficLight, Observation[] previous)
        {
            Validate(trafficLight, previous);

            var predictedDigits = predictor
                                  .Predict(trafficLight, previous)
                                  .ToArray();

            var solutions = predictedDigits;

            if (previous.Length == 0)
            {
                return(predictedDigits);
            }

            if (IsSolutionFound(solutions))
            {
                solutions[0] += previous.Length;

                if (!previous[0].PredictedDigits.Contains(solutions[0]))
                {
                    Throws.NoSolutionFound();
                }

                return(solutions);
            }

            for (var i = previous.Length - 1; i >= 0; i--)
            {
                var prev        = previous[i];
                var incremented = IncrementAllDigits(solutions);

                solutions = prev.PredictedDigits.Intersect(incremented).ToArray();

                if (solutions.Length == 0)
                {
                    Throws.NoSolutionFound();
                }
            }

            return(solutions);
        }