示例#1
0
 private static bool FieldIsValid(PassportField field)
 {
     return(field.FieldName switch
     {
         "byr" => IsYearInRange(field.Value, 1920, 2002),
         "iyr" => IsYearInRange(field.Value, 2010, 2020),
         "eyr" => IsYearInRange(field.Value, 2020, 2030),
         "hgt" => IsValidHeight(field.Value),
         "hcl" => IsHexColor(field.Value),
         "ecl" => IsEyeColor(field.Value),
         "pid" => IsValidPassportId(field.Value),
         _ => true
     });
示例#2
0
        public static IEnumerable <Passport> Parse(string input)
        {
            var passports       = input.Split("\n\n");
            var parsedPassports = new List <Passport>();

            foreach (var passport in passports)
            {
                var currentPassport = new Passport();

                var fields = Regex.Split(passport, @"[\s\n]");

                foreach (var field in fields)
                {
                    var           fieldInfo    = field.Split(":");
                    var           name         = fieldInfo[0];
                    var           value        = fieldInfo[1];
                    PassportField currentField = null;
                    switch (name)
                    {
                    case "byr":
                        currentField = new BirthYearField(value);
                        break;

                    case "iyr":
                        currentField = new IssueYearField(value);
                        break;

                    case "eyr":
                        currentField = new ExpirationYearField(value);
                        break;

                    case "hgt":
                        currentField = new HeightField(value);
                        break;

                    case "hcl":
                        currentField = new HairColorField(value);
                        break;

                    case "ecl":
                        currentField = new EyeColorField(value);
                        break;

                    case "pid":
                        currentField = new PassportIdField(value);
                        break;

                    case "cid":
                        currentField = new CountryIdField(value);
                        break;
                    }

                    if (currentField != null)
                    {
                        currentPassport.Fields.Add(currentField);
                    }
                }
                parsedPassports.Add(currentPassport);
            }
            return(parsedPassports);
        }