Advertisement
yanass

Kamino Factory

Jun 2nd, 2019
1,041
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.31 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3. namespace Kamino_factory_snd_try
  4. {
  5.     class Program
  6.     {
  7.         static int indexStartOfTheLongestSubsequence(int[] dna)
  8.         {
  9.             int leftMost = int.MinValue;
  10.             int subsequenceMaxInTheArray = 0;
  11.             for (int i = 0; i < dna.Length; i++)
  12.             {
  13.                 if (dna[i] == 1)
  14.                 {
  15.                     int subsequence = 1;
  16.                     for (int j = i + 1; j < dna.Length; j++)
  17.                     {
  18.                         if (dna[i] == dna[j])
  19.                             subsequence++;
  20.                         else
  21.                             break;
  22.                     }
  23.                     if (subsequence > subsequenceMaxInTheArray)
  24.                     {
  25.                         subsequenceMaxInTheArray = subsequence;
  26.                         leftMost = i;
  27.  
  28.                     }
  29.  
  30.                 }
  31.             }
  32.             return leftMost;
  33.  
  34.         }
  35.         static int Subsequence(int[] dna)
  36.         {
  37.             int subsequenceMaxInTheArray = 0;
  38.             for (int i = 0; i < dna.Length; i++)
  39.             {
  40.                 if (dna[i] == 1)
  41.                 {
  42.                     int subsequence = 1;
  43.                     for (int j = i + 1; j < dna.Length; j++)
  44.                     {
  45.                         if (dna[i] == dna[j])
  46.                             subsequence++;
  47.                         else
  48.                             break;
  49.                     }
  50.                     if (subsequence > subsequenceMaxInTheArray)
  51.                     {
  52.                         subsequenceMaxInTheArray = subsequence;
  53.  
  54.  
  55.                     }
  56.  
  57.                 }
  58.             }
  59.             return subsequenceMaxInTheArray;
  60.         }
  61.  
  62.         static int MostOnes(int[] dna)
  63.         {
  64.             int mostOnes = 0;
  65.             for (int i = 0; i < dna.Length; i++)
  66.             {
  67.                 if (dna[i] == 1)
  68.                 {
  69.                     mostOnes++;
  70.                 }
  71.             }
  72.             return mostOnes;
  73.         }
  74.  
  75.         static int[] Dna(string  entry)
  76.         {
  77.             return entry.Split(new[] { '!' }, StringSplitOptions.RemoveEmptyEntries)
  78.                     .Select(int.Parse)
  79.                     .ToArray();
  80.            
  81.         }
  82.         static void Main()
  83.         {
  84.             int dnaLength = int.Parse(Console.ReadLine());
  85.             string entry = Console.ReadLine();
  86.  
  87.             int mostLeft = indexStartOfTheLongestSubsequence(Dna(entry));
  88.             int longestSubsequenceOnes = Subsequence(Dna(entry));
  89.             int mostOnes = int.MinValue;
  90.             int sample = 0;
  91.             int bestSample = 0;
  92.  
  93.             int[] bestDna = new int[dnaLength];
  94.  
  95.             while (entry != "Clone them!")
  96.             {
  97.                 int[] dna = Dna(entry);
  98.                 sample++;
  99.                 int ones = MostOnes(dna);
  100.                 if (longestSubsequenceOnes < Subsequence(dna))
  101.                 {
  102.                     longestSubsequenceOnes = Subsequence(dna);
  103.                     bestDna = dna;
  104.                     bestSample = sample;
  105.                     mostOnes = ones;
  106.                 }
  107.                 else if (longestSubsequenceOnes == Subsequence(dna))
  108.                 {
  109.                     int leftMostTry = indexStartOfTheLongestSubsequence(dna);
  110.                     if (mostLeft > leftMostTry)
  111.                     {
  112.                         mostLeft = leftMostTry;
  113.                         bestDna = dna;
  114.                         bestSample = sample;
  115.                         mostOnes = ones;
  116.  
  117.                     }
  118.                     else if (mostLeft == leftMostTry)
  119.                     {
  120.                        
  121.                         if (mostOnes < ones)
  122.                         {
  123.                             mostOnes = ones;
  124.                             bestDna = dna;
  125.                             bestSample = sample;
  126.                         }
  127.                     }
  128.                 }
  129.  
  130.  
  131.                 //Console.WriteLine(string.Join(' ', dna));
  132.                 //Console.WriteLine(Subsequence(dna));
  133.                 entry = Console.ReadLine();
  134.  
  135.             }
  136.             Console.WriteLine($"Best DNA sample {bestSample} with sum: {mostOnes}.");
  137.             Console.WriteLine(string.Join(' ', bestDna));
  138.         }
  139.     }
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement