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.

58 lines
1.7 KiB

  1. using System;
  2. using static System.Console;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using Xunit;
  7. namespace AdventOfCode {
  8. public class Day01 {
  9. static int Part1(List<int> numbers) {
  10. for (var i = 0; i < numbers.Count; i++) {
  11. for (var j = i + 1; j < numbers.Count; j++) {
  12. if (numbers[i] + numbers[j] == 2020) {
  13. return numbers[i] * numbers[j];
  14. }
  15. }
  16. }
  17. throw new ArgumentException("no pair of numbers summed to 2020");
  18. }
  19. static int Part2(List<int> numbers) {
  20. for (var i = 0; i < numbers.Count; i++) {
  21. for (var j = i + 1; j < numbers.Count; j++) {
  22. for (var k = j + 1; k < numbers.Count; k++) {
  23. if (numbers[i] + numbers[j] + numbers[k] == 2020) {
  24. return numbers[i] * numbers[j] * numbers[k];
  25. }
  26. }
  27. }
  28. }
  29. throw new ArgumentException("no triple of numbers summed to 2020");
  30. }
  31. [Fact]
  32. public static void Test() {
  33. var emptyInput = new List<int>();
  34. var bogusInput = new List<int>() {
  35. 111, 222, 333, 444, 555, 666, 777, 888, 999
  36. };
  37. var exampleInput = new List<int>() {
  38. 1721, 979, 366, 299, 675, 1456
  39. };
  40. var testInput = Util.ReadInts(Util.RootDir + "day01.txt");
  41. Assert.Throws<ArgumentException>(() => Part1(emptyInput));
  42. Assert.Throws<ArgumentException>(() => Part1(bogusInput));
  43. Assert.Equal(514579, Part1(exampleInput));
  44. Assert.Equal(355875, Part1(testInput));
  45. Assert.Throws<ArgumentException>(() => Part2(emptyInput));
  46. Assert.Throws<ArgumentException>(() => Part2(bogusInput));
  47. Assert.Equal(241861950, Part2(exampleInput));
  48. Assert.Equal(140379120, Part2(testInput));
  49. }
  50. }
  51. }