Critique my first arguably useful clojurescript app

Yeah, I do need to document it. :-)

The problem is on of finding the best "alignment" between two sequences of letters (like amino acids in proteins or the A,C,G, and T of DNA). Aligning sequences is kind of the fundamental problem of bioinformatics, since it tells you about whether and how they might be related by evolution. The optimal alignments can be found by a dynamic programming algorithm. Every student of bioinformatics learns the two main algorithms: Needleman-Wunsch for global (end to end) alignment, and Smith-Waterman for local (best subsequence) alignment. The algorithms build up partial scores of a matrix (shown on the right) representing optimal partial alignments. The score of any cell is calculated by the best "move" from a cell that precedes it, which can be directly above, immediately to the left, or diagonally above to the left. The score of a give "match" is pulled from a scoring matrix. Identical matches (e.g., "R" on the top and bottom) are the best. The score for a gap (e.g, "R" on the top and "-" on the bottom) are given by a gap penalty. The combination of a scoring matrix and gap penalty is sufficient to determine an optimal alignment.

So the code calculates the optimal alignments, allows a user to change the scoring system, choose between local or global alignment, and change the sequences, while showing a picture of the internals of the algorithm in the diagram on the right.

/r/Clojure Thread Parent Link - gtuckerkellogg.github.io