Example #1
0
        private bool IsValid(double sum)
        {
            // Keep only the last {COUNT_PREAMBLE} numbers
            int sumIndex   = Sums.IndexOf(sum);
            var preambules = AllInputs.Skip(sumIndex).Take(COUNT_PREAMBLE);
            // Cross join the preambules together then validate sum
            var crossPreambules = preambules.SelectMany(x => preambules.Where(y => y != x), (x, y) => new { x, y }).ToList();

            return(crossPreambules.Any((combo) => combo.x + combo.y == sum));
        }
Example #2
0
        public bool IsDependentOn(string subjectIdentifier, string dependencyIdentifier)
        {
            if (subjectIdentifier is null || dependencyIdentifier is null || !AllInputs.Any())
            {
                return(false);
            }

            var subject = AllInputs.FirstOrDefault(x => x.OriginalIdentifier.EndsWith(subjectIdentifier));
            var target  = AllInputs.FirstOrDefault(x => x.OriginalIdentifier.EndsWith(dependencyIdentifier));

            return(Dependencies[subject].Dependencies.Any(x => x.Input.OriginalIdentifier == target.OriginalIdentifier));
        }
Example #3
0
        protected override void Run()
        {
            // Parse input string -> double
            AllInputs = InputLines.Select(x => double.Parse(x)).ToList();
            Sums      = AllInputs.Skip(COUNT_PREAMBLE).ToList();

            // Part 1: Check the one that is not valid
            double susNumber = Sums.FirstOrDefault((sum) => !IsValid(sum));

            AnswerPart1 = susNumber.ToString();

            // Part 2: Calculate weakness of the not valid number
            AnswerPart2 = CalculateWeakness(susNumber).ToString();
        }
Example #4
0
        private double CalculateWeakness(double invalidNumber)
        {
            for (int i = 0; i < AllInputs.Count; i++)
            {
                double nb = AllInputs[i];

                for (int j = i + 1; j < AllInputs.Count; j++)
                {
                    nb += AllInputs[j];

                    if (nb == invalidNumber)
                    {
                        // Found weakness
                        List <double> weaknesses = AllInputs.Skip(i).Take(j - i).ToList();
                        return(weaknesses.Min() + weaknesses.Max());
                    }
                }
            }

            throw new Exception("Weakness not found");
        }