Exemple #1
0
        private static IEnumerable <Aunt> Part0(string input)
        {
            var aunts = new List <Aunt>();

            var index = 1;

            foreach (var line in input.Lines())
            {
                var aunt = new Aunt
                {
                    Index = index++
                };

                aunts.Add(aunt);

                var words = line.Words().ToList();

                for (var i = 2; i < words.Count; i += 2)
                {
                    var key = words[i].Trim(':');
                    var val = words[i + 1].Trim(',').ToInt();

                    aunt.AddTrait(key, val);
                }
            }

            return(aunts);
        }
Exemple #2
0
 public bool PossibleSender2(Aunt sender)
 {
     foreach (var item in things.Keys)
     {
         if (item == "cats" || item == "trees")
         {
             if (things[item] <= sender.things[item])
             {
                 return(false);
             }
         }
         else if (item == "pomeranians" || item == "goldfish")
         {
             if (things[item] >= sender.things[item])
             {
                 return(false);
             }
         }
         else
         {
             if (things[item] != sender.things[item])
             {
                 return(false);
             }
         }
     }
     return(true);
 }
Exemple #3
0
        public void HandleEvent()
        {
            var publisher = new Publisher(
                assembly: Assembly.GetExecutingAssembly(),
                ns: typeof(PublisherTest.Person).Namespace);

            var aunt1 = new Aunt();
            var aunt2 = new Aunt();
            var uncle = new Uncle();

            publisher.Subscribe(aunt1);
            publisher.Subscribe(aunt2);
            publisher.Subscribe(uncle);

            publisher.Publish(new Newspaper());
            publisher.Publish(new Newspaper());
            publisher.Publish(new Ticket());

            Assert.Equal(2, aunt1.NewspaperCount);
            Assert.Equal(1, aunt1.TicketCount);
            Assert.Equal(2, aunt2.NewspaperCount);
            Assert.Equal(1, aunt2.TicketCount);
            Assert.Equal(0, uncle.TicketCount);
            Assert.Equal(2, uncle.NewspaperCount);
        }
Exemple #4
0
        private static double CalculateSingleDistance(Aunt tape, Aunt aunt, Func <Aunt, int?> selector)
        {
            var tapeValue = selector(tape);
            var auntValue = selector(aunt);

            return(Math.Abs((double)(tapeValue - auntValue).GetValueOrDefault()));
        }
Exemple #5
0
 public bool PossibleSender(Aunt sender)
 {
     foreach (var item in things.Keys)
     {
         if (things[item] != sender.things[item])
         {
             return(false);
         }
     }
     return(true);
 }
        public static void Day16()
        {
            Console.WriteLine("Starting Advent of Code 2015 Day 16");
            Stopwatch sw = new Stopwatch();

            sw.Start();
            // Read Input
            string      inputFile = @"D:\Users\U.6074887\Advent2020 Input Files\2015-16.txt";
            string      dataSet   = @"";
            List <Aunt> Aunties   = new List <Aunt>();

            // Parse File
            dataSet = MyConsoleApp.Utilities.FileUtilities.ReadTxtToString(inputFile);

            string[] fullEntryDiv = { "\n" };
            string[] rawEntries   = dataSet.Split(fullEntryDiv, System.StringSplitOptions.RemoveEmptyEntries);

            foreach (string item in rawEntries)
            {
                string[] items = item.Split(new string[] { " ", ":", "," }, StringSplitOptions.RemoveEmptyEntries);
                //Sue 2: goldfish: 7, trees: 1, akitas: 0
                //Sue 3: cars: 10, akitas: 6, perfumes: 7
                //Sue 4: perfumes: 2, vizslas: 0, cars: 6

                var newSue = new Aunt(
                    int.Parse(items[1]),
                    new Dictionary <string, int>
                {
                    { items[2].ToString(), int.Parse(items[3]) },
                    { items[4].ToString(), int.Parse(items[5]) },
                    { items[6].ToString(), int.Parse(items[7]) }
                }
                    );
                Aunties.Add(newSue);
            }
            //children: 3
            //cats: 7
            //samoyeds: 2
            //pomeranians: 3
            //akitas: 0
            //vizslas: 0
            //goldfish: 5
            //trees: 3
            //cars: 2
            //perfumes: 1

            Dictionary <string, int> targetSue = new Dictionary <string, int>
            {
                { "children", 3 },
                { "cats", 7 },
                { "samoyeds", 2 },
                { "pomeranians", 3 },
                { "akitas", 0 },
                { "vizslas", 0 },
                { "goldfish", 5 },
                { "trees", 3 },
                { "cars", 2 },
                { "perfumes", 1 }
            };



            #region Part 1


            sw.Stop();
            // Write Result
            Console.WriteLine("Answer to Part 1 {0}", 1);
            Console.WriteLine("Elapsed: {0}", sw.Elapsed);

            #endregion

            #region Part 2
            sw.Restart();

            sw.Stop();
            // Write Result
            Console.WriteLine("Answer to Part 2 {0}", 2);
            Console.WriteLine("Elapsed: {0}", sw.Elapsed);
            #endregion
        }
