diff --git a/AdventOfCode2017.Tests/Day01_Tests.cs b/AdventOfCode2017.Tests/Day01_Tests.cs index 6f11cb5..dabccb4 100644 --- a/AdventOfCode2017.Tests/Day01_Tests.cs +++ b/AdventOfCode2017.Tests/Day01_Tests.cs @@ -1,16 +1,12 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; -using AdventOfCode2017; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace AdventOfCode2017.Tests { [TestClass()] public class Day01_Tests { + #region ResolvePart1 + [TestMethod()] public void ResolvePart1__Test1() { @@ -50,5 +46,61 @@ namespace AdventOfCode2017.Tests Assert.AreEqual("9", result); } + + #endregion ResolvePart1 + + #region ResolvePart2 + + [TestMethod()] + public void ResolvePart2__Test1() + { + Day01 day01 = new Day01(); + + string result = day01.ResolvePart2(new string[] { "1212", }); + + Assert.AreEqual("6", result); + } + + [TestMethod()] + public void ResolvePart2__Test2() + { + Day01 day01 = new Day01(); + + string result = day01.ResolvePart2(new string[] { "1221", }); + + Assert.AreEqual("0", result); + } + + [TestMethod()] + public void ResolvePart2__Test3() + { + Day01 day01 = new Day01(); + + string result = day01.ResolvePart2(new string[] { "123425", }); + + Assert.AreEqual("4", result); + } + + [TestMethod()] + public void ResolvePart2__Test4() + { + Day01 day01 = new Day01(); + + string result = day01.ResolvePart2(new string[] { "123123", }); + + Assert.AreEqual("12", result); + } + + [TestMethod()] + public void ResolvePart2__Test5() + { + Day01 day01 = new Day01(); + + string result = day01.ResolvePart2(new string[] { "12131415", }); + + Assert.AreEqual("4", result); + } + + #endregion ResolvePart2 } } \ No newline at end of file diff --git a/AdventOfCode2017/Day01.cs b/AdventOfCode2017/Day01.cs index f50e58b..3adaa56 100644 --- a/AdventOfCode2017/Day01.cs +++ b/AdventOfCode2017/Day01.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace AdventOfCode2017 +namespace AdventOfCode2017 { /* * @@ -31,6 +25,22 @@ namespace AdventOfCode2017 What is the solution to your captcha? + --- Part Two --- + + You notice a progress bar that jumps to 50% completion. Apparently, the door isn't yet satisfied, but it did emit a star as encouragement. The instructions change: + + Now, instead of considering the next digit, it wants you to consider the digit halfway around the circular list. That is, if your list contains 10 items, only include a digit in your sum if the digit 10/2 = 5 steps forward matches it. Fortunately, your list has an even number of elements. + + For example: + + 1212 produces 6: the list contains 4 items, and all four digits match the digit 2 items ahead. + 1221 produces 0, because every comparison is between a 1 and a 2. + 123425 produces 4, because both 2s match each other, but no other digit has a match. + 123123 produces 12. + 12131415 produces 4. + + What is the solution to your new captcha? + */ public class Day01 : IDay @@ -52,7 +62,19 @@ namespace AdventOfCode2017 public string ResolvePart2(string[] inputs) { - return null; + string input = inputs[0]; + int value = 0; + int inputLength = input.Length; + int inputHalfLength = inputLength / 2; + for (int i = 0; i < inputLength; i++) + { + int nextI = (i + inputHalfLength) % inputLength; + if (input[i] == input[nextI]) + { + value += (input[i] - '0'); + } + } + return value.ToString(); } } }