Exemplo n.º 1
0
            public void Should_match_example_data()
            {
                var input =
                    @"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";

                var pv = new PassportValidator
                {
                    Input = input
                };

                var count = pv.CountValidPassports();

                Assert.Equal(2, count);
            }
Exemplo n.º 2
0
            public void Should_not_match_invalid_example_B_passports()
            {
                var input =
                    @"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";

                var pv = new PassportValidator
                {
                    Input = input
                };

                var count = pv.CountValidPassports();

                Assert.Equal(0, count);
            }
Exemplo n.º 3
0
            public void Should_match_valid_example_B_passports()
            {
                var input =
                    @"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";

                var pv = new PassportValidator
                {
                    Input = input
                };

                var count = pv.CountValidPassports();

                Assert.Equal(4, count);
            }
Exemplo n.º 4
0
        public void HasRequiredFields()
        {
            var input           = @"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";
            var passportFactory = new PassportFactory();
            var passports       = PassportFactory.Create(input);

            var passportValidator = new PassportValidator();
            var validPassports    = passports
                                    .Where(passport => passportValidator.HasRequiredFields(passport))
                                    .ToList();

            Assert.Equal(2, validPassports.Count);
        }
        public void ExpiryYear_should_be_in_between_2020_and_2030_inclusive(int year, bool expectedOutput)
        {
            // Act
            var actualOutput = PassportValidator.ValidateExpiryYear(year);

            // Assert
            Assert.AreEqual(expectedOutput, actualOutput);
        }
Exemplo n.º 6
0
        public static int Run(string input)
        {
            var passports = new PassportParser().Parse(input);

            var validator = new PassportValidator();

            return(passports.Count(p => validator.Validate(p).IsValid));
        }
        public void Height_should_be_in_in_or_cm_and_with_in_range(string height, bool expectedOutput)
        {
            // Act
            var actualOutput = PassportValidator.ValidateHeight(height);

            // Assert
            Assert.AreEqual(expectedOutput, actualOutput);
        }
Exemplo n.º 8
0
        private static string SolvePart2(List <string> input)
        {
            var passports = ParsePassports(input);

            var validator = new PassportValidator(RequiredFields, OptionalFields, CreateValidationRules());

            return(passports.Count(x => validator.IsValid(x)).ToString());
        }
        public void PassportId_should_have_nine_digits_including_leading_zeroes(string passportId, bool expectedOutput)
        {
            // Act
            var actualOutput = PassportValidator.ValidatePassportId(passportId);

            // Assert
            Assert.AreEqual(expectedOutput, actualOutput);
        }
        public void Eye_Color_only_has_certain_valid_values(string eyeColor, bool expectedOutput)
        {
            // Act
            var actualOutput = PassportValidator.ValidateEyeColor(eyeColor);

            // Assert
            Assert.AreEqual(expectedOutput, actualOutput);
        }
