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";