91 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # 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.
 | |
| 
 | |
| ## Setup
 | |
| 
 | |
| Check out [Exercism Help](http://exercism.io/languages/lisp) for instructions to
 | |
| get started writing Common Lisp. That page will explain how to install and setup
 | |
| a Lisp implementation and how to run the tests.
 | |
| 
 | |
| ## Formatting
 | |
| 
 | |
| While Common Lisp doesn't care about indentation and layout of code,
 | |
| nor whether you use spaces or tabs, this is an important consideration
 | |
| for submissions to exercism.io. Excercism.io's code widget cannot
 | |
| handle mixing of tab and space characters well so using only spaces is recommended to make
 | |
| the code more readable to the human reviewers. Please review your
 | |
| editors settings on how to accomplish this. Below are instructions for
 | |
| popular editors for Common Lisp.
 | |
| 
 | |
| ### VIM
 | |
| 
 | |
| Use the following commands to ensure VIM uses only spaces for
 | |
| indentation:
 | |
| 
 | |
| ```vimscript
 | |
| :set tabstop=2
 | |
| :set shiftwidth=2
 | |
| :set expandtab
 | |
| ```
 | |
| 
 | |
| (or as a oneliner `:set tabstop=2 shiftwidth=2 expandtab`). This can
 | |
| be added to your `~/.vimrc` file to use it all the time.
 | |
| 
 | |
| ### Emacs
 | |
| 
 | |
| Emacs is very well suited for editing Common Lisp and has many
 | |
| powerful add-on packages available. The only thing that one needs to
 | |
| do with a stock emacs to make it work well with exercism.io is to
 | |
| evaluate the following code:
 | |
| 
 | |
| `(setq indent-tab-mode nil)`
 | |
| 
 | |
| This can be placed in your `~/.emacs` (or `~/.emacs.d/init.el`) in
 | |
| order to have it set whenever Emacs is launched.
 | |
| 
 | |
| One suggested add-on for Emacs and Common Lisp is
 | |
| [SLIME](https://github.com/slime/slime) which offers tight integration
 | |
| with the REPL; making iterative coding and testing very easy.
 | |
| 
 | |
| ## Source
 | |
| 
 | |
| The Calculating Point Mutations problem at Rosalind [http://rosalind.info/problems/hamm/](http://rosalind.info/problems/hamm/)
 | |
| 
 | |
| ## Submitting Incomplete Problems
 | |
| It's possible to submit an incomplete solution so you can see how others have completed the exercise.
 | |
| 
 |