Oh, and here's a perl script I wrote which automates the codon/shift decryption. Command line only I'm afraid -- it takes the DNA sequence as the first argument, and the shifts as the second.
Code: Select all
#! /usr/bin/perl
$codons = shift();
$shifts = shift();
print "codons: $codons\n";
print "shifts: $shifts\n";
%names = (
"TTT", "PHENYLALANINE",
"TTC", "PHENYLALANINE",
"TTA", "LEUCINE",
"TTG", "LEUCINE",
"TCT", "SERINE",
"TCC", "SERINE",
"TCA", "SERINE",
"TCG", "SERINE",
"TAT", "TYROSINE",
"TAC", "TYROSINE",
"TAA", "OCHRE",
"TAG", "AMBER",
"TGT", "CYSTEINE",
"TGC", "CYSTEINE",
"TGA", "OPAL",
"TGG", "TRYPTOPHAN",
"CTT", "LEUCINE",
"CTC", "LEUCINE",
"CTA", "LEUCINE",
"CTG", "LEUCINE",
"CCT", "PROLINE",
"CCC", "PROLINE",
"CCA", "PROLINE",
"CCG", "PROLINE",
"CAT", "HISTIDINE",
"CAC", "HISTIDINE",
"CAA", "GLUTAMINE",
"CAG", "GLUTAMINE",
"CGT", "ARGININE",
"CGC", "ARGININE",
"CGA", "ARGININE",
"CGG", "ARGININE",
"ATT", "ISOLEUCINE",
"ATC", "ISOLEUCINE",
"ATA", "ISOLEUCINE",
"ATG", "METHIONINE",
"ACT", "THREONINE",
"ACC", "THREONINE",
"ACA", "THREONINE",
"ACG", "THREONINE",
"AAT", "ASPARAGINE",
"AAC", "ASPARAGINE",
"AAA", "LYSINE",
"AAG", "LYSINE",
"AGT", "SERINE",
"AGC", "SERINE",
"AGA", "ARGININE",
"AGG", "ARGININE",
"GTT", "VALINE",
"GTC", "VALINE",
"GTA", "VALINE",
"GTG", "VALINE",
"GCT", "ALANINE",
"GCC", "ALANINE",
"GCA", "ALANINE",
"GCG", "ALANINE",
"GAT", "ASPARTICACID",
"GAC", "ASPARTICACID",
"GAA", "GLUTAMICACID",
"GAG", "GLUTAMICACID",
"GGT", "GLYCINE",
"GGC", "GLYCINE",
"GGA", "GLYCINE",
"GGG", "GLYCINE"
);
$output = "";
while($codons =~ s/\s*(\S\S\S)\s*//) {
$codon = $1;
die "No such codon." unless $name = $names{$codon};
die "No such shift" unless $shifts =~ s/\s*(\d+)\((\+?-?\d+)\)\s*//;
$len = length($name);
$index = $1;
$offset = $2;
$char = substr($name,($index - 1) % $len,1);
$result = chr(((ord($char) - ord("A") + $offset) % 26) + ord("A"));
print "codon: $codon\n";
print "name: $name\n";
print "offset: $offset\n";
print "index: $index\n";
print "len: $len\n";
print "char: $char\n";
print "result: $result\n";
$output .= $result;
}
print "output: $output\n";