Exemple #7
0
        private static double CalculateDistancePart1(Aunt tape, Aunt aunt)
        {
            double sum = 0.0;

            int count = 0;

            if (aunt.Children.HasValue)
            {
                sum += CalculateSingleDistance(tape, aunt, x => x.Children);
                count++;
            }

            if (aunt.Cats.HasValue)
            {
                sum += CalculateSingleDistance(tape, aunt, x => x.Cats);
                count++;
            }

            if (aunt.Samoyeds.HasValue)
            {
                sum += CalculateSingleDistance(tape, aunt, x => x.Samoyeds);
                count++;
            }

            if (aunt.Pomeranians.HasValue)
            {
                sum += CalculateSingleDistance(tape, aunt, x => x.Pomeranians);
                count++;
            }

            if (aunt.Akitas.HasValue)
            {
                sum += CalculateSingleDistance(tape, aunt, x => x.Akitas);
                count++;
            }

            if (aunt.Vizslas.HasValue)
            {
                sum += CalculateSingleDistance(tape, aunt, x => x.Vizslas);
                count++;
            }

            if (aunt.Goldfish.HasValue)
            {
                sum += CalculateSingleDistance(tape, aunt, x => x.Goldfish);
                count++;
            }

            if (aunt.Trees.HasValue)
            {
                sum += CalculateSingleDistance(tape, aunt, x => x.Trees);
                count++;
            }

            if (aunt.Cars.HasValue)
            {
                sum += CalculateSingleDistance(tape, aunt, x => x.Cars);
                count++;
            }

            if (aunt.Perfumes.HasValue)
            {
                sum += CalculateSingleDistance(tape, aunt, x => x.Perfumes);
                count++;
            }

            return(sum / count);
        }
Exemple #8
0
        private static Aunt[] ParseInput(string input)
        {
            var result = new List <Aunt>();

            var numberRegex = new Regex("^Sue ([0-9]+):");

            foreach (var line in input.SplitLines())
            {
                var match = numberRegex.Matches(line)[0];

                var aunt = new Aunt();

                var parameters = line.Replace(match.Groups[0].Value, "");

                var splits = parameters.Split(',');

                foreach (var s in splits)
                {
                    var keyValue = s.Split(':');

                    var key   = keyValue[0].Trim();
                    var value = keyValue[1].Trim().ToInt();

                    switch (key)
                    {
                    case "children":
                        aunt.Children = value;
                        break;

                    case "cats":
                        aunt.Cats = value;
                        break;

                    case "samoyeds":
                        aunt.Samoyeds = value;
                        break;

                    case "pomeranians":
                        aunt.Pomeranians = value;
                        break;

                    case "akitas":
                        aunt.Akitas = value;
                        break;

                    case "vizslas":
                        aunt.Vizslas = value;
                        break;

                    case "goldfish":
                        aunt.Goldfish = value;
                        break;

                    case "trees":
                        aunt.Trees = value;
                        break;

                    case "cars":
                        aunt.Cars = value;
                        break;

                    case "perfumes":
                        aunt.Perfumes = value;
                        break;

                    default:
                        throw new ArgumentOutOfRangeException(nameof(value), @"Unknown value");
                    }
                }

                result.Add(aunt);
            }

            return(result.ToArray());
        }