Beispiel #1
0
 public Passport(Passport p) // copy constructor
 {
     this.data = p.data;
 }
Beispiel #2
0
        static void Main(string[] args)
        {
            List <Passport> passports = new List <Passport>();

            string[] lines = System.IO.File.ReadAllLines(@"C:\CodeBase\VS19\AdventOfCode2020\Day04\data.txt"); // ***** change this to the location of data.txt *****

            Passport p = new Passport();                                                                       // empty passport to fill

            foreach (var line in lines)
            {
                if (line == string.Empty) // store filled passport and create new empty passport
                {
                    passports.Add(new Passport(p));
                    p = new Passport();

                    continue;
                }

                string[] components = line.Split(' '); // split line into components

                foreach (var component in components)
                {
                    string[] fields = component.Split(':'); // split component into key:value pair

                    switch (fields[0])
                    {
                    case "byr":
                        p.data.byr = fields[1]; break;

                    case "iyr":
                        p.data.iyr = fields[1]; break;

                    case "eyr":
                        p.data.eyr = fields[1]; break;

                    case "hgt":
                        p.data.hgt = fields[1]; break;

                    case "hcl":
                        p.data.hcl = fields[1]; break;

                    case "ecl":
                        p.data.ecl = fields[1]; break;

                    case "pid":
                        p.data.pid = fields[1]; break;

                    case "cid":
                        p.data.cid = fields[1]; break;
                    }
                }
            }

            passports.Add(new Passport(p)); // add last passport

            Console.WriteLine($"Total passports: {passports.Count()}");

            int validpassportspart1 = 0;
            int validpassportspart2 = 0;

            foreach (Passport passport in passports)
            {
                //Console.WriteLine($"{passport}");
                if (passport.isValid())
                {
                    validpassportspart1++;
                }
                if (passport.isValid2())
                {
                    validpassportspart2++;
                }
            }

            Console.WriteLine();
            Console.WriteLine($"Part1 : Valid passports: {validpassportspart1}");
            Console.WriteLine($"Part2 : Valid passports: {validpassportspart2}");
        }
Beispiel #3
0
        static async Task Main(string[] args)
        {
            // Part One

            var inputLines = new List <string>();

            using var reader = new System.IO.StreamReader("Input.txt");
            while (reader.Peek() > -1)
            {
                var lineItem = await reader.ReadLineAsync();

                inputLines.Add(lineItem);
            }

            // Build passports
            var passports = new List <Passport>();
            var passport  = new Passport();

            foreach (var line in inputLines)
            {
                if (string.IsNullOrWhiteSpace(line))
                {
                    passports.Add(passport);
                    passport = new Passport();
                    continue;
                }

                var fields = line.Split(" ").ToList();
                foreach (var field in fields)
                {
                    var parts = field.Split(":");
                    switch (parts[0])
                    {
                    case PassportFields.BirthYear:
                        passport.BirthYear = parts[1];
                        break;

                    case PassportFields.IssueYear:
                        passport.IssueYear = parts[1];
                        break;

                    case PassportFields.ExpirationYear:
                        passport.ExpirationYear = parts[1];
                        break;

                    case PassportFields.Height:
                        passport.Height = parts[1];
                        break;

                    case PassportFields.HairColor:
                        passport.HairColor = parts[1];
                        break;

                    case PassportFields.EyeColor:
                        passport.EyeColor = parts[1];
                        break;

                    case PassportFields.PassportId:
                        passport.PassportId = parts[1];
                        break;

                    case PassportFields.CountryId:
                        passport.CountryId = parts[1];
                        break;
                    }
                }
            }
            passports.Add(passport);

            var validPassports = passports.Where(p => p.IsValid_Part1()).Count();

            Console.WriteLine($"Valid passports: {validPassports}");

            // Part 2

            validPassports = passports.Where(p => p.IsValid_Part1() && p.IsValid_Part2()).Count();
            Console.WriteLine($"Valid passports: {validPassports}");
        }
Beispiel #4
0
        static void Main(string[] args)
        {
            var passports = new List <Passport>();

            const string fileName = @"../../../input.txt";
            var          input    = File.ReadAllText(fileName);
            var          inputs   = input.Split("\n\n");

            for (var i = 0; i < inputs.Length; i++)
            {
                inputs[i] = inputs[i].Replace('\n', ' ');
                var tempSplit = inputs[i].Split(" ");
                var temp      = new Dictionary <string, string>();
                var passport  = new Passport();
                foreach (var ts in tempSplit)
                {
                    var tempPair = new KeyValuePair <string, string>(Helper.GetKey(ts), Helper.GetValue(ts));
                    switch (tempPair.Key)
                    {
                    case "ecl":
                        passport.EyeColor = tempPair.Value;
                        break;

                    case "pid":
                        passport.PassportId = tempPair.Value;
                        break;

                    case "eyr":
                        passport.ExpirationYear = tempPair.Value;
                        break;

                    case "hcl":
                        passport.HairColor = tempPair.Value;
                        break;

                    case "byr":
                        passport.BirthYear = tempPair.Value;
                        break;

                    case "iyr":
                        passport.IssueYear = tempPair.Value;
                        break;

                    case "cid":
                        passport.CountryId = tempPair.Value;
                        break;

                    case "hgt":
                        passport.Height = tempPair.Value;
                        break;
                    }
                }
                passports.Add(passport);
            }

            var validPassportsPartOne = passports.Count(x => x.IsValid());
            var validPassportsPartTwo = passports.Count(x => x.IsPartTwoValid());

            Console.WriteLine($"Part 1 - Number of valid passports: {validPassportsPartOne}");
            Console.WriteLine($"Part 2 - Number of valid passports: {validPassportsPartTwo}");
        }
Beispiel #5
0
        static List <Passport> ParseLinesInPassports(string[] lines)
        {
            List <Passport> passports       = new List <Passport>();
            Passport        currentPassport = new Passport();

            for (int index = 0; index < lines.Length; index++)
            {
                string line = lines[index];
                if (line == string.Empty)
                {
                    passports.Add(currentPassport);
                    currentPassport = new Passport();
                }

                List <string> passwordParams = line.Split(' ').ToList();
                foreach (string param in passwordParams)
                {
                    List <string> parameterDetails = param.Split(':').ToList();
                    switch (parameterDetails[0])
                    {
                    case "byr":
                        currentPassport.BirthYear = parameterDetails[1];
                        break;

                    case "iyr":
                        currentPassport.IssueYear = parameterDetails[1];
                        break;

                    case "eyr":
                        currentPassport.ExpirationYear = parameterDetails[1];
                        break;

                    case "hgt":
                        currentPassport.Height = parameterDetails[1];
                        break;

                    case "hcl":
                        currentPassport.HairColor = parameterDetails[1];
                        break;

                    case "ecl":
                        currentPassport.EyeColor = parameterDetails[1];
                        break;

                    case "pid":
                        currentPassport.PassportId = parameterDetails[1];
                        break;

                    case "cid":
                        currentPassport.CountryId = parameterDetails[1];
                        break;
                    }
                }

                if (index == lines.Length - 1)
                {
                    passports.Add(currentPassport);
                }
            }

            return(passports);
        }