public void GetHammingDistance_GivenTestStrings_ReturnsExpected() { // Arrange const string STRING1 = "this is a test"; const string STRING2 = "wokka wokka!!!"; // Act var result = _calc.GetHammingDistance(STRING1, STRING2); // Assert result.Should().Be(37); }
private int GetNormalisedDistance(byte[] data, int keysize) { // TODO: //You could proceed perhaps with the smallest 2-3 KEYSIZE values. //Or take 4 KEYSIZE blocks instead of 2 and average the distances. //For each KEYSIZE, take the first KEYSIZE worth of bytes, // and the second KEYSIZE worth of bytes List <byte[]> chunks = GetChunks(data, keysize).Take(4).ToList(); // and find the edit distance between them. var editDistance1 = _hammingDistance.GetHammingDistance(chunks[0], chunks[1]); var editDistance2 = _hammingDistance.GetHammingDistance(chunks[0], chunks[2]); var editDistance3 = _hammingDistance.GetHammingDistance(chunks[0], chunks[3]); var editDistance4 = _hammingDistance.GetHammingDistance(chunks[1], chunks[0]); var editDistance5 = _hammingDistance.GetHammingDistance(chunks[1], chunks[2]); var editDistance6 = _hammingDistance.GetHammingDistance(chunks[1], chunks[3]); var editDistance7 = _hammingDistance.GetHammingDistance(chunks[2], chunks[0]); var editDistance8 = _hammingDistance.GetHammingDistance(chunks[2], chunks[1]); var editDistance9 = _hammingDistance.GetHammingDistance(chunks[2], chunks[3]); var editDistance10 = _hammingDistance.GetHammingDistance(chunks[3], chunks[0]); var editDistance11 = _hammingDistance.GetHammingDistance(chunks[3], chunks[1]); var editDistance12 = _hammingDistance.GetHammingDistance(chunks[3], chunks[2]); var sum = editDistance1 + editDistance2 + editDistance3 + editDistance4 + editDistance5 + editDistance6 + editDistance7 + editDistance8 + editDistance9 + editDistance10 + editDistance11 + editDistance12; return((sum / 12) / keysize); // Normalize this result by dividing by KEYSIZE. //return (editDistance1 / keysize); }