public static int Run(string input) { var sum = 0; //input = _input; var groups = InputUtils.SplitInputByBlankLines(input); foreach (var group in groups) { var matchedChars = new List <char>(); var lines = InputUtils.SplitLinesIntoStringArray(group); for (int j = 0; j < lines.Length; j++) { var line = lines[j]; if (j == 0) { matchedChars = lines[0].ToCharArray().ToList(); continue; } var stillMatchedChars = new List <char>(matchedChars); for (int i = 0; i < matchedChars.Count; i++) { var matchedChar = matchedChars[i]; if (matchedChar >= 'a' && matchedChar <= 'z' && !line.Contains(matchedChar)) { stillMatchedChars.Remove(matchedChar); } } matchedChars = stillMatchedChars; } sum += matchedChars.Count; } return(sum); }
public static int Run(string input) { var valid = 0; var passports = InputUtils.SplitInputByBlankLines(input); foreach (var passport in passports) { var passportDict = new Dictionary <string, string>(); var tokens = passport.Split(new char[] { '\r', '\n', ':', ' ' }); var validTokens = tokens.Where(x => x.Length > 0).ToList(); for (int i = 0; i < validTokens.Count(); i += 2) { passportDict.Add(validTokens[i], validTokens[i + 1]); } if (passportDict.ContainsKey("ecl") && passportDict.ContainsKey("pid") && passportDict.ContainsKey("eyr") && passportDict.ContainsKey("hcl") && passportDict.ContainsKey("byr") && passportDict.ContainsKey("iyr") && passportDict.ContainsKey("hgt")) { if (ValidateFields(passportDict)) { valid++; } } } return(valid); }