示例#1
0
        public string RunOne()
        {
            List <Passport> passports = new List <Passport>();

            inputs = System.IO.File.ReadAllLines(@"..\..\Data\2020\input04.txt").ToList();
            Passport p = new Passport();

            passports.Add(p);

            for (int i = 0; i < inputs.Count; i++)
            {
                if (inputs[i] == "")
                {
                    p = new Passport();
                    passports.Add(p);
                }
                else
                {
                    List <string> split = inputs[i].Split(' ').ToList();
                    for (int j = 0; j < split.Count; j++)
                    {
                        string key   = split[j].Split(':')[0];
                        string value = split[j].Split(':')[1];
                        switch (key)
                        {
                        case "byr":
                            p.BirthYear = int.Parse(value);
                            break;

                        case "iyr":
                            p.IssueYear = int.Parse(value);
                            break;

                        case "eyr":
                            p.ExpirationYear = int.Parse(value);
                            break;

                        case "hgt":
                            p.Height = value;
                            break;

                        case "hcl":
                            p.HairColor = value;
                            break;

                        case "ecl":
                            p.EyeColor = value;
                            break;

                        case "pid":
                            p.PassportId = value;
                            break;

                        case "cid":
                            p.CountryId = value;
                            break;

                        default:
                            break;
                        }
                    }
                }
            }
            return(passports.Count(x => x.IsValid).ToString());
        }
示例#2
0
        public string RunTwo()
        {
            List <Passport> passports = new List <Passport>();
            Passport        p         = new Passport();

            passports.Add(p);

            for (int i = 0; i < inputs.Count; i++)
            {
                if (inputs[i] == "")
                {
                    p = new Passport();
                    passports.Add(p);
                }
                else
                {
                    List <string> split = inputs[i].Split(' ').ToList();
                    for (int j = 0; j < split.Count; j++)
                    {
                        string key   = split[j].Split(':')[0];
                        string value = split[j].Split(':')[1];
                        switch (key)
                        {
                        case "byr":
                            int test = int.Parse(value);
                            if (test >= 1920 && test <= 2002)
                            {
                                p.BirthYear = test;
                            }
                            break;

                        case "iyr":
                            int test2 = int.Parse(value);
                            if (test2 >= 2010 && test2 <= 2020)
                            {
                                p.IssueYear = test2;
                            }
                            break;

                        case "eyr":
                            int test3 = int.Parse(value);
                            if (test3 >= 2020 && test3 <= 2030)
                            {
                                p.ExpirationYear = test3;
                            }
                            break;

                        case "hgt":
                            if (value.EndsWith("cm") && value.Length == 5)
                            {
                                int test4 = int.Parse(value.Substring(0, 3));
                                if (test4 >= 150 && test4 <= 193)
                                {
                                    p.Height = value;
                                }
                            }
                            else if (value.EndsWith("in"))
                            {
                                int test4 = int.Parse(value.Substring(0, 2));
                                if (test4 >= 59 && test4 <= 76)
                                {
                                    p.Height = value;
                                }
                            }
                            break;

                        case "hcl":
                            if (value.StartsWith("#") && value.Length == 7)
                            {
                                Regex reg = new Regex((@"^[a-f0-9]+$"));

                                if (reg.Match(value.Substring(1, 6)).Success)
                                {
                                    p.HairColor = value;
                                }
                            }
                            break;

                        case "ecl":
                            if (value == "amb" || value == "blu" || value == "brn" || value == "gry" || value == "grn" || value == "hzl" || value == "oth")
                            {
                                p.EyeColor = value;
                            }
                            break;

                        case "pid":
                            if (value.Length == 9)
                            {
                                int test5 = int.Parse(value);
                                p.PassportId = value;
                            }
                            break;

                        case "cid":
                            p.CountryId = value;
                            break;

                        default:
                            break;
                        }
                    }
                }
            }
            return(passports.Count(x => x.IsValid).ToString());
        }