33 lines
669 B
Elixir
33 lines
669 B
Elixir
|
defmodule NucleotideCount do
|
||
|
@nucleotides [?A, ?C, ?G, ?T]
|
||
|
|
||
|
@doc """
|
||
|
Counts individual nucleotides in a DNA strand.
|
||
|
|
||
|
## Examples
|
||
|
|
||
|
iex> NucleotideCount.count('AATAA', ?A)
|
||
|
4
|
||
|
|
||
|
iex> NucleotideCount.count('AATAA', ?T)
|
||
|
1
|
||
|
"""
|
||
|
@spec count([char], char) :: non_neg_integer
|
||
|
def count(strand, nucleotide) do
|
||
|
Enum.count(strand, fn n -> n == nucleotide end)
|
||
|
end
|
||
|
|
||
|
@doc """
|
||
|
Returns a summary of counts by nucleotide.
|
||
|
|
||
|
## Examples
|
||
|
|
||
|
iex> NucleotideCount.histogram('AATAA')
|
||
|
%{?A => 4, ?T => 1, ?C => 0, ?G => 0}
|
||
|
"""
|
||
|
@spec histogram([char]) :: map
|
||
|
def histogram(strand) do
|
||
|
Map.new(@nucleotides, fn n -> {n, count(strand, n)} end)
|
||
|
end
|
||
|
end
|