public void Crack_GivenValidXMASMessages_ReturnsExpectedResults(int preambleLength, int requiredTerms, IEnumerable <long> message, IEnumerable <long> expectedResults) { var sut = new Cracker(); var result = sut.FindUnsummableNumbers(preambleLength, requiredTerms, message); Assert.Equal(expectedResults, result); }
/// <summary> /// ChristmasCracker.Cmd entry point /// </summary> /// <param name="args">Command line arguments (not used)</param> static void Main(string[] args) { var filePath = "./input"; var reader = new FileReader(); var inputStrings = reader.ReadFileByLines(filePath); if (inputStrings.Where(input => long.TryParse(input, out var _) == false).Any()) { throw new FormatException("Input file must be only integers"); } var inputs = inputStrings.Select(input => long.Parse(input)); var preambleLength = 25; var cracker = new Cracker(); var results = cracker.FindUnsummableNumbers(preambleLength, 2, inputs); var unSummableNumber = results.First(); Console.WriteLine(unSummableNumber); var attackResults = cracker.AttackUnsummableNumber(unSummableNumber, inputs).OrderBy(s => s); var key = attackResults.First() + attackResults.Last(); Console.WriteLine(key); }
public void Crack_PreambleSameSizeAsMessage_ThrowsException() { var sut = new Cracker(); _ = Assert.Throws <ArgumentException>(() => sut.FindUnsummableNumbers(3, 2, new long[] { 1, 2, 3 })); }
public void Crack_RequiredTermsLargerThanPreamble_ThrowsException() { var sut = new Cracker(); _ = Assert.Throws <ArgumentException>(() => sut.FindUnsummableNumbers(10, 11, new long[] { })); }
public void Crack_GivenZeroRequiredTerms_ThrowsException() { var sut = new Cracker(); _ = Assert.Throws <ArgumentException>(() => sut.FindUnsummableNumbers(1, 0, new long[] { })); }