This commit is contained in:
parent
f42732013a
commit
983639f8ce
|
@ -0,0 +1,65 @@
|
|||
# Hamming
|
||||
|
||||
Calculate the Hamming difference between two DNA strands.
|
||||
|
||||
A mutation is simply a mistake that occurs during the creation or
|
||||
copying of a nucleic acid, in particular DNA. Because nucleic acids are
|
||||
vital to cellular functions, mutations tend to cause a ripple effect
|
||||
throughout the cell. Although mutations are technically mistakes, a very
|
||||
rare mutation may equip the cell with a beneficial attribute. In fact,
|
||||
the macro effects of evolution are attributable by the accumulated
|
||||
result of beneficial microscopic mutations over many generations.
|
||||
|
||||
The simplest and most common type of nucleic acid mutation is a point
|
||||
mutation, which replaces one base with another at a single nucleotide.
|
||||
|
||||
By counting the number of differences between two homologous DNA strands
|
||||
taken from different genomes with a common ancestor, we get a measure of
|
||||
the minimum number of point mutations that could have occurred on the
|
||||
evolutionary path between the two strands.
|
||||
|
||||
This is called the 'Hamming distance'.
|
||||
|
||||
It is found by comparing two DNA strands and counting how many of the
|
||||
nucleotides are different from their equivalent in the other string.
|
||||
|
||||
GAGCCTACTAACGGGAT
|
||||
CATCGTAATGACGGCCT
|
||||
^ ^ ^ ^ ^ ^^
|
||||
|
||||
The Hamming distance between these two DNA strands is 7.
|
||||
|
||||
# Implementation notes
|
||||
|
||||
The Hamming distance is only defined for sequences of equal length. This means
|
||||
that based on the definition, each language could deal with getting sequences
|
||||
of equal length differently.
|
||||
|
||||
## Setup
|
||||
|
||||
Follow the setup instructions for Crystal here:
|
||||
|
||||
http://exercism.io/languages/crystal
|
||||
|
||||
More help installing can be found here:
|
||||
|
||||
http://crystal-lang.org/docs/installation/index.html
|
||||
|
||||
## Making the Test Suit Pass
|
||||
|
||||
Execute the tests with:
|
||||
|
||||
```bash
|
||||
$ crystal spec
|
||||
```
|
||||
|
||||
In each test suite all but the first test have been skipped.
|
||||
|
||||
Once you get a test passing, you can unskip the next one by changing `pending` to `it`.
|
||||
|
||||
## Source
|
||||
|
||||
The Calculating Point Mutations problem at Rosalind [http://rosalind.info/problems/hamm/](http://rosalind.info/problems/hamm/)
|
||||
|
||||
## Submitting Incomplete Solutions
|
||||
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
@ -0,0 +1,30 @@
|
|||
require "spec"
|
||||
require "../src/*"
|
||||
|
||||
describe "Hamming" do
|
||||
describe "#compute" do
|
||||
it "computes no difference for identical single nucleotide strands" do
|
||||
Hamming.compute("A", "A").should eq 0
|
||||
end
|
||||
|
||||
pending "computes a distance for single nucleotide strands" do
|
||||
Hamming.compute("A", "G").should eq 1
|
||||
end
|
||||
|
||||
pending "computes a distance for small strands" do
|
||||
Hamming.compute("AG", "CT").should eq 2
|
||||
end
|
||||
|
||||
pending "computes a distance for medium strands" do
|
||||
Hamming.compute("GGACG", "GGTCG").should eq 1
|
||||
end
|
||||
|
||||
pending "computes a distance for large strands" do
|
||||
Hamming.compute("GGACGGATTCTG", "AGGACGGATTCT").should eq 9
|
||||
end
|
||||
|
||||
pending "raises an exception when strands aren't of equal length" do
|
||||
expect_raises(ArgumentError) { Hamming.compute("GCC", "A") }
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,7 @@
|
|||
module Hamming
|
||||
def self.compute(a, b)
|
||||
raise ArgumentError unless a.size == b.size
|
||||
(0..a.size).count {|i| a[i] != b[i]}
|
||||
end
|
||||
end
|
||||
|
|
@ -1,2 +1,7 @@
|
|||
# Please implement your solution to hello-world in this file
|
||||
puts "Hello, World!"
|
||||
class HelloWorld
|
||||
def self.hello
|
||||
"Hello, World!"
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue