
Avatar of remcopeereboom

remcopeereboom's solution

to Hamming in the JavaScript Track

Published at Jul 13 2018 · 3 comments
Test suite


This solution was written on an old version of Exercism. The tests below might not correspond to the solution code, and the exercise may have changed since this code was written.

Calculate the Hamming difference between two DNA strands.




This is called the 'Hamming distance'.


^ ^ ^  ^ ^    ^^

The Hamming distance between these two DNA strands is 7.

Implementation notes





Running the test suite


npm install -g jasmine

Run the test suite from the exercise directory with:

jasmine hamming.spec.js




Submitting Incomplete Solutions



var Hamming = require('./hamming');

describe('Hamming', function () {
  var hamming = new Hamming();

  it('no difference between identical strands', function () {
    expect(hamming.compute('A', 'A')).toEqual(0);

  xit('complete hamming distance for single nucleotide strand', function () {
    expect(hamming.compute('A', 'G')).toEqual(1);

  xit('complete hamming distance for small strand', function () {
    expect(hamming.compute('AG', 'CT')).toEqual(2);

  xit('small hamming distance', function () {
    expect(hamming.compute('AT', 'CT')).toEqual(1);

  xit('small hamming distance in longer strand', function () {
    expect(hamming.compute('GGACG', 'GGTCG')).toEqual(1);

  xit('large hamming distance', function () {
    expect(hamming.compute('GATACA', 'GCATAA')).toEqual(4);

  xit('hamming distance in very long strand', function () {
    expect(hamming.compute('GGACGGATTCTG', 'AGGACGGATTCT')).toEqual(9);

  xit('throws error when strands are not equal length', function () {
    expect(function () { hamming.compute('GGACGGATTCTG', 'AGGAC'); }).toThrow(
      new Error('DNA strands must be of equal length.')
var Hamming = function() {};
Hamming.prototype.compute = function(seq_a, seq_b) {
    if (seq_a.length != seq_b.length) {
        throw new Error('DNA strands must be of equal length.');

    var distance = 0;
    for (i = 0; i < seq_a.length; i++) {
        if (seq_a[i] !== seq_b[i]) distance += 1;
    return distance;

module.exports = Hamming;

Community comments

Avatar of remcopeereboom

Should have used ++ on line 9. I've been doing too much ruby today.

Avatar of dane-king

Douglas Crockford, in JavaScript the Good Parts actually prefers the x+=1 over x++

Avatar of remcopeereboom

Did not know that. Thanks.

What can you learn from this solution?



  • What compromises have been made?