public Passport(Passport p) // copy constructor { this.data = p.data; }
static void Main(string[] args) { List <Passport> passports = new List <Passport>(); string[] lines = System.IO.File.ReadAllLines(@"C:\CodeBase\VS19\AdventOfCode2020\Day04\data.txt"); // ***** change this to the location of data.txt ***** Passport p = new Passport(); // empty passport to fill foreach (var line in lines) { if (line == string.Empty) // store filled passport and create new empty passport { passports.Add(new Passport(p)); p = new Passport(); continue; } string[] components = line.Split(' '); // split line into components foreach (var component in components) { string[] fields = component.Split(':'); // split component into key:value pair switch (fields[0]) { case "byr": p.data.byr = fields[1]; break; case "iyr": p.data.iyr = fields[1]; break; case "eyr": p.data.eyr = fields[1]; break; case "hgt": p.data.hgt = fields[1]; break; case "hcl": p.data.hcl = fields[1]; break; case "ecl": p.data.ecl = fields[1]; break; case "pid": p.data.pid = fields[1]; break; case "cid": p.data.cid = fields[1]; break; } } } passports.Add(new Passport(p)); // add last passport Console.WriteLine($"Total passports: {passports.Count()}"); int validpassportspart1 = 0; int validpassportspart2 = 0; foreach (Passport passport in passports) { //Console.WriteLine($"{passport}"); if (passport.isValid()) { validpassportspart1++; } if (passport.isValid2()) { validpassportspart2++; } } Console.WriteLine(); Console.WriteLine($"Part1 : Valid passports: {validpassportspart1}"); Console.WriteLine($"Part2 : Valid passports: {validpassportspart2}"); }
static async Task Main(string[] args) { // Part One var inputLines = new List <string>(); using var reader = new System.IO.StreamReader("Input.txt"); while (reader.Peek() > -1) { var lineItem = await reader.ReadLineAsync(); inputLines.Add(lineItem); } // Build passports var passports = new List <Passport>(); var passport = new Passport(); foreach (var line in inputLines) { if (string.IsNullOrWhiteSpace(line)) { passports.Add(passport); passport = new Passport(); continue; } var fields = line.Split(" ").ToList(); foreach (var field in fields) { var parts = field.Split(":"); switch (parts[0]) { case PassportFields.BirthYear: passport.BirthYear = parts[1]; break; case PassportFields.IssueYear: passport.IssueYear = parts[1]; break; case PassportFields.ExpirationYear: passport.ExpirationYear = parts[1]; break; case PassportFields.Height: passport.Height = parts[1]; break; case PassportFields.HairColor: passport.HairColor = parts[1]; break; case PassportFields.EyeColor: passport.EyeColor = parts[1]; break; case PassportFields.PassportId: passport.PassportId = parts[1]; break; case PassportFields.CountryId: passport.CountryId = parts[1]; break; } } } passports.Add(passport); var validPassports = passports.Where(p => p.IsValid_Part1()).Count(); Console.WriteLine($"Valid passports: {validPassports}"); // Part 2 validPassports = passports.Where(p => p.IsValid_Part1() && p.IsValid_Part2()).Count(); Console.WriteLine($"Valid passports: {validPassports}"); }
static void Main(string[] args) { var passports = new List <Passport>(); const string fileName = @"../../../input.txt"; var input = File.ReadAllText(fileName); var inputs = input.Split("\n\n"); for (var i = 0; i < inputs.Length; i++) { inputs[i] = inputs[i].Replace('\n', ' '); var tempSplit = inputs[i].Split(" "); var temp = new Dictionary <string, string>(); var passport = new Passport(); foreach (var ts in tempSplit) { var tempPair = new KeyValuePair <string, string>(Helper.GetKey(ts), Helper.GetValue(ts)); switch (tempPair.Key) { case "ecl": passport.EyeColor = tempPair.Value; break; case "pid": passport.PassportId = tempPair.Value; break; case "eyr": passport.ExpirationYear = tempPair.Value; break; case "hcl": passport.HairColor = tempPair.Value; break; case "byr": passport.BirthYear = tempPair.Value; break; case "iyr": passport.IssueYear = tempPair.Value; break; case "cid": passport.CountryId = tempPair.Value; break; case "hgt": passport.Height = tempPair.Value; break; } } passports.Add(passport); } var validPassportsPartOne = passports.Count(x => x.IsValid()); var validPassportsPartTwo = passports.Count(x => x.IsPartTwoValid()); Console.WriteLine($"Part 1 - Number of valid passports: {validPassportsPartOne}"); Console.WriteLine($"Part 2 - Number of valid passports: {validPassportsPartTwo}"); }
static List <Passport> ParseLinesInPassports(string[] lines) { List <Passport> passports = new List <Passport>(); Passport currentPassport = new Passport(); for (int index = 0; index < lines.Length; index++) { string line = lines[index]; if (line == string.Empty) { passports.Add(currentPassport); currentPassport = new Passport(); } List <string> passwordParams = line.Split(' ').ToList(); foreach (string param in passwordParams) { List <string> parameterDetails = param.Split(':').ToList(); switch (parameterDetails[0]) { case "byr": currentPassport.BirthYear = parameterDetails[1]; break; case "iyr": currentPassport.IssueYear = parameterDetails[1]; break; case "eyr": currentPassport.ExpirationYear = parameterDetails[1]; break; case "hgt": currentPassport.Height = parameterDetails[1]; break; case "hcl": currentPassport.HairColor = parameterDetails[1]; break; case "ecl": currentPassport.EyeColor = parameterDetails[1]; break; case "pid": currentPassport.PassportId = parameterDetails[1]; break; case "cid": currentPassport.CountryId = parameterDetails[1]; break; } } if (index == lines.Length - 1) { passports.Add(currentPassport); } } return(passports); }