Filage

c# 1 new

Oct 2nd, 2024
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.75 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel.DataAnnotations;
  4. using System.IO;
  5. using System.Numerics;
  6. using System.Security.Cryptography;
  7. using System.Text;
  8.  
  9. namespace GeneticsProject
  10. {
  11.     public struct GeneticData
  12.     {
  13.         public string name;
  14.         public string organism;
  15.         public string formula;
  16.     }
  17.  
  18.     class Program
  19.     {
  20.         static List<GeneticData> data = new List<GeneticData>();
  21.         static int count = 1;
  22.        
  23.  
  24.         static string GetFormula(string proteinName)
  25.         {
  26.             foreach (GeneticData item in data)
  27.             {
  28.                 if (item.name.Equals(proteinName)) return item.formula;
  29.             }
  30.             return null;
  31.         }
  32.         static void ReadGeneticData(string filename)
  33.         {
  34.             StreamReader reader = new StreamReader(filename);
  35.             while (!reader.EndOfStream)
  36.             {
  37.                 string line = reader.ReadLine();
  38.                 string[] fragments =    line.Split('\t');
  39.                 GeneticData protein;
  40.                 protein.name = fragments[0];
  41.                 protein.organism = fragments[1];
  42.                 protein.formula = fragments[2];
  43.                 data.Add(protein);
  44.                 count++;
  45.             }
  46.             reader.Close();
  47.         }
  48.         static void ReadHandleCommands(string filename)
  49.         {
  50.             StreamReader reader = new StreamReader(filename);
  51.             StreamWriter writer = new StreamWriter("genedata.txt");
  52.             writer.WriteLine("Maksim Dragun");
  53.             writer.WriteLine("Genetic Searching");
  54.             int counter = 0;
  55.             writer.WriteLine("================================================");
  56.             while (!reader.EndOfStream)
  57.             {
  58.                 string line = reader.ReadLine();
  59.                 counter++;
  60.                 string[] command = line.Split('\t');
  61.                 if (command[0].Equals("search"))
  62.                 {
  63.                     writer.WriteLine($"{counter.ToString("D3")}   {"search"}   {Decoding(command[1])}");
  64.                     writer.WriteLine("organism                      protein");
  65.                     int index = Search(command[1]);
  66.                     if (index != -1)
  67.                         writer.WriteLine($"{data[index].organism}    {data[index].name}");
  68.                     else
  69.                         writer.WriteLine("NOT FOUND");
  70.                     writer.WriteLine("================================================");
  71.                 }
  72.                 if (command[0].Equals("diff"))
  73.                 {
  74.                     writer.WriteLine($"{counter.ToString("D3")}   {"diff"}   {command[1]}  {command[2]}");
  75.                     int diffNum = Diff(command[1], command[2]);
  76.                     writer.WriteLine("amino-acids difference:");
  77.                     if (diffNum == -1)
  78.                         writer.WriteLine("MISSING" + command[1]);
  79.                     else if (diffNum == -2)
  80.                         writer.WriteLine("MISSING" + command[2]);
  81.                     else
  82.                         writer.WriteLine($"{diffNum}");
  83.                     writer.WriteLine("================================================");
  84.                 }
  85.                 if (command[0].Equals("mode"))
  86.                 {
  87.                     writer.WriteLine($"{counter.ToString("D3")}   {"mode"}   {command[1]}");
  88.                     string res = Mode(command[1]);
  89.                     writer.WriteLine("amino - acid occurs:");
  90.                     if (res == "no")
  91.                         writer.WriteLine("MISSING" + command[1]);
  92.                     else
  93.                         writer.WriteLine(res);
  94.                     writer.WriteLine("================================================");
  95.                 }
  96.             }
  97.             reader.Close();
  98.             writer.Close();
  99.         }
  100.         static string Decoding(string formula)
  101.         {
  102.             string decoded = String.Empty;
  103.             for (int i = 0; i < formula.Length; i++)
  104.             {
  105.                 if (char.IsDigit(formula[i]))
  106.                 {
  107.                     char letter = formula[i + 1];
  108.                     int conversion = formula[i] - '0';
  109.                     for (int j = 0; j < conversion - 1; j++) decoded = decoded + letter;
  110.                 }
  111.                 else decoded = decoded + formula[i];
  112.             }
  113.             return decoded;
  114.         }
  115.         static int Search(string amino_acid)
  116.         {
  117.             string decoded = Decoding(amino_acid);
  118.             for (int i = 0; i < data.Count; i++)
  119.             {
  120.                 if (data[i].formula.Contains(decoded))
  121.                     return i;
  122.             }
  123.             return -1;
  124.         }
  125.         static int Diff(string protein1, string protein2)
  126.         {
  127.             string  min;
  128.             string formula1 = "";
  129.             string formula2 = "";
  130.             formula1 = Decoding(GetFormula(protein1));
  131.             formula2 = Decoding(GetFormula(protein2));
  132.             if (formula1 == "")
  133.                 return -1;
  134.             if (formula2 == "")
  135.                 return -2;
  136.             int minLength = Math.Min(formula1.Length, formula2.Length);
  137.             int difference = 0;
  138.             for(int j = 0; j < minLength; j++)
  139.             {
  140.                 if (formula1[j] != formula2[j])
  141.                     difference++;
  142.             }
  143.             difference += Math.Abs(formula1.Length - formula2.Length);
  144.  
  145.             return difference;
  146.         }
  147.         static string Mode(string protein)
  148.         {
  149.             string formula1 = "";
  150.             formula1 = GetFormula(protein);
  151.             if (formula1 == "")
  152.             {
  153.                 return "no";
  154.             }
  155.             Dictionary<char, int> frequency = new Dictionary<char, int>();
  156.             int max = 0; char maxAmino = ' ';
  157.             for(int j = 0; j < formula1.Length; j++)
  158.             {
  159.                 if (frequency.ContainsKey(formula1[j]))
  160.                 {
  161.                     frequency[formula1[j]]++;
  162.                 }
  163.                 else
  164.                 {
  165.                     frequency[formula1[j]] = 1;
  166.                 }
  167.             }
  168.             foreach(var c in frequency) {
  169.                 if (c.Value > max)
  170.                 {
  171.                     max = c.Value;
  172.                     maxAmino = c.Key;
  173.                 }
  174.                 else if (c.Value == max && c.Key < maxAmino)
  175.                 {
  176.                     maxAmino = c.Key;
  177.                 }
  178.             }
  179.          
  180.             string res = maxAmino + "      " + max;
  181.             return res;
  182.         }
  183.         static void Main(string[] args)
  184.         {
  185.             ReadGeneticData("sequences.2.txt");
  186.             ReadHandleCommands("commands.2.txt");
  187.         }
  188.     }
  189. }
Advertisement
Add Comment
Please, Sign In to add comment