You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
using System; using static System.Console; using System.Collections.Generic; using System.IO; using System.Linq; using Xunit;
namespace AdventOfCode {
public class Program {
static string RootDir = Environment.GetEnvironmentVariable("HOME") + "/src/adventofcode/2020/";
static List<int> ReadInts(string filename) { string[] lines = File.ReadAllLines(filename); return lines.Select(int.Parse).ToList(); }
static int Day1Part1(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 Day1Part2(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] static void Day1Test() { 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 = ReadInts(RootDir + "day1.txt");
Assert.Throws<ArgumentException>(() => Day1Part1(emptyInput)); Assert.Throws<ArgumentException>(() => Day1Part1(bogusInput)); Assert.Equal(514579, Day1Part1(exampleInput)); Assert.Equal(355875, Day1Part1(testInput));
Assert.Throws<ArgumentException>(() => Day1Part2(emptyInput)); Assert.Throws<ArgumentException>(() => Day1Part2(bogusInput)); Assert.Equal(241861950, Day1Part2(exampleInput)); Assert.Equal(140379120, Day1Part2(testInput)); }
static void Main(string[] args) { Day1Test(); } } }
|