Exemplo n.º 11
0
    public override int Part1(string input)
    {
        var factory        = new PassportFactory();
        var validator      = new PassportValidator();
        var passports      = PassportFactory.Create(input);
        var validPassports = passports.Where(passport => validator.HasRequiredFields(passport));

        return(validPassports.Count());
    }
        public void Hair_Color_should_have_a_hashtag_followed_by_exactly_six_characters_0_9_or_a_f(string hairColor,
                                                                                                   bool expectedOutput)
        {
            // Act
            var actualOutput = PassportValidator.ValidateHairColor(hairColor);

            // Assert
            Assert.AreEqual(expectedOutput, actualOutput);
        }
        public void Validate_Valid_Passport_Returns_Validated_Results()
        {
            var mockMrzParse     = new Mock <IParseMrzLine2>();
            var mockMrzValidator = new Mock <IMrzValidator>();
            //We need to mock the IMapper, use the existing profile and pass this in
            var mockMapper = new MapperConfiguration(cfg =>
            {
                cfg.AddProfile(new MappingProfile());
            });
            var mapper = mockMapper.CreateMapper();
            PassportValidator controller = new PassportValidator(mockMrzParse.Object, mockMrzValidator.Object, mapper);

            PassportInput passportInput = new PassportInput()
            {
                PassportNumber = "112256503",
                Nationality    = Nationality.GBR,
                DateOfBirth    = new DateTime(1989, 02, 12),
                Gender         = Gender.M,
                DateOfExpiry   = new DateTime(2020, 10, 01),
                MrzLine2       = "1122565035GBR8902122M2010016<<<<<<<<<<<<<<04"
            };
            MrzLine2 fakeMrzLine2 = new MrzLine2()
            {
                PassportNumber           = "112256503",
                CheckDigitPassportNumber = "5",
                Nationality           = Nationality.GBR,
                DateOfBirth           = new DateTime(1989, 02, 12),
                CheckDigitDateOfBirth = "2",
                Gender                   = Gender.M,
                DateOfExpiry             = new DateTime(2020, 10, 01),
                CheckDigitDateOfExpiry   = "6",
                PersonalNumber           = "",
                CheckDigitPersonalNumber = "0",
                CheckDigitOverall        = "4"
            };
            ValidationResults expectedValidationResults = new ValidationResults()
            {
                PassportNumberCheckDigit         = true,
                DateOfBirthCheckDigit            = true,
                PassportExpirationDateCheckDigit = true,
                PersonalNumberCheckDigit         = true,
                FinalCheckDigit          = true,
                GenderCrossCheck         = true,
                DateOfBirthCrossCheck    = true,
                ExpirationDateCrossCheck = true,
                NationalityCrossCheck    = true,
                PassportNumberCrossCheck = true
            };

            mockMrzParse.Setup(x => x.ParseMrzLine2FromString(It.IsAny <string>())).Returns(fakeMrzLine2);
            mockMrzValidator.Setup(x => x.ValidateMrzAndBaseData(It.IsAny <PassportBaseData>(), It.IsAny <MrzLine2>())).Returns(expectedValidationResults);

            ValidationResults returnedValidationResults = controller.Validate(passportInput).Value;

            Assert.Equal(expectedValidationResults, returnedValidationResults);
        }
Exemplo n.º 14
0
        public void Part1(string filepath, int expected)
        {
            var parser    = new Parser(filepath);
            var factory   = new PassportFactory();
            var passports = parser.Parse(factory).Where(p => p != null);
            var sut       = new PassportValidator(passports, new[] { new NotNull() });
            var actual    = sut.Validate();

            Assert.Equal(expected, actual);
        }
Exemplo n.º 15
0
        public void ValidateHeight(string height, bool expected)
        {
            var passport = new Passport
            {
                Height = height
            };
            var validator = new PassportValidator();
            var actual    = validator.ValidateHeight(passport);

            Assert.Equal(actual, expected);
        }
Exemplo n.º 16
0
        public void ValidateBirthYear(int year, bool expected)
        {
            var passport = new Passport
            {
                BirthYear = year
            };
            var validator = new PassportValidator();
            var actual    = validator.ValidateBirthYear(passport);

            Assert.Equal(actual, expected);
        }
Exemplo n.º 17
0
        public void ValidatePassportId(string passportId, bool expected)
        {
            var passport = new Passport
            {
                PassportId = passportId
            };
            var validator = new PassportValidator();
            var actual    = validator.ValidatePassportId(passport);

            Assert.Equal(actual, expected);
        }
Exemplo n.º 18
0
 internal bool IsValid()
 {
     return(PassportValidator.SimpleValidate(this) &&
            PassportValidator.ValidateBYR(Extract("byr")) &&
            PassportValidator.ValidateIYR(Extract("iyr")) &&
            PassportValidator.ValidateEYR(Extract("eyr")) &&
            PassportValidator.ValidateHeight(Extract("hgt")) &&
            PassportValidator.ValidateHairColor(Extract("hcl")) &&
            PassportValidator.ValidatePattern(Extract("ecl"), "^(amb|blu|brn|gry|grn|hzl|oth)$") &&
            PassportValidator.ValidatePattern(Extract("pid"), @"\d{9}"));
 }
