Sha256: ff0ecad3e7710b632a8d80dfc3151925018a34d248af4495683d0a86b19062d9

Contents?: true

Size: 880 Bytes

Versions: 193

Compression:

Stored size: 880 Bytes

Contents

module hamming;


import std.string;
import std.algorithm.comparison : mismatch;

int distance (string lhs, string rhs)
{
    if (lhs.length != rhs.length)
    {
	throw new Exception(format("DNA sequence with different lengths: %s - %s", lhs.length, rhs.length));
    }

    int count = 0;
    auto m = mismatch(lhs, rhs);

    while (!m[0].empty)
    {
	++count;
	m = mismatch(m[0][1 .. $], m[1][1 .. $]);
    }

    return count;
}

unittest
{
    import std.exception : assertThrown;

    assert(distance("A", "A") == 0);
    assert(distance("A", "G") == 1);
    assert(distance("AG", "CT") == 2);
    assert(distance("AT", "CT") == 1);
    assert(distance("GGACG", "GGTCG") == 1);
    assertThrown(distance("AAAG", "AAA"));
    assertThrown(distance("AAA", "AAAG"));
    assert(distance("GATACA", "GCATAA") == 4);
    assert(distance("GGACGGATTCTG", "AGGACGGATTCT") == 9);
}

Version data entries

193 entries across 193 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/d/exercises/hamming/example/hamming.d
trackler-2.2.1.179 tracks/d/exercises/hamming/example/hamming.d
trackler-2.2.1.178 tracks/d/exercises/hamming/example/hamming.d
trackler-2.2.1.177 tracks/d/exercises/hamming/example/hamming.d
trackler-2.2.1.176 tracks/d/exercises/hamming/example/hamming.d
trackler-2.2.1.175 tracks/d/exercises/hamming/example/hamming.d
trackler-2.2.1.174 tracks/d/exercises/hamming/example/hamming.d
trackler-2.2.1.173 tracks/d/exercises/hamming/example/hamming.d
trackler-2.2.1.172 tracks/d/exercises/hamming/example/hamming.d
trackler-2.2.1.171 tracks/d/exercises/hamming/example/hamming.d
trackler-2.2.1.170 tracks/d/exercises/hamming/example/hamming.d
trackler-2.2.1.169 tracks/d/exercises/hamming/example/hamming.d
trackler-2.2.1.167 tracks/d/exercises/hamming/example/hamming.d
trackler-2.2.1.166 tracks/d/exercises/hamming/example/hamming.d
trackler-2.2.1.165 tracks/d/exercises/hamming/example/hamming.d
trackler-2.2.1.164 tracks/d/exercises/hamming/example/hamming.d
trackler-2.2.1.163 tracks/d/exercises/hamming/example/hamming.d
trackler-2.2.1.162 tracks/d/exercises/hamming/example/hamming.d
trackler-2.2.1.161 tracks/d/exercises/hamming/example/hamming.d
trackler-2.2.1.160 tracks/d/exercises/hamming/example/hamming.d