Example #1
0
        private IDictionary <string, Guest> ParseGuests(IPuzzleInput input)
        {
            var guests = new Dictionary <string, Guest>();

            foreach (var line in input.ReadLines())
            {
                var(name, _, direction, points, _, _, _, _, _, _, neighbor, rest) = line.Trim(' ', '.').Split(' ');

                if (!guests.ContainsKey(name))
                {
                    guests.Add(name, new Guest(new Dictionary <string, int>()));
                }

                var modifier = direction switch
                {
                    "lose" => - 1,
                    _ => 1
                };

                if (!guests[name].Neighbors.ContainsKey(neighbor))
                {
                    var number = int.Parse(points) * modifier;
                    guests[name].Neighbors.Add(neighbor, number);
                }
            }

            return(guests);
        }
    }
Example #2
0
 protected ActivityMap(IPuzzleInput <bool[][]> input)
 {
     map = Enumerable.Range(0, input.Value.Length)
           .SelectMany(j => Enumerable.Range(0, input.Value[j].Length)
                       .Select(i => new KeyValuePair <T, bool>(Construct(i, j), input.Value[j][i])))
           .ToDictionary(pair => pair.Key, pair => pair.Value);
 }
Example #3
0
 public WaypointNavigator(IPuzzleInput puzzleInput)
 {
     _puzzleInput     = puzzleInput;
     _heading         = 0;
     _currentPosition = Point.Empty;
     _waypoint        = new Point(10, 1);
 }
Example #4
0
        private string Part1(IPuzzleInput <IEnumerable <char[][]> > input)
        {
            var answer = input.Value
                         .Select(group => group.SelectMany(chars => chars.Select(c => c)).Distinct().ToArray())
                         .Aggregate(0, (i, chars) => i + chars.Length);

            return(answer.ToString());
        }
Example #5
0
        private string Part2(IPuzzleInput <IEnumerable <char[][]> > input)
        {
            var answer = input.Value
                         .Select(group => group.SelectMany(person => person.Select(c => c))
                                 .Distinct()
                                 .Count(c => group.All(person => person.Contains(c))))
                         .Aggregate((i, i1) => i + i1);

            return(answer.ToString());
        }
Example #6
0
        private IList <int> ParseContainers(IPuzzleInput input)
        {
            List <int> containers = new();

            foreach (var line in input.ReadLines())
            {
                containers.Add(int.Parse(line));
            }

            return(containers);
        }
Example #7
0
 public InputChecker(IPuzzleInput puzzleInput, [Dependency(nameof(CycleRunner3D))] ICycleRunner cycleRunner3,
                     [Dependency(nameof(InputParser3D))] IInputParser inputParser3,
                     [Dependency(nameof(CycleRunner4D))] ICycleRunner cycleRunner4,
                     [Dependency(nameof(InputParser4D))] IInputParser inputParser4)
 {
     _puzzleInput  = puzzleInput;
     _cycleRunner3 = cycleRunner3;
     _inputParser3 = inputParser3;
     _cycleRunner4 = cycleRunner4;
     _inputParser4 = inputParser4;
 }
Example #8
0
        private IList <Reindeer> ParseReindeer(IPuzzleInput input)
        {
            var list = new List <Reindeer>();

            foreach (var line in input.ReadLines())
            {
                var(name, _, _, speed, _, _, flySeconds, _, _, _, _, _, _, restSeconds, _) = line.Split(' ');
                list.Add(new Reindeer(name, int.Parse(speed), int.Parse(flySeconds), int.Parse(restSeconds)));
            }

            return(list);
        }
Example #9
0
        private string Part1(IPuzzleInput <IEnumerable <int> > input)
        {
            var memory = input.Value.ToList();

            for (int idx = memory.Count; idx < 2020; idx++)
            {
                var turn = memory.LastIndexOf(memory[idx - 1], idx - 2, idx - 1);
                memory.Add(idx - 1 - (turn == -1 ? idx - 1 : turn));
            }

            var answer = memory[2020 - 1];

            return(answer.ToString());
        }
Example #10
0
        public _24(IPuzzleInput input)
        {
            var packages = new List <ulong>();

            foreach (var line in input.ReadLines())
            {
                if (ushort.TryParse(line, out var package))
                {
                    packages.Add(package);
                }
            }

            _packages = packages.OrderByDescending(p => p).ToArray();
        }
Example #11
0
        private Character ParseEnemy(IPuzzleInput input)
        {
            Character enemy = new();
            var       type  = enemy.GetType();

            foreach (var line in input.ReadLines())
            {
                var(key, value, _) = line.Split(":");
                var property = type.GetProperty(key.Replace(" ", ""));

                if (property != null)
                {
                    property.SetValue(enemy, int.Parse(value));
                }
            }

            return(enemy);
        }
