using System; using static System.Console; using System.Collections.Generic; using System.IO; using System.Linq; using Xunit; namespace AdventOfCode { public class Day06 { static int CountAnswers1(string[] input) { int total = 0; var groupAnswers = new HashSet(); foreach (string line in input) { if (line == "") { total += groupAnswers.Count(); groupAnswers.Clear(); continue; } foreach (char c in line) { groupAnswers.Add(c); } } total += groupAnswers.Count(); return total; } static int CountAnswers2(string[] input) { int total = 0; var groupAnswers = new HashSet(); int groupSize = 0; foreach (string line in input) { if (line == "") { total += groupAnswers.Count(); groupAnswers.Clear(); groupSize = 0; continue; } groupSize++; if (groupSize == 1) { foreach (char c in line) { groupAnswers.Add(c); } } else { foreach (char c in groupAnswers) { if (!line.Contains(c)) { groupAnswers.Remove(c); } } } } total += groupAnswers.Count(); return total; } static int Part1() { string[] input = File.ReadAllLines(Util.RootDir + "day06.txt"); return CountAnswers1(input); } static int Part2() { string[] input = File.ReadAllLines(Util.RootDir + "day06.txt"); return CountAnswers2(input); } [Fact] public static void Test() { string[] example = @"abc a b c ab ac a a a a b".Split('\n'); Assert.Equal(11, CountAnswers1(example)); Assert.Equal(6, CountAnswers2(example)); Assert.Equal(6947, Part1()); Assert.Equal(3398, Part2()); } } }