93 lines
1.8 KiB
C#
93 lines
1.8 KiB
C#
|
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<char>();
|
||
|
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<char>();
|
||
|
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());
|
||
|
}
|
||
|
}
|
||
|
}
|