Files
advent-of-code/AdventOfCode C#/AOC.Tests/Y2015/Day04.cs
T

79 lines
2.1 KiB
C#

using System.Reflection;
using System.Security.Cryptography;
using System.Text;
namespace AOC.Tests.Y2015
{
[TestFixture, Parallelizable(ParallelScope.All)]
public class Day04
{
protected string GetThisClassName() { return this.GetType().Name; }
private string realData;
[SetUp]
public void Setup()
{
realData = File.ReadAllLines(Path.Combine(TestContext.CurrentContext.TestDirectory, "Y2015", "Data", $"{GetThisClassName()}.dat"))[0];
}
private int CreateMD5Hash(string input, string startingString)
{
int result = 0;
MD5 md5 = MD5.Create();
while (true)
{
byte[] inputBytes = new UTF8Encoding().GetBytes($"{input}{result}");
byte[] hashBytes = md5.ComputeHash(inputBytes);
StringBuilder sb = new StringBuilder();
foreach (var t in hashBytes)
{
sb.Append(t.ToString("X2"));
}
if (sb.ToString().StartsWith(startingString))
{
break;
}
result += 1;
}
return result;
}
[TestCase("abcdef", 609043)]
[TestCase("pqrstuv", 1048970)]
[TestCase(null, 254575)] // The actual answer
public void Part1(string? input, int? expected)
{
string lines = input != null ? input : realData;
var i = CreateMD5Hash(lines, "00000");
if (expected != null)
{
Assert.That(i, Is.EqualTo(expected.Value));
}
Console.WriteLine($"Part 1: {i}");
}
[TestCase(null, 1038736)] // The actual answer
public void Part2(string? input, int? expected)
{
string lines = input != null ? input : realData;
var i = CreateMD5Hash(lines, "000000");
if (expected != null)
{
Assert.That(i, Is.EqualTo(expected.Value));
}
Console.WriteLine($"Part 2: {i}");
}
}
}