Colin McMillen
3 years ago
4 changed files with 151 additions and 101 deletions
-
582020/Day01.cs
-
622020/Day02.cs
-
242020/DayTemplate.cs
-
1082020/Program.cs
@ -0,0 +1,58 @@ |
|||
using System; |
|||
using static System.Console; |
|||
using System.Collections.Generic; |
|||
using System.IO; |
|||
using System.Linq; |
|||
using Xunit; |
|||
|
|||
namespace AdventOfCode { |
|||
|
|||
public class Day01 { |
|||
|
|||
static int Part1(List<int> numbers) { |
|||
for (var i = 0; i < numbers.Count; i++) { |
|||
for (var j = i + 1; j < numbers.Count; j++) { |
|||
if (numbers[i] + numbers[j] == 2020) { |
|||
return numbers[i] * numbers[j]; |
|||
} |
|||
} |
|||
} |
|||
throw new ArgumentException("no pair of numbers summed to 2020"); |
|||
} |
|||
|
|||
static int Part2(List<int> numbers) { |
|||
for (var i = 0; i < numbers.Count; i++) { |
|||
for (var j = i + 1; j < numbers.Count; j++) { |
|||
for (var k = j + 1; k < numbers.Count; k++) { |
|||
if (numbers[i] + numbers[j] + numbers[k] == 2020) { |
|||
return numbers[i] * numbers[j] * numbers[k]; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
throw new ArgumentException("no triple of numbers summed to 2020"); |
|||
} |
|||
|
|||
[Fact] |
|||
public static void Test() { |
|||
var emptyInput = new List<int>(); |
|||
var bogusInput = new List<int>() { |
|||
111, 222, 333, 444, 555, 666, 777, 888, 999 |
|||
}; |
|||
var exampleInput = new List<int>() { |
|||
1721, 979, 366, 299, 675, 1456 |
|||
}; |
|||
var testInput = Util.ReadInts(Util.RootDir + "day01.txt"); |
|||
|
|||
Assert.Throws<ArgumentException>(() => Part1(emptyInput)); |
|||
Assert.Throws<ArgumentException>(() => Part1(bogusInput)); |
|||
Assert.Equal(514579, Part1(exampleInput)); |
|||
Assert.Equal(355875, Part1(testInput)); |
|||
|
|||
Assert.Throws<ArgumentException>(() => Part2(emptyInput)); |
|||
Assert.Throws<ArgumentException>(() => Part2(bogusInput)); |
|||
Assert.Equal(241861950, Part2(exampleInput)); |
|||
Assert.Equal(140379120, Part2(testInput)); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,62 @@ |
|||
using System; |
|||
using static System.Console; |
|||
using System.Collections.Generic; |
|||
using System.IO; |
|||
using System.Linq; |
|||
using Xunit; |
|||
|
|||
namespace AdventOfCode { |
|||
|
|||
public class Day02 { |
|||
|
|||
static bool IsPasswordValid1(string spec) { |
|||
string[] tokens = spec.Split(' '); |
|||
string[] numbers = tokens[0].Split('-'); |
|||
int min = int.Parse(numbers[0]); |
|||
int max = int.Parse(numbers[1]); |
|||
char required = tokens[1][0]; |
|||
string password = tokens[2]; |
|||
|
|||
int count = 0; |
|||
for (int i = 0; i < password.Length; i++) { |
|||
if (password[i] == required) { |
|||
count++; |
|||
} |
|||
} |
|||
return min <= count && count <= max; |
|||
} |
|||
|
|||
static bool IsPasswordValid2(string spec) { |
|||
string[] tokens = spec.Split(' '); |
|||
string[] numbers = tokens[0].Split('-'); |
|||
int lowIndex = int.Parse(numbers[0]) - 1; |
|||
int highIndex = int.Parse(numbers[1]) - 1; |
|||
char required = tokens[1][0]; |
|||
string password = tokens[2]; |
|||
return |
|||
(password[lowIndex] == required && password[highIndex] != required) || |
|||
(password[lowIndex] != required && password[highIndex] == required); |
|||
} |
|||
|
|||
static int Part1() { |
|||
return File.ReadAllLines(Util.RootDir + "day02.txt").Count(IsPasswordValid1); |
|||
} |
|||
|
|||
static int Part2() { |
|||
return File.ReadAllLines(Util.RootDir + "day02.txt").Count(IsPasswordValid2); |
|||
} |
|||
|
|||
[Fact] |
|||
public static void Test() { |
|||
Assert.True(IsPasswordValid1("1-3 a: abcde")); |
|||
Assert.False(IsPasswordValid1("1-3 b: cdefg")); |
|||
Assert.True(IsPasswordValid1("2-9 c: ccccccccc")); |
|||
Assert.Equal(603, Part1()); |
|||
|
|||
Assert.True(IsPasswordValid2("1-3 a: abcde")); |
|||
Assert.False(IsPasswordValid2("1-3 b: cdefg")); |
|||
Assert.False(IsPasswordValid2("2-9 c: ccccccccc")); |
|||
Assert.Equal(404, Part2()); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,24 @@ |
|||
using System; |
|||
using static System.Console; |
|||
using System.Collections.Generic; |
|||
using System.IO; |
|||
using System.Linq; |
|||
using Xunit; |
|||
|
|||
namespace AdventOfCode { |
|||
|
|||
public class DayXX { |
|||
|
|||
static void Part1() { |
|||
} |
|||
|
|||
static void Part2() { |
|||
} |
|||
|
|||
[Fact(Skip = "template")] |
|||
public static void Test() { |
|||
Part1(); |
|||
Part2(); |
|||
} |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue