using System; using System.Collections.Generic; using System.Text; namespace nucl2aamap { class Program { static string reverse(string inp) { string outp=""; for (int i = inp.Length - 1; i >= 0; i--) outp += inp[i]; return outp; } static string complement(string input) { string output=""; for (int i = 0; i < input.Length; i++) { char c=input[i]; switch (c) { case 'A': output += "T"; break; case 'T': output += "A"; break; case 'C': output += "G"; break; case 'G': output += "C"; break; } } return output; } static Dictionary nucl2aamap; static string nucl2aa(string input) { string output=""; int l = input.Length-3; for (int i = 0; i <= l; i += 3) { string codon = input.Substring(i, 3); string aa = nucl2aamap[codon]; output += aa; } return output; } static void init() { seqs = new string[12]; description = new string[12]; nucl2aamap = new Dictionary(); nucl2aamap["TTT"] = "F"; nucl2aamap["TTC"] = "F"; nucl2aamap["TTA"] = "L"; nucl2aamap["TTG"] = "L"; nucl2aamap["CTT"] = "L"; nucl2aamap["CTC"] = "L"; nucl2aamap["CTA"] = "L"; nucl2aamap["CTG"] = "L"; nucl2aamap["ATT"] = "I"; nucl2aamap["ATC"] = "I"; nucl2aamap["ATA"] = "I"; nucl2aamap["ATG"] = "M"; nucl2aamap["GTT"] = "V"; nucl2aamap["GTC"] = "V"; nucl2aamap["GTA"] = "V"; nucl2aamap["GTG"] = "V"; nucl2aamap["TCT"] = "S"; nucl2aamap["TCC"] = "S"; nucl2aamap["TCA"] = "S"; nucl2aamap["TCG"] = "S"; nucl2aamap["CCT"] = "P"; nucl2aamap["CCC"] = "P"; nucl2aamap["CCA"] = "P"; nucl2aamap["CCG"] = "P"; nucl2aamap["ACT"] = "T"; nucl2aamap["ACC"] = "T"; nucl2aamap["ACA"] = "T"; nucl2aamap["ACG"] = "T"; nucl2aamap["GCT"] = "A"; nucl2aamap["GCC"] = "A"; nucl2aamap["GCA"] = "A"; nucl2aamap["GCG"] = "A"; nucl2aamap["TAT"] = "Y"; nucl2aamap["TAC"] = "Y"; nucl2aamap["TAA"] = "_"; nucl2aamap["TAG"] = "_"; nucl2aamap["CAT"] = "H"; nucl2aamap["CAC"] = "H"; nucl2aamap["CAA"] = "Q"; nucl2aamap["CAG"] = "Q"; nucl2aamap["AAT"] = "A"; nucl2aamap["AAC"] = "A"; nucl2aamap["AAA"] = "K"; nucl2aamap["AAG"] = "K"; nucl2aamap["GAT"] = "D"; nucl2aamap["GAC"] = "D"; nucl2aamap["GAA"] = "E"; nucl2aamap["GAG"] = "E"; nucl2aamap["TGT"] = "C"; nucl2aamap["TGC"] = "C"; nucl2aamap["TGA"] = "_"; nucl2aamap["TGG"] = "W"; nucl2aamap["CGT"] = "R"; nucl2aamap["CGC"] = "R"; nucl2aamap["CGA"] = "R"; nucl2aamap["CGG"] = "R"; nucl2aamap["AGT"] = "S"; nucl2aamap["AGC"] = "S"; nucl2aamap["AGA"] = "R"; nucl2aamap["AGG"] = "R"; nucl2aamap["GGT"] = "G"; nucl2aamap["GGC"] = "G"; nucl2aamap["GGA"] = "G"; nucl2aamap["GGG"] = "G"; } static string[] description; static string[] seqs; static void add_version(string desc, int pos, string seq) { description[pos]=desc+"std"; description[pos+1]=desc+"rev"; description[pos+2]=desc+"com"; description[pos + 3] = desc + "rev,com"; seqs[pos]=seq; seqs[pos+1]=reverse(seq); seqs[pos+2]=complement(seq); seqs[pos+3]=reverse(complement(seq)); } static void Main(string[] args) { init(); string seq = "ACTGGTCATGATC"; add_version("0 ",0,seq); add_version("1 ",4,seq.Substring(1)); add_version("2 ",8,seq.Substring(2)); int lastbestpos = 0; string bestdescription = ""; for (int i = 0; i < 12; i++) { string protein = nucl2aa(seqs[i]); int stoppos = protein.IndexOf("_"); if (stoppos > lastbestpos) { bestdescription = description[i]; lastbestpos = stoppos; } else if (stoppos==lastbestpos) { bestdescription += description[i]; } Console.WriteLine(description[i] + ": " + seqs[i] + " -> " + protein); } Console.WriteLine("Best match at " + bestdescription); Console.ReadKey(); } } }