Exemplo n.º 19
0
        public void ValidateEyeColor(string color, bool expected)
        {
            var passport = new Passport
            {
                EyeColor = color
            };
            var validator = new PassportValidator();
            var actual    = validator.ValidateEyeColor(passport);

            Assert.Equal(actual, expected);
        }
        public void PassportValidator_Returns_Number_Of_Valid_Passports(bool useValidPassportData, int expectedResult)
        {
            // Arrange
            var passportData = useValidPassportData ? _validPassportData : _invalidPassportData;

            // Act
            var actualResult = PassportValidator.Validate(passportData);

            // Assert
            Assert.AreEqual(expectedResult, actualResult);
        }
Exemplo n.º 21
0
            public void Puzzle_4A()
            {
                var pv = new PassportValidator
                {
                    Input = PuzzleInputs.Puzzle4
                };

                var count = pv.CountValidPassports();

                Assert.Equal(206, count);
            }
Exemplo n.º 22
0
        public void HasValidFields(string input, int numValid)
        {
            var passportFactory = new PassportFactory();
            var passports       = PassportFactory.Create(input);

            var passportValidator = new PassportValidator();
            var actual            = passports
                                    .Where(passport => passportValidator.ValidateFields(passport))
                                    .ToList();

            Assert.Equal(numValid, actual.Count);
        }
Exemplo n.º 23
0
        public override string Level1(string[] input)
        {
            int ctr = 0;

            foreach (var entry in input)
            {
                var passport = ParsePassport(entry);

                if (PassportValidator.SimpleValidate(passport))
                {
                    ctr++;
                }
            }
            return(ctr.ToString());;
        }
Exemplo n.º 24
0
        public void Day04_PartTwoValidTest()
        {
            var input = @"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";

            Assert.AreEqual(4, PassportValidator.ValidPassportCountComplex(input));
        }
Exemplo n.º 25
0
        public void Day04_PartTwoInvalidTest()
        {
            var input = @"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";

            Assert.AreEqual(0, PassportValidator.ValidPassportCountComplex(input));
        }
Exemplo n.º 26
0
        public void Day04_PartOneTest()
        {
            var input = @"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";

            Assert.AreEqual(2, PassportValidator.ValidPassportCountSimple(input));
        }
Exemplo n.º 27
0
        public void CompletePropertiesExcludingCID()
        {
            var passport = new Passport
            {
                Properties = new KeyValuePair <string, string>[]
                {
                    new KeyValuePair <string, string>("byr", "2002"),
                    new KeyValuePair <string, string>("iyr", "2002"),
                    new KeyValuePair <string, string>("eyr", "2002"),
                    new KeyValuePair <string, string>("hgt", "2002"),
                    new KeyValuePair <string, string>("hcl", "2002"),
                    new KeyValuePair <string, string>("ecl", "2002"),
                    new KeyValuePair <string, string>("pid", "2002"),
                }
            };

            bool result = PassportValidator.SimpleValidate(passport);

            result.Should().Be(true);
        }
Exemplo n.º 28
0
        public void Part2(string filepath, int expected)
        {
            var parser    = new Parser(filepath);
            var factory   = new PassportFactory();
            var passports = parser.Parse(factory).Where(p => p != null);
            var sut       = new PassportValidator(passports, new Rule[] {
                new InRangeRule(p => p.BirthYear, 1920, 2020),
                new InRangeRule(p => p.ExperationYear, 2020, 2030),
                new ContainsRule(p => p.EyeColor, new [] { "amb", "blu", "brn", "gry", "grn", "hzl", "oth" }),
                new RegexRule(p => p.HairColor, "^#[0-9a-f]{6}$"),
                new PredicateRule(
                    p => p.Unit == Unit.Metric,
                    new InRangeRule(p => p.Height, 150, 193),
                    new InRangeRule(p => p.Height, 59, 76)
                    ),
                new InRangeRule(p => p.IssueYear, 2010, 2020),
                new RegexRule(p => p.PassportId, "^[0-9]{9}$"),
            });
            var actual = sut.Validate();

            Assert.Equal(expected, actual);
        }
Exemplo n.º 29
0
 public void Day04_PartTwo()
 {
     Assert.AreEqual(158, PassportValidator.ValidPassportCountComplex(_items));
 }
Exemplo n.º 30
0
 public void Day04_PartOne()
 {
     Assert.AreEqual(250, PassportValidator.ValidPassportCountSimple(_items));
 }