In your DNA research lab, you have been working through various ways to compress your research data to save storage space. One teammate suggests converting the DNA data to a binary representation:
Nucleic Acid | Code |
---|---|
a space | 0000 |
A | 0001 |
C | 0010 |
G | 0100 |
T | 1000 |
You ponder this, as it will potentially halve the required data storage costs, but at the expense of human readability. You decide to write a module to encode and decode your data to benchmark your savings.
Implement encode_nucleotide/1
to accept the code point for the nucleic acid and return the integer value of the encoded code.
DNA.encode_nucleotide(?A)
# => 0b0001
Implement decode_nucleotide/1
to accept the integer value of the encoded code and return the code point for the nucleic acid.
DNA.decode_nucleotide(0b0001)
# => ?A
Implement encode/1
to accept a charlist representing nucleic acids and gaps and return a bitstring of the encoded data.
DNA.encode('AC GT')
# => <<18, 4, 8::size(4)>>
Implement decode/1
to accept a bitstring representing nucleic acids and gaps and return the decoded data as a charlist.
DNA.decode(<<132, 2, 1::size(4)>>)
# => 'TG CA'