Initial Commit
This commit is contained in:
54
php/hamming/README.md
Normal file
54
php/hamming/README.md
Normal file
@@ -0,0 +1,54 @@
|
||||
# Hamming
|
||||
|
||||
Write a program that can 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.
|
||||
|
||||
## Making the Test Suite Pass
|
||||
|
||||
1. Get [PHPUnit].
|
||||
|
||||
% wget --no-check-certificate https://phar.phpunit.de/phpunit.phar
|
||||
% chmod +x phpunit.phar
|
||||
|
||||
2. Execute the tests for an assignment.
|
||||
|
||||
% phpunit.phar wordy/wordy_test.php
|
||||
|
||||
[PHPUnit]: http://phpunit.de
|
||||
|
||||
|
||||
## Source
|
||||
|
||||
The Calculating Point Mutations problem at Rosalind [view source](http://rosalind.info/problems/hamm/)
|
13
php/hamming/hamming.php
Normal file
13
php/hamming/hamming.php
Normal file
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
//
|
||||
// This is only a SKELETON file for the "Hamming" exercise. It's been provided as a
|
||||
// convenience to get you started writing code faster.
|
||||
//
|
||||
|
||||
function distance($a, $b)
|
||||
{
|
||||
//
|
||||
// YOUR CODE GOES HERE
|
||||
//
|
||||
}
|
55
php/hamming/hamming_test.php
Normal file
55
php/hamming/hamming_test.php
Normal file
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
require "hamming.php";
|
||||
|
||||
class HammingComparatorTest extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
|
||||
public function testNoDifferenceBetweenIdenticalStrands()
|
||||
{
|
||||
$this->assertEquals(0, distance('A', 'A'));
|
||||
}
|
||||
|
||||
public function testCompleteHammingDistanceOfForSingleNucleotideStrand()
|
||||
{
|
||||
$this->markTestSkipped();
|
||||
$this->assertEquals(1, distance('A', 'G'));
|
||||
}
|
||||
|
||||
public function testCompleteHammingDistanceForSmallStrand()
|
||||
{
|
||||
$this->markTestSkipped();
|
||||
$this->assertEquals(2, distance('AG', 'CT'));
|
||||
}
|
||||
|
||||
public function testSmallHammingDistance()
|
||||
{
|
||||
$this->markTestSkipped();
|
||||
$this->assertEquals(1, distance('AT', 'CT'));
|
||||
}
|
||||
|
||||
public function testSmallHammingDistanceInLongerStrand()
|
||||
{
|
||||
$this->markTestSkipped();
|
||||
$this->assertEquals(1, distance('GGACG', 'GGTCG'));
|
||||
}
|
||||
|
||||
public function testLargeHammingDistance()
|
||||
{
|
||||
$this->markTestSkipped();
|
||||
$this->assertEquals(4, distance('GATACA', 'GCATAA'));
|
||||
}
|
||||
|
||||
public function testHammingDistanceInVeryLongStrand()
|
||||
{
|
||||
$this->markTestSkipped();
|
||||
$this->assertEquals(9, distance('GGACGGATTCTG', 'AGGACGGATTCT'));
|
||||
}
|
||||
|
||||
public function testExceptionThrownWhenStrandsAreDifferentLength()
|
||||
{
|
||||
$this->markTestSkipped();
|
||||
$this->setExpectedException('InvalidArgumentException', 'DNA strands must be of equal length.');
|
||||
distance('GGACG', 'AGGACGTGG');
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user