Пример #1
0
        public static void DayFour(IEnumerable <string> input)
        {
            var delimiters = new char[] { '\r', '\n', ' ' };

            List <List <PassportField> > passportFields = new List <List <PassportField> >();

            foreach (var item in input)
            {
                var fields = item.Split(delimiters)
                             .Where(s => s != string.Empty)
                             .Select(s => s.Split(':'))
                             .Select(s => new PassportField(s[0], s.Count() == 2 ? s[1] : null))
                             .ToList();

                passportFields.Add(fields);
            }

            var policy = new PasswordPolicy(
                new List <string>()
            {
                PassportBuilder.BirthYear,
                PassportBuilder.ExpirationYear,
                PassportBuilder.EyeColor,
                PassportBuilder.HairColor,
                PassportBuilder.Height,
                PassportBuilder.IssueYear,
                PassportBuilder.PassportId
            });

            var passportBuilder = PassportBuilder.Create(policy);

            var validPassports = passportFields.Select(s => passportBuilder.CreatePassport(s)).Where(s => s != null).ToList();
        }
Пример #2
0
        public void PassportValidation_WithAllInvalidInput_ShouldReturn0Valid()
        {
            string testInput = @"eyr:1972 cid:100
                hcl:#18171d ecl:amb hgt:170 pid:186cm iyr:2018 byr:1926

                iyr:2019
                hcl:#602927 eyr:1967 hgt:170cm
                ecl:grn pid:012533040 byr:1946

                hcl:dab227 iyr:2012
                ecl:brn hgt:182cm pid:021572410 eyr:2020 byr:1992 cid:277

                hgt:59cm ecl:zzz
                eyr:2038 hcl:74454a iyr:2023
                pid:3556412378 byr:2007";

            string[] passportsData = new List <string>(
                testInput.Split(Environment.NewLine)
                )
                                     .Select(s => s.Trim())
                                     .ToArray();

            int             validPassports  = 0;
            PassportBuilder passportBuilder = new PassportBuilder();

            for (int i = 0; i <= passportsData.Length; i++)
            {
                if (i == passportsData.Length || IsAnEmptyLine(passportsData[i]))
                {
                    Passport passport = passportBuilder.CreatePassport();
                    passport.HackRequirements(new string[] { "byr", "iyr", "eyr", "hgt", "hcl", "ecl", "pid" });

                    if (passport.IsValid())
                    {
                        validPassports++;
                    }

                    passportBuilder = new PassportBuilder();
                }
                else
                {
                    passportBuilder.AddData(passportsData[i]);
                }
            }

            Assert.Equal(0, validPassports);
        }
Пример #3
0
        public void FindValidPassports_WithDefaultInput_ShouldReturn2()
        {
            string testInput = @"ecl:gry pid:860033327 eyr:2020 hcl:#fffffd
                byr:1937 iyr:2017 cid:147 hgt:183cm

                iyr:2013 ecl:amb cid:350 eyr:2023 pid:028048884
                hcl:#cfa07d byr:1929

                hcl:#ae17e1 iyr:2013
                eyr:2024
                ecl:brn pid:760753108 byr:1931
                hgt:179cm

                hcl:#cfa07d eyr:2025 pid:166559648
                iyr:2011 ecl:brn hgt:59in";

            string[] passportsData = new List <string>(
                testInput.Split(Environment.NewLine)
                )
                                     .Select(s => s.Trim())
                                     .ToArray();

            int             validPassports  = 0;
            PassportBuilder passportBuilder = new PassportBuilder();

            for (int i = 0; i <= passportsData.Length; i++)
            {
                if (i == passportsData.Length || IsAnEmptyLine(passportsData[i]))
                {
                    Passport passport = passportBuilder.CreatePassport();
                    passport.HackRequirements(new string[] { "byr", "iyr", "eyr", "hgt", "hcl", "ecl", "pid" });

                    if (passport.AreAllRequiredDataSet())
                    {
                        validPassports++;
                    }

                    passportBuilder = new PassportBuilder();
                }
                else
                {
                    passportBuilder.AddData(passportsData[i]);
                }
            }

            Assert.Equal(2, validPassports);
        }
Пример #4
0
        public void PassportValidation_WithAllValidInput_ShouldReturn4Valid()
        {
            string testInput = @"pid:087499704 hgt:74in ecl:grn iyr:2012 eyr:2030 byr:1980
                hcl:#623a2f

                eyr:2029 ecl:blu cid:129 byr:1989
                iyr:2014 pid:896056539 hcl:#a97842 hgt:165cm

                hcl:#888785
                hgt:164cm byr:2001 iyr:2015 cid:88
                pid:545766238 ecl:hzl
                eyr:2022

                iyr:2010 hgt:158cm hcl:#b6652a ecl:blu byr:1944 eyr:2021 pid:093154719";

            string[] passportsData = new List <string>(
                testInput.Split(Environment.NewLine)
                )
                                     .Select(s => s.Trim())
                                     .ToArray();

            int             validPassports  = 0;
            PassportBuilder passportBuilder = new PassportBuilder();

            for (int i = 0; i <= passportsData.Length; i++)
            {
                if (i == passportsData.Length || IsAnEmptyLine(passportsData[i]))
                {
                    Passport passport = passportBuilder.CreatePassport();
                    passport.HackRequirements(new string[] { "byr", "iyr", "eyr", "hgt", "hcl", "ecl", "pid" });

                    if (passport.IsValid())
                    {
                        validPassports++;
                    }

                    passportBuilder = new PassportBuilder();
                }
                else
                {
                    passportBuilder.AddData(passportsData[i]);
                }
            }

            Assert.Equal(4, validPassports);
        }