Esempio n. 1
0
        static void Main(string[] args)
        {
            _stopwatch = new Stopwatch();

            if (IncludeDay(1))
            {
                var day1 = new Day01();
                Output(1, 1, "Two values", day1.ExpenseTwoResult(InputData.Day01Expenses));
                Output(1, 2, "Three values", day1.ExpenseThreeResult(InputData.Day01Expenses));
            }

            if (IncludeDay(2))
            {
                var day2 = new Day02();
                Output(2, 2, "By number", day2.CountCorrectPasswordsNumber(InputData.Day02Passwords));
                Output(2, 2, "By position", day2.CountCorrectPasswordsPosition(InputData.Day02Passwords));
            }

            if (IncludeDay(3))
            {
                var day3 = new Day03();
                Output(3, 1, "Right 3 down 1", day3.CountRight3Down1(InputData.Day03Trees));
                Output(3, 2, "Multiple paths", day3.CountMultiples(InputData.Day03Trees));
            }

            if (IncludeDay(4))
            {
                var day4 = new Day04();
                Output(4, 1, "Basic valid passports", day4.CountBasicValidPassports(InputData.Day04Passport));
                Output(4, 2, "Fully validated", day4.CountFullyValidatedPassports(InputData.Day04Passport));
            }

            if (IncludeDay(5))
            {
                var day5 = new Day05();
                Output(5, 1, "Highest seat ID", day5.HighestSeatId(InputData.Day05Boarding));
                Output(5, 2, "My seat ID", day5.FindSeatId(InputData.Day05Boarding));
            }

            if (IncludeDay(6))
            {
                var day6 = new Day06();
                Output(6, 1, "Number of questions", day6.CountGroupQuestions(InputData.Day06Customs));
                Output(6, 2, "Matching questions in group", day6.CountMatchingInGroupQuestions(InputData.Day06Customs));
            }

            if (IncludeDay(7))
            {
                var day7 = new Day07();
                Output(7, 1, "Number of bags", day7.CountOuterBagsForShinyGold(InputData.Day07Haversacks));
                Output(7, 2, "Total bags", day7.TotalNumberOfBags(InputData.Day07Haversacks));
            }

            if (IncludeDay(8))
            {
                var day8 = new Day08();
                Output(8, 1, "Accumulator at crash", day8.AccumulateAtCrash(InputData.Day08Handheld));
                Output(8, 2, "Accumulator with fix", day8.FixAndAccumulator(InputData.Day08Handheld));
            }

            if (IncludeDay(9))
            {
                var day9          = new Day09();
                var failingNumber = day9.FailingNumber(InputData.Day09Encoding, 25);
                Output(9, 1, "Failing number", failingNumber);
                Output(9, 2, "Total of run", day9.TotalOfRun(InputData.Day09Encoding, failingNumber));
            }

            if (IncludeDay(10))
            {
                var day10 = new Day10();
                Output(10, 1, "Jolt product", day10.JoltProduct(InputData.Day10Adapter));
                Output(10, 2, "Combinations", day10.Combinations(InputData.Day10Adapter));
            }

            if (IncludeDay(11))
            {
                var day11 = new Day11();
                Output(11, 1, "Occupied near", day11.SeatsAtEquilibriumNear(InputData.Day11Seating));
                Output(11, 2, "Occupied distance", day11.SeatsAtEquilibriumFurther(InputData.Day11Seating));
            }

            if (IncludeDay(12))
            {
                var day12 = new Day12();
                Output(12, 1, "Distance", day12.Manhattan(InputData.Day12Rain));
                Output(12, 2, "Distance waypoint", day12.ManhattanWaypoint(InputData.Day12Rain));
            }

            if (IncludeDay(13))
            {
                var day13 = new Day13();
                Output(13, 1, "Earliest depart", day13.FindEarliest(InputData.Day13Shuttle));
                Output(13, 2, "Sequential depart", day13.FindSequential(InputData.Day13Shuttle));
            }

            if (IncludeDay(14))
            {
                var day14 = new Day14();
                Output(14, 1, "Sum of memory", day14.SumOfMemory(InputData.Day14Docking));
                Output(14, 2, "Sum of floating", day14.SumOfFloatingMemory(InputData.Day14Docking));
            }

            {
                var day15 = new Day15();
                IncludeDay(15);
                Output(15, 1, "2020th number", day15.Find(2020, InputData.Day15NumberGame));
                Output(15, 2, "30m th number", day15.Find(30000000, InputData.Day15NumberGame));
            }

            if (IncludeDay(16))
            {
                var day16 = new Day16();
                Output(16, 1, "Error rate", day16.InvalidErrorRate(InputData.Day16Ticket));
                Output(16, 2, "Departure product", day16.DepartureProduct(InputData.Day16Ticket));
            }

            if (IncludeDay(17))
            {
                var day17 = new Day17();
                Output(17, 1, "Active in 3d", day17.Active(3, InputData.Day17Cubes));
                Output(17, 2, "Active in 4d", day17.Active(4, InputData.Day17Cubes));
            }

            if (IncludeDay(18))
            {
                var day18 = new Day18();
                Output(18, 1, "Active in 3d", day18.SumOfWithNoPrecedence(InputData.Day18Order));
                Output(18, 2, "Active in 4d", day18.SumOfAddTakesPrecedence(InputData.Day18Order));
            }

            if (IncludeDay(19))
            {
                var day19 = new Day19();
                Output(19, 1, "Valid messages", day19.ValidMessages(InputData.Day19Messages));
                Output(19, 2, "Valid messages with switch", day19.ValidMessagesWithSwitch(InputData.Day19Messages));
            }

            if (IncludeDay(20))
            {
                var day20 = new Day20();
                Output(20, 1, "Corners multiplied", day20.CornerMultiply(InputData.Day20Jigsaw));
                Output(20, 2, "Roughness", day20.SeaMonsters(InputData.Day20Jigsaw));
            }

            if (IncludeDay(21))
            {
                var day21 = new Day21();
                Output(21, 1, "Non allergens", day21.CountNonAllergens(InputData.Day21Allergen));
                Output(21, 2, "Dangerous", day21.Dangerous(InputData.Day21Allergen));
            }

            if (IncludeDay(22))
            {
                var day22 = new Day22();
                Output(22, 1, "Winning score", day22.WinningScore(InputData.Day22Crab));
                Output(22, 2, "Recursive winning score", day22.RecursiveWinningScore(InputData.Day22Crab));
            }

            if (IncludeDay(23))
            {
                var day23 = new Day23();
                Output(23, 1, "Cups from 1", day23.TextFrom1(InputData.Day23Cups, 100));
                Output(23, 2, "Multiply right 2", day23.RightMultiply(InputData.Day23Cups, 10000000));
            }

            if (IncludeDay(24))
            {
                var day24 = new Day24();
                Output(24, 1, "Black tiles", day24.CountBlack(InputData.Day24Hex));
                Output(24, 2, "Black after 100 days", day24.CountBlack100Days(InputData.Day24Hex));
            }

            if (IncludeDay(25))
            {
                var day25 = new Day25();
                Output(25, 1, "Encryption key", day25.EncryptionKey(InputData.Day25Keys));
            }

            Console.WriteLine();
            Console.WriteLine();

            Console.WriteLine("Day       Part 1    Part 2");
            for (int i = 0; i < 25; i++)
            {
                Console.WriteLine($"{i+1,-10}{Times[i,0],5} ms  {Times[i,1],5} ms");
            }
        }