コード例 #1
0
ファイル: day07.cs プロジェクト: nickdelany/adventofcode
        static void Main(string[] args)
        {
            Directory.SetCurrentDirectory(@"D:\projects\adventofcode\2020");

            var contents = System.IO.File.ReadAllLines("input/day07.data");

            foreach (var line in contents)
            {
                var s = line.Split(new string[] { " bags contain " }, StringSplitOptions.RemoveEmptyEntries);

                var b = new bag(s[0]);
                foreach (var d in s[1].Split(new string[] { " bags, ", " bags.", " bag, ", " bag." }, StringSplitOptions.RemoveEmptyEntries))
                {
                    if (d != "no other")
                    {
                        b.contains(
                            int.Parse(d.Substring(0, d.IndexOf(' '))),
                            d.Substring(d.IndexOf(' ') + 1)
                            );
                    }
                }

                data.Add(b.name, b);
            }

            foreach (var bag in data.Values)
            {
                if (bag.name != myBag)
                {
                    bag.gold = process(bag);
                }
            }

            Console.WriteLine("Answer: "
                              + data.Values.Where(d => d.gold).Count());

            int count = 0;

            foreach (var bag in data[myBag].bags)
            {
                count += Count(bag);
            }

            Console.WriteLine("Answer: " + count);
        }
コード例 #2
0
        private void day7_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < input.Count; i++)
            {
                bag temp = new bag(i);
                temp.bagColor = input[i].Substring(0, input[i].IndexOf(" bags"));
                temp.bagCount = 1;
                temp.index    = i;

                string contentString = input[i].Substring(input[i].LastIndexOf("contain ") + 8);
                if (!contentString.Contains("no other"))
                {
                    string[] line = contentString.Split(delims);
                    temp.contents = new List <bag>();
                    for (int j = 0; j < line.Length; j++)
                    {
                        line[j] = line[j].Trim();
                        bag contentTemp = new bag(line[j][0], j);
                        contentTemp.bagColor = line[j].Substring(2, line[j].Length - 7);
                        temp.contents.Add(contentTemp);
                    }
                }

                bags.Add(temp);
            }
            int gbOptions = -1;

            for (int i = 0; i < bags.Count; i++)
            {
                /*printRecursive("", i);*/
                if (countRecursive(i))
                {
                    Console.Out.WriteLine(i + " is true");
                    gbOptions++;
                }
                else
                {
                    Console.Out.WriteLine(i + " is false");
                }
            }

            Console.Out.WriteLine("Number of possible shinys: " + gbOptions);
        }
コード例 #3
0
ファイル: day07.cs プロジェクト: nickdelany/adventofcode
        static Boolean process(bag p)
        {
            if (p.name == myBag)
            {
                return(true);
            }

            if (seen.Contains(p.name))
            {
                return(p.gold);
            }

            seen.Add(p.name);

            foreach (var b in p.bags)
            {
                if (process(data[b.name]))
                {
                    p.gold = true;
                }
            }

            return(p.gold);
        }