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); }
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); }
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); }
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())); }
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 }
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); }
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()); }