Untitled

 avatar
unknown
csharp
3 years ago
3.5 kB
15
Indexable
using System;
using System.Collections.Generic;
using System.Linq;

namespace Day32022
{
    public class BackPack
    {
        public List<Compartment> Compartments { get; set; }
    }
    public class Compartment
    {
        public List<BackPackItem> BackPackItems { get; set; }
    }
    public class BackPackItem
    {
        public string Letter { get; set; }
        public int Value { get; set; }
    }
    class Program
    {
        public static List<string> Input => System.IO.File.ReadAllLines(@"input.txt").ToList();
        public static void Main(string[] args)
        {
            var backPackList = Input.Select(x => GetBackPack(x)).ToList();

            var valuesPart1 = new List<int>();
            var valuesPart2 = new List<int>();

            for (int i = 0; i < backPackList.Count / 3; i++)
            {
                var allBackPacks = new List<BackPack>();
                if (i > 0)
                {
                    allBackPacks = backPackList.Skip(3 * i).Take(3).ToList();
                }
                else
                {
                    allBackPacks = backPackList.Take(3).ToList();
                }
                var FirstBackPack = allBackPacks[0].Compartments.SelectMany(x => x.BackPackItems);
                var SecondBackPack = allBackPacks[1].Compartments.SelectMany(x => x.BackPackItems);
                var ThirdBackPack = allBackPacks[2].Compartments.SelectMany(x => x.BackPackItems);

                valuesPart2.Add(FirstBackPack.Where(x => SecondBackPack.FirstOrDefault(y => y.Value == x.Value) != null &&
                ThirdBackPack.FirstOrDefault(y => y.Value == x.Value) != null).FirstOrDefault().Value);
            }

            foreach (var backpack in backPackList)
            {
                var firstCompartment = backpack.Compartments.First().BackPackItems;
                var secondCompartment = backpack.Compartments.Last().BackPackItems;

                valuesPart1.Add(firstCompartment.Where(x => secondCompartment.FirstOrDefault(y => y.Value == x.Value) != null).FirstOrDefault().Value);
            }
            Console.WriteLine(valuesPart1.Sum());
            Console.WriteLine(valuesPart2.Sum());
            Console.ReadLine();
        }
        public static BackPack GetBackPack(string backpack)
        {
            return new BackPack { Compartments = GetCompartments(backpack) };
        }
        public static List<Compartment> GetCompartments(string backPack)
        {
            var half = backPack.Length / 2;
            var firstCompartmen = backPack.Take(half).ToArray();
            var secondCompartmen = backPack.Skip(half).Take(half).ToArray();

            return new List<Compartment>() 
            { 
                new Compartment() { BackPackItems = GetBackPackItems(firstCompartmen) },
                new Compartment() { BackPackItems = GetBackPackItems(secondCompartmen) },
            };
        }
        public static List<BackPackItem> GetBackPackItems(char[] charArray)
        {
            var backPackItemList = new List<BackPackItem>();
            for (int i = 0; i < charArray.Length; i++)
            {
               
               backPackItemList.Add(new BackPackItem() { Letter = charArray[i].ToString(), 
                   Value = char.IsUpper(charArray[i]) ? charArray[i] - 38 : charArray[i] -96
               });;
            }
            return backPackItemList;
        }
    }
}
Editor is loading...