Advertisement
Asinka

Genome Decoder

Feb 3rd, 2013
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.27 KB | None | 0 0
  1. using System;
  2. using System.Text;
  3.  
  4.  
  5. class GenomeDecoder
  6. {
  7.     static void Main()
  8.     {
  9.         string firstLine = Console.ReadLine();
  10.         string[] format = firstLine.Split(' ');
  11.  
  12.         string genome = Console.ReadLine();
  13.         int counter = 0;
  14.         int number = 0;
  15.         int result = 0;
  16.         int indexNumbers = 0;
  17.         int indexLetters = 0;
  18.         string letters = null;
  19.         string previous = null;
  20.  
  21.         string[] genomeLetters = new string[genome.Length];
  22.         int[] genomeNumbers = new int[genome.Length];
  23.  
  24.         for (int i = 0; i < genome.Length; i++)
  25.         {
  26.             string digit = genome.Substring(i, 1);
  27.  
  28.             bool check = Int32.TryParse(digit, out number);
  29.             if (check)
  30.             {
  31.                 result = number + counter;
  32.                 counter = result * 10;
  33.  
  34.                 if (previous == "letter" || i == genome.Length - 1)
  35.                 {
  36.                     genomeLetters[indexLetters] = letters;
  37.                     letters = null;
  38.                     indexLetters++;
  39.                 }
  40.  
  41.                 if (i == genome.Length - 1)
  42.                 {
  43.                     genomeNumbers[indexNumbers] = result;
  44.                 }
  45.                 previous = "number";
  46.             }
  47.             else
  48.             {                
  49.                 if (previous == "number")
  50.                 {
  51.                     genomeNumbers[indexNumbers] = result;
  52.                     result = 0;
  53.                     counter = 0;
  54.                     number = 0;
  55.                     indexNumbers++;
  56.                 }
  57.                 else
  58.                 {
  59.                     genomeNumbers[indexNumbers] = 1;
  60.                     genomeLetters[indexLetters] = letters;
  61.                     indexNumbers++;
  62.                     indexLetters++;
  63.                 }
  64.                 letters = digit;
  65.  
  66.                 if (i == genome.Length - 1)
  67.                 {
  68.                     genomeLetters[indexLetters] = letters;
  69.                 }
  70.                 previous = "letter";
  71.             }
  72.         }
  73.  
  74.         string decoded = null;
  75.  
  76.         for (int i = 0; i < genomeLetters.Length; i++)
  77.         {
  78.             for (int j = 0; j < genomeNumbers[i]; j++)
  79.             {
  80.                 decoded = decoded + genomeLetters[i];
  81.             }
  82.         }
  83.  
  84.         //Console.WriteLine(decoded);
  85.  
  86.         int length = int.Parse(format[0]);
  87.         int count = int.Parse(format[1]);
  88.         int start = 0;
  89.         int maximum = decoded.Length/length;
  90.         if (decoded.Length % length != 0)
  91.         {
  92.             maximum = maximum + 1;
  93.         }
  94.         int spaces = maximum / 10 ;
  95.  
  96.         for (int i = 1; i <= maximum ; i++)
  97.         {
  98.             Console.Write(new string(' ', spaces - i/10));
  99.             Console.Write("{0}", i);
  100.             Console.Write(" ");
  101.  
  102.             for (int j = 1; j <= length; j++)
  103.             {
  104.                 Console.Write(decoded.Substring(start, 1));
  105.                 if (j % count == 0)
  106.                 {
  107.                     Console.Write(" ");
  108.                 }
  109.                 start++;
  110.                 if (start == decoded.Length)
  111.                 {
  112.                     break;
  113.                 }
  114.             }
  115.             Console.WriteLine();
  116.         }
  117.     }
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement