public static int ItsJustBagsAllTheWayDown(List <BagClass> Bags, BagClass InputBag) { var next_bags = InputBag.ContainedBags;// != null ? InputBag.ContainedBags : Bags.Where(x => x.BagType == InputBag.BagType).SelectMany(s => s.ContainedBags).ToList(); if (next_bags.Select(x => x.BagType).Contains("shiny gold")) { return(1); } else if (next_bags.Count == 1 && next_bags.Select(x => x.BagType).FirstOrDefault() == "no other") { return(0); } else { var ret_val = 0; foreach (var bag in next_bags) { ret_val += ItsJustBagsAllTheWayDown(Bags, new BagClass() { BagType = bag.BagType, ContainedBags = Bags.Where(x => x.BagType == bag.BagType).SelectMany(s => s.ContainedBags).ToList(), }); } if (ret_val > 0) { return(1); } else { return(0); } } return(-1); }
private static void BagTest() { BagClass myBag = new BagClass(3); var item1 = new SwordClass(); var item2 = new PotionClass(); myBag.AddItem(item1); myBag.AddItem(item2); myBag.DisplayContents(); }
public static void DaySeven(bool Debug) { Console.WriteLine(); Console.WriteLine("-7777777- Day Seven -7777777-"); Console.WriteLine(); var path_7 = @"C:\Users\thats\source\repos\adventofcode2020\day7input.txt"; //var path_7 = @"C:\Users\thats\source\repos\adventofcode2020\day7input-part1test.txt"; var number_regex = new Regex("[0-9]*"); var bags = new List <BagClass>(); foreach (var line in File.ReadLines(path_7)) { var contains_string = line.Split(" bags contain ")[1]; var contains_list = contains_string.Split(",").ToList(); var this_bag = new BagClass() { BagType = line.Split(" bags contain ")[0], ContainedBags = contains_list.Select(x => { var santitized = x.Replace(".", "").Replace("bags", "").Replace("bag", "").Trim(); var amount_match = number_regex.Match(santitized); return(new BagClass() { Amount = amount_match.Success == true && amount_match.Length > 0 ? Convert.ToInt32(amount_match.Value) : 0, BagType = santitized == "no other" ? santitized : santitized.Substring(2, santitized.Length - 2), }); }).ToList() }; bags.Add(this_bag); } var bags_with_shiny = bags.Where(x => x.ContainedBags.Where(y => y.BagType == "shiny gold").Count() > 0).Select(x => x.BagType).ToList(); var count = 0; foreach (var bag in bags) { count += ItsJustBagsAllTheWayDown(bags, bag); } Console.WriteLine($"Part One Answer - {count}"); var shiny_gold = bags.Where(x => x.BagType == "shiny gold").FirstOrDefault(); var shiny_gold_count = shiny_gold.ContainedBags.Select(x => x.Amount).Sum(); Console.WriteLine($"shiney gold count: {shiny_gold_count}"); Console.WriteLine($"Part Two Answer - {DeepCount(bags, shiny_gold)}"); }
public static int DeepCount(List <BagClass> AllBags, BagClass InputBag) { var ret_val = BagCount(InputBag); foreach (var bag in InputBag.ContainedBags) { for (var i = 1; i <= bag.Amount; i++) { ret_val += DeepCount(AllBags, new BagClass() { BagType = bag.BagType, ContainedBags = AllBags.Where(x => x.BagType == bag.BagType).SelectMany(s => s.ContainedBags).ToList() }); } } return(ret_val); }
private static void RemoveTest() { BagClass myBag = new BagClass(3); var item1 = new SwordClass(); var item2 = new PotionClass(); var item3 = new PotionClass(); myBag.AddItem(item1); myBag.AddItem(item2); myBag.AddItem(item3); myBag.DisplayContents(); var remove = myBag.RemoveItem(); Console.WriteLine($"Remove {item3.Name} from bag"); myBag.DisplayContents(); }
public static int BagCount(BagClass InputBag) { return(InputBag.ContainedBags.Select(x => x.Amount).Sum()); }