Sha256: 2b275ac35d005733b072326698dbf8026371da01d352f310c10b410b4782b723

Contents?: true

Size: 879 Bytes

Versions: 183

Compression:

Stored size: 879 Bytes

Contents

module hamming;


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

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
{
    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);
}

void main ()
{
}

Version data entries

183 entries across 183 versions & 1 rubygems

Version Path
trackler-2.1.0.27 tracks/dlang/exercises/hamming/hamming_example.d
trackler-2.1.0.26 tracks/dlang/exercises/hamming/hamming_example.d
trackler-2.1.0.25 tracks/dlang/exercises/hamming/hamming_example.d
trackler-2.1.0.24 tracks/dlang/exercises/hamming/hamming_example.d
trackler-2.1.0.23 tracks/dlang/exercises/hamming/hamming_example.d
trackler-2.1.0.22 tracks/dlang/exercises/hamming/hamming_example.d
trackler-2.1.0.21 tracks/dlang/exercises/hamming/hamming_example.d
trackler-2.1.0.20 tracks/dlang/exercises/hamming/hamming_example.d
trackler-2.1.0.19 tracks/dlang/exercises/hamming/hamming_example.d
trackler-2.1.0.18 tracks/dlang/exercises/hamming/hamming_example.d
trackler-2.1.0.17 tracks/dlang/exercises/hamming/hamming_example.d
trackler-2.1.0.16 tracks/dlang/exercises/hamming/hamming_example.d
trackler-2.1.0.15 tracks/dlang/exercises/hamming/hamming_example.d
trackler-2.1.0.14 tracks/dlang/exercises/hamming/hamming_example.d
trackler-2.1.0.13 tracks/dlang/exercises/hamming/hamming_example.d
trackler-2.1.0.12 tracks/dlang/exercises/hamming/hamming_example.d
trackler-2.1.0.11 tracks/dlang/exercises/hamming/hamming_example.d
trackler-2.1.0.10 tracks/dlang/exercises/hamming/hamming_example.d
trackler-2.1.0.9 tracks/dlang/exercises/hamming/hamming_example.d
trackler-2.1.0.8 tracks/dlang/exercises/hamming/hamming_example.d