Пример #1
0
 protected override void DoGold()
 {
     PerfMon.Monitor("Calculate", () =>
     {
         Result = encoder.ContiguousSet();
     });
 }
Пример #2
0
 protected override void DoGold()
 {
     PerfMon.Monitor("Calculate", () =>
     {
         Result = CountGold(bags.First(x => x.LuggageKind == "shiny gold"));
     });
 }
Пример #3
0
        protected override void ParseInput()
        {
            PerfMon.Monitor("Read", () =>
            {
                var input             = ReadInput();
                StringBuilder builder = new StringBuilder();
                int count             = 0;
                for (int i = 0; i < input.Length; i++)
                {
                    if (string.IsNullOrEmpty(input[i]) || i == input.Length - 1)
                    {
                        if (i == input.Length - 1)
                        {
                            count++;
                            builder.Append(input[i]);
                        }

                        groups.Add(new FlightGroup
                        {
                            PeopleCount = count,
                            Answers     = builder.ToString()
                        });
                        count = 0;
                        builder.Clear();
                    }
                    else
                    {
                        count++;
                        builder.Append(input[i]);
                    }
                }
            });
        }
Пример #4
0
        protected override void DoSilver()
        {
            PerfMon.Monitor("Parse", () =>
            {
                ParseInput();
            });


            PerfMon.Monitor("Calculate", () =>
            {
                var memory = new long[masks.SelectMany(x => x.ValueToMemoryPosition.Select(y => y.MemoryAddress)).Max()];

                foreach (var mask in masks)
                {
                    ApplyMask(mask, memory);
                }

                var result = (long)0;
                foreach (var val in memory)
                {
                    result += val;
                }

                Result = result;
            });
        }
Пример #5
0
        protected override void ParseInput()
        {
            StringBuilder builder = new StringBuilder();

            PerfMon.Monitor("Parse", () => {
                var lines = ReadInput();
                foreach (var line in lines)
                {
                    if (string.IsNullOrWhiteSpace(line))
                    {
                        var passport   = new Passport();
                        var properties = builder.ToString().Split(' ').SelectMany(x => x.Split(':')).ToList();
                        for (int i = 0; i < properties.Count(); i += 2)
                        {
                            passport.Fields.Add(properties[i], properties[i + 1]);
                        }
                        passports.Add(passport);
                        builder = new StringBuilder();
                    }
                    else
                    {
                        if (builder.Length > 0)
                        {
                            builder.Append(" " + line);
                        }
                        else
                        {
                            builder.Append(line);
                        }
                    }
                }
            });
        }
Пример #6
0
        protected override void DoSilver()
        {
            PerfMon.Monitor("Parse", () => ParseInput());

            PerfMon.Monitor("Calculate", () =>
            {
                newSeatStatus = Seats;
                cycles        = 0;
                while (cycles == 0 || !StatusSame(Seats, newSeatStatus))
                {
                    cycles++;
                    Seats         = newSeatStatus;
                    newSeatStatus = Seats.Select(x => new char[x.Count()]).ToList();
                    for (int row = 0; row < Seats.Count; row++)
                    {
                        for (int seat = 0; seat < Seats[row].Count(); seat++)
                        {
                            Evaluate2(row, seat);
                        }
                    }
                }
                Console.WriteLine("Done in {0} cycles", cycles);
                Result = Seats.Sum(x => x.Count(y => y == '#'));
            });
        }
Пример #7
0
        protected override void DoGold()
        {
            PerfMon.Monitor("Calculate", () =>
            {
                var res = new List <long>();
                foreach (var line in lines)
                {
                    var trimmedLine            = line.Replace(" ", "");
                    Stack <string> calculation = new Stack <string>();
                    foreach (var c in trimmedLine)
                    {
                        calculation.Push(c.ToString());
                        if (c == ')')
                        {
                            var poppedChar  = default(string);
                            StringBuilder a = new StringBuilder();
                            while (poppedChar != "(")
                            {
                                calculation.TryPop(out poppedChar);
                                a.Insert(0, poppedChar);
                                if (poppedChar == "(")
                                {
                                    var result = CalcString2(a.ToString().Substring(1, a.Length - 2));
                                    calculation.Push(result.ToString());
                                }
                            }
                        }
                    }

                    res.Add(CalcString2(calculation.Reverse().Aggregate((a, b) => a + b)));
                }

                Result = res.Sum();
            });
        }
Пример #8
0
        protected override void DoGold()
        {
            PerfMon.Monitor("Calculate", () =>
            {
                Result = 0;
                Rules.First(x => x.Id == 8).Constraint  = "42 | 42 8";
                Rules.First(x => x.Id == 11).Constraint = "42 31 | 42 11 31";

                var allCombinations  = GetString(42);
                var allCombinations2 = GetString(31);

                foreach (var input in Inputs)
                {
                    for (int i = 1; i < 20; i++)
                    {
                        var ft = allCombinations.Aggregate((a, b) => a + "|" + b);
                        var to = allCombinations2.Aggregate((a, b) => a + "|" + b);
                        var a  = Regex.Match(input, $"^({ft})+(({ft})" + "{" + i + "}" + $"({to})" + "{" + i + "}" + ")$");
                        if (a.Success)
                        {
                            Result++;
                        }
                    }
                }
            });
        }
