Guest User

Untitled

a guest
Nov 25th, 2020
103
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Text.RegularExpressions; // 90/100 in Judge
  3.  
  4.  
  5. namespace TextAndRegex
  6. {
  7.     class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             string[] ticketsCollection =
  12.                 Console.ReadLine().Split(new string[] {",", " "}, StringSplitOptions.RemoveEmptyEntries);
  13.             Regex regexForWinningTicket =
  14.                 new Regex(@"(.*[@]{6,10}.*)|(.*[#]{6,10}.*)|(.*[$]{6,10}.*)|(.*[\^]{6,10}.*)");
  15.  
  16.             foreach (string ticket in ticketsCollection)
  17.             {
  18.                 if (ticket.Length != 20)
  19.                 {
  20.                     Console.WriteLine("invalid ticket");
  21.                 }
  22.  
  23.                 else if (ticket.Length == 20) //only 20 is valid ticket length
  24.                 {
  25.                     string leftSide = ticket.Substring(0, 10); //left side
  26.                     string rightSide = ticket.Substring(10, 10); //right side
  27.  
  28.                     if (regexForWinningTicket.IsMatch(leftSide) && regexForWinningTicket.IsMatch(rightSide))
  29.                     {
  30.                         CheckSideForWinnerSequences(leftSide, out var maxLeftLengthOfTheSameSequences,
  31.                             out var leftWinningSymbols);
  32.                         CheckSideForWinnerSequences(rightSide, out var maxRightLengthOfTheSameSequences,
  33.                             out var rightWinningSymbol);
  34.  
  35.                         int validTheRepeatingLengthInBothSide = Math.Min(maxRightLengthOfTheSameSequences,
  36.                             maxLeftLengthOfTheSameSequences);
  37.                         if (rightWinningSymbol == leftWinningSymbols && validTheRepeatingLengthInBothSide >= 6)
  38.                         {
  39.                             Console.WriteLine(
  40.                                 validTheRepeatingLengthInBothSide < 10
  41.                                     ? $"ticket \"{ticket}\" - {validTheRepeatingLengthInBothSide}{rightWinningSymbol}"
  42.                                     : $"ticket \"{ticket}\" - {validTheRepeatingLengthInBothSide}{rightWinningSymbol} Jackpot!");
  43.                         }
  44.                         else
  45.                         {
  46.                             Console.WriteLine($"ticket \"{ticket}\" - no match");
  47.                         }
  48.                     }
  49.                     else
  50.                     {
  51.                         Console.WriteLine($"ticket \"{ticket}\" - no match");
  52.                     }
  53.                 }
  54.             }
  55.         }
  56.  
  57.         private static void CheckSideForWinnerSequences(string side,
  58.             out int maxLengthOfTheSameSequences,
  59.             out char winningSymbol)
  60.         {
  61.             var lengthOfTheSameSequences = 0;
  62.             maxLengthOfTheSameSequences = 0;
  63.             winningSymbol = '\0';
  64.             var lastWinningSymbol = '\0';
  65.             foreach (var ch in side)
  66.             {
  67.                 if (ch == '@' || ch == '$' || ch == '#' || ch == '^')
  68.                 {
  69.                     if (ch != lastWinningSymbol)
  70.                     {
  71.                         if (lengthOfTheSameSequences > maxLengthOfTheSameSequences)
  72.                         {
  73.                             maxLengthOfTheSameSequences = lengthOfTheSameSequences; //which is the maxSequences length
  74.                             winningSymbol = lastWinningSymbol; //which is the winner symbol
  75.                         }
  76.  
  77.                         lastWinningSymbol = ch;
  78.                         lengthOfTheSameSequences = 1;
  79.                     }
  80.                     else
  81.                     {
  82.                         lengthOfTheSameSequences++;
  83.                     }
  84.                 }
  85.                 else
  86.                 {
  87.                     if (lengthOfTheSameSequences > maxLengthOfTheSameSequences)
  88.                     {
  89.                         maxLengthOfTheSameSequences = lengthOfTheSameSequences; //which is the maxSequences length
  90.                         winningSymbol = lastWinningSymbol; //which is the winner symbol
  91.                     }
  92.                    
  93.                     lastWinningSymbol = '\0';
  94.                     lengthOfTheSameSequences = 0;
  95.                 }
  96.             }
  97.             if (lengthOfTheSameSequences > maxLengthOfTheSameSequences)
  98.             {
  99.                 maxLengthOfTheSameSequences = lengthOfTheSameSequences; //which is the maxSequences length
  100.                 winningSymbol = lastWinningSymbol; //which is the winner symbol
  101.             }
  102.         }
  103.     }
  104. }
  105.  
RAW Paste Data