static void AssignPPField(string item, ref Day4Passport pp) { int num; switch (item.Substring(0, 3).Trim()) { case "byr": if (Int32.TryParse(item.Substring(4).Trim(), out num)) { pp.byr = num; } break; case "iyr": if (Int32.TryParse(item.Substring(4).Trim(), out num)) { pp.iyr = num; } break; case "eyr": if (Int32.TryParse(item.Substring(4).Trim(), out num)) { pp.eyr = num; } break; case "hgt": pp.hgt = item.Substring(4).Trim(); break; case "hcl": pp.hcl = item.Substring(4).Trim(); break; case "ecl": pp.ecl = item.Substring(4).Trim(); break; case "pid": pp.pid = item.Substring(4).Trim(); break; case "cid": pp.cid = item.Substring(4).Trim(); break; default: Console.WriteLine("invalid: " + item.Substring(0, 3).Trim()); break; } }
public static int DayFour() { var count = 0; var input = InputReader.ReadFile("day4.txt"); for (int i = 0; i < input.Length;) { //Get batch int batchEnd = Array.IndexOf(input, String.Empty, i + 1); var pp = new Day4Passport(); int index = i; while (index <= batchEnd || batchEnd == -1) { var row = input[index].Split(' '); foreach (var ppItem in row) { if (ppItem == String.Empty) { continue; } AssignPPField(ppItem, ref pp); } index++; if (batchEnd == -1) { break; } } i = index; var context = new ValidationContext(pp, serviceProvider: null, items: null); var results = new List <ValidationResult>(); if (Validator.TryValidateObject(pp, context, results, true)) { if (pp.Validate()) { count++; } } } return(count); }