Пример #9
0
 protected override void DoGold()
 {
     PerfMon.Monitor("Calculate", () =>
     {
         Result = adapters.SolveCombinations(0, 0);
     });
 }
Пример #10
0
 protected override void DoGold()
 {
     PerfMon.Monitor("Calculate", () =>
     {
         Result = groups.Select(x => x.SameAnswerCount()).Sum();
     });
 }
Пример #11
0
 protected override void DoSilver()
 {
     ParseInput();
     PerfMon.Monitor("Calculate", () =>
     {
         Result = passes.Select(x => x.GetSeatId()).Max();
     });
 }
Пример #12
0
 protected override void DoGold()
 {
     ParseInput();
     PerfMon.Monitor("Calculate", () =>
     {
         Result = positions.Select(x => x.CalculateTrees()).Aggregate((x, y) => x * y);
     });
 }
Пример #13
0
 protected override void DoSilver()
 {
     ParseInput();
     PerfMon.Monitor("Calculate", () =>
     {
         Result = groups.Select(x => x.Answers.Distinct().Count()).Sum();
     });
 }
Пример #14
0
 static void Main(string[] args)
 {
     PerfMon.Monitor("DayTotal", () =>
     {
         var solution = new Solution();
         solution.Solve();
     });
 }
Пример #15
0
 protected override void DoGold()
 {
     PerfMon.Monitor("Calculate", () =>
     {
         var allPasses  = passes.Select(x => x.GetSeatId()).OrderBy(x => x);
         var allNumbers = Enumerable.Range(allPasses.Min(), allPasses.Count());
         Result         = allNumbers.Except(allPasses).First();
     });
 }
Пример #16
0
        protected override void ParseInput()
        {
            var lines = ReadInput();

            PerfMon.Monitor("Parse", () =>
            {
                encoder.Cypher = lines.Select(x => long.Parse(x)).ToList();
            });
        }
Пример #17
0
        protected override void DoSilver()
        {
            ParseInput();
            encoder.Preamble = 25;

            PerfMon.Monitor("Calculate", () =>
            {
                Result = encoder.FindBadNumber();
            });
        }
Пример #18
0
        protected override void DoGold()
        {
            PerfMon.Monitor("Parse", () => ParseInput());

            PerfMon.Monitor("Calculate", () =>
            {
                var wrongNumbers = new List <long[]>();
                nearbyTickets.ForEach(x =>
                {
                    var remove = false;
                    foreach (var number in x)
                    {
                        if (!rules.Any(y => (y.LowerValues.Item1 <= number && number <= y.LowerValues.Item2) || (y.HigherValues.Item1 <= number && number <= y.HigherValues.Item2)))
                        {
                            remove = !remove;
                        }
                    }
                    if (remove)
                    {
                        wrongNumbers.Add(x);
                    }
                });
                wrongNumbers.ForEach(x => nearbyTickets.Remove(x));

                for (int i = 0; i < nearbyTickets[0].Length; i++)
                {
                    var valuesOfOneField = nearbyTickets.Select(x => x[i]);
                    var matches          = new List <string>();
                    foreach (var rule in rules)
                    {
                        //if (rule.Any(y => (y.LowerValues.Item1 <= number && number <= y.LowerValues.Item2) || (y.HigherValues.Item1 <= number && number <= y.HigherValues.Item2)))
                        if (valuesOfOneField.All(y => (rule.LowerValues.Item1 <= y && y <= rule.LowerValues.Item2) || (rule.HigherValues.Item1 <= y && y <= rule.HigherValues.Item2)))
                        {
                            matches.Add(rule.Name);
                        }
                    }

                    allCombis.Add(i, matches);
                }

                ruleOrder  = Filter(allCombis);
                var result = (long)1;
                for (int i = 0; i < ruleOrder.Count; i++)
                {
                    if (ruleOrder[i].IndexOf("departure") != -1)
                    {
                        result *= myTicket[i];
                    }
                }

                Result = result;
            });
        }
Пример #19
0
        protected override void DoSilver()
        {
            PerfMon.Monitor("Parse", () =>
            {
                ParseInput();
            });

            PerfMon.Monitor("Calculate", () =>
            {
                Result = adapters.CountDifferences();
            });
        }
Пример #20
0
        protected override void DoSilver()
        {
            PerfMon.Monitor("Parse", () =>
            {
                ParseInput();
            });

            PerfMon.Monitor("Calculate", () =>
            {
                Result = bags.Select(x => FindGold(x)).Count(x => x == true);
            });
        }