Example #12
0
        private string Part1(IPuzzleInput <IEnumerable <int> > input)
        {
            var entries = input.Value.ToArray();

            for (var i = 0; i < entries.Length; i++)
            {
                for (var j = i + 1; j < entries.Length; j++)
                {
                    var sum = entries[i] + entries[j];
                    if (sum == 2020)
                    {
                        var answer = entries[i] * entries[j];
                        return(answer.ToString());
                    }
                }
            }

            return(null);
        }
Example #13
0
        private IList <Ingredient> ParseIngredients(IPuzzleInput input)
        {
            var list       = new List <Ingredient>();
            var separators = new[] { ' ', ',', ':' };

            foreach (var line in input.ReadLines())
            {
                var(name, _, capacity, _, durability, _, flavor, _, texture, _, calories, _) = line.Split(separators, StringSplitOptions.RemoveEmptyEntries);
                list.Add(new Ingredient(
                             name,
                             int.Parse(capacity),
                             int.Parse(durability),
                             int.Parse(flavor),
                             int.Parse(texture),
                             int.Parse(calories)
                             ));
            }

            return(list);
        }
Example #14
0
        private static IDictionary <string, Instruction> ParseInstructions(IPuzzleInput input)
        {
            var result = new Dictionary <string, Instruction>();

            foreach (var line in input.ReadLines())
            {
                var(inputs, wire, _) = line.Split(" -> ");
                var    tokens       = inputs.Split(" ");
                string leftOperand  = null;
                string operatorStr  = null;
                string rightOperand = null;

                switch (tokens.Length)
                {
                case 1:
                    (leftOperand, _) = tokens;
                    break;

                case 2:
                    (operatorStr, rightOperand, _) = tokens;
                    break;

                case 3:
                    (leftOperand, operatorStr, rightOperand, _) = tokens;
                    break;
                }

                Operator? @operator = null;
                if (!string.IsNullOrWhiteSpace(operatorStr) && Enum.TryParse <Operator>(operatorStr, true, out var operatorEnum))
                {
                    @operator = operatorEnum;
                }

                result.Add(wire, new Instruction(leftOperand, @operator, rightOperand));
            }

            return(result);
        }
Example #15
0
 public InputChecker(IPuzzleInput puzzleInput, ITree <JoltNode> joltTree, ITree <PathNode> pathTree)
 {
     _puzzleInput = puzzleInput;
     _joltTree    = joltTree;
     _pathTree    = pathTree;
 }
Example #16
0
 public void OnUpdateSelectable(IPuzzleInput _input)
 {
     throw new System.NotImplementedException();
 }
Example #17
0
 public void OnUpdateSelectable(IPuzzleInput _input)
 {
 }
Example #18
0
 private string Part2(IPuzzleInput <IEnumerable <int> > input)
 {
     var start    = input.Value.ToArray();
     var memoized = start[..^ 1].Zip(Enumerable.Range(0, start.Length - 1))
Example #19
0
 public _12(IPuzzleInput input) => _input = input.ReadToEnd();
Example #20
0
 public _05(IPuzzleInput input) => _doorId = input.ReadToEnd();
Example #21
0
 public _21(IPuzzleInput input) => _enemy = ParseEnemy(input);
Example #22
0
 public _17(IPuzzleInput input) => _containers = ParseContainers(input);
Example #23
0
 public Map(IPuzzleInput puzzleInput)
 {
     _puzzleInput = puzzleInput;
 }
Example #24
0
 public InputChecker(IPuzzleInput puzzleInput)
 {
     _puzzleInput = puzzleInput;
 }
Example #25
0
 public _05(IPuzzleInput input) => _input = input;
Example #26
0
 public Navigator(IPuzzleInput puzzleInput)
 {
     _puzzleInput     = puzzleInput;
     _heading         = 0;
     _currentPosition = Point.Empty;
 }
Example #27
0
 public _22(IPuzzleInput input) => _boss = new(input);
Example #28
0
 public _20(IPuzzleInput input) => _input = uint.Parse(input.ReadToEnd());
Example #29
0
 public PasswordProcessor(IPuzzleInput puzzleInput, IPasswordPolicyFactory passwordPolicyFactory)
 {
     _puzzleInput           = puzzleInput;
     _passwordPolicyFactory = passwordPolicyFactory;
 }
Example #30
0
 public _18(IPuzzleInput input) => _input = input;