Пример #21
0
        protected override void ParseInput()
        {
            PerfMon.Monitor("Parse", () =>
            {
                var lines = ReadInput();
                var area  = new List <char[]>();
                // Create Area
                for (int i = 0; i < lines.Count(); i++)
                {
                    area.Add(lines[i].ToCharArray());
                }

                // Create MoveSettings
                positions = new List <Area>()
                {
                    new Area
                    {
                        Map      = area,
                        Settings = new MoveSettings {
                            Right = 1, Down = 1
                        }
                    },
                    new Area
                    {
                        Map      = area,
                        Settings = new MoveSettings {
                            Right = 3, Down = 1
                        }
                    },
                    new Area
                    {
                        Map      = area,
                        Settings = new MoveSettings {
                            Right = 5, Down = 1
                        }
                    },
                    new Area
                    {
                        Map      = area,
                        Settings = new MoveSettings {
                            Right = 7, Down = 1
                        }
                    },
                    new Area
                    {
                        Map      = area,
                        Settings = new MoveSettings {
                            Right = 1, Down = 2
                        }
                    }
                };
            });
        }
Пример #22
0
        protected override void DoGold()
        {
            PerfMon.Monitor("Calculate", () =>
            {
                Ship ship = new Ship();
                foreach (var command in AllCommands)
                {
                    ship.MoveWaypoint(command);
                }

                Result = ship.Coordinates.Sum(x => Math.Abs(x));
            });
        }
Пример #23
0
 protected override void ParseInput()
 {
     PerfMon.Monitor("Read", () =>
     {
         var lines = ReadInput();
         foreach (var line in lines)
         {
             passes.Add(new BoardingPass()
             {
                 Pass = line
             });
         }
     });
 }
Пример #24
0
        protected override void DoSilver()
        {
            PerfMon.Monitor("Read", () =>
            {
                ParseInput();
            });
            PerfMon.Monitor("Calculate", () =>
            {
                var allCombinations = GetString(0);


                Result = Inputs.Intersect(allCombinations).Count();
            });
        }
Пример #25
0
        protected override void DoGold()
        {
            PerfMon.Monitor("Parse", () => ParseInput());
            PerfMon.Monitor("Calculate", () =>
            {
                for (int cycle = 0; cycle < 6; cycle++)
                {
                    AddExtraRows2();
                    _cubeStates2 = CheckNeighbours(cycle, _cubeStates2);
                }

                Result = _cubeStates2.Select(x => x.Value).Count(x => x);
            });
        }
Пример #26
0
        protected override void DoSilver()
        {
            PerfMon.Monitor("Read", () => ParseInput());

            PerfMon.Monitor("Calculate", () =>
            {
                Ship ship = new Ship();
                foreach (var command in AllCommands)
                {
                    ship.Move(command);
                }

                Result = ship.Coordinates.Sum(x => Math.Abs(x));
            });
        }
Пример #27
0
        protected override void DoSilver()
        {
            ParseInput();

            PerfMon.Monitor("Calculate", () =>
            {
                foreach (var number in allNumbers)
                {
                    var result = allNumbers.Except(new int[] { number }).Where(y => y + number == 2020).FirstOrDefault();
                    if (result != default(int))
                    {
                        Result = result * number;
                        return;
                    }
                }
            });
        }
Пример #28
0
 protected override void ParseInput()
 {
     PerfMon.Monitor("Read", () =>
     {
         var lines = ReadInput();
         foreach (var line in lines)
         {
             var match = Regex.Match(line, "(\\d*)-(\\d*) (.*): (.*)");
             policies.Add(new Policy
             {
                 MinOccur = int.Parse(match.Groups[1].Value),
                 MaxOccur = int.Parse(match.Groups[2].Value),
                 Sequence = match.Groups[3].Value[0],
                 Password = match.Groups[4].Value,
             });
         }
     });
 }
Пример #29
0
 protected override void DoGold()
 {
     PerfMon.Monitor("Calculate", () =>
     {
         foreach (var number in allNumbers)
         {
             foreach (var nu in allNumbers.Except(new int[] { number }))
             {
                 var result = allNumbers.Except(new int[] { number, nu }).Where(y => y + number + nu == 2020).FirstOrDefault();
                 if (result != default(int))
                 {
                     Result = result * number * nu;
                     return;
                 }
             }
         }
     });
 }
Пример #30
0
        protected override void DoSilver()
        {
            PerfMon.Monitor("Parse", () => ParseInput());
            PerfMon.Monitor("Calculate", () =>
            {
                var wrongNumbers = new List <long>();
                nearbyTickets.ForEach(x =>
                {
                    foreach (var number in x)
                    {
                        if (!rules.Any(y => (y.LowerValues.Item1 <= number && number <= y.LowerValues.Item2) || (y.HigherValues.Item1 <= number && number <= y.HigherValues.Item2)))
                        {
                            wrongNumbers.Add(number);
                        }
                    }
                });

                Result = wrongNumbers.Sum();
            });
        }