Advertisement
didatzi

Ex04_WinningTicket

Jul 5th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.45 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Security.Cryptography.X509Certificates;
  5. using System.Text.RegularExpressions;
  6.  
  7. namespace Ex04_WinningTicket
  8. {
  9.     class WinningTicket
  10.     {
  11.         static void Main()
  12.         {
  13.             //solution 1
  14.  
  15.             #region Solution1
  16.  
  17.             //    var tickets = Console.ReadLine()
  18.             //        .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
  19.             //        .Select(t => t.Trim())
  20.             //        .ToArray();
  21.  
  22.             //    foreach (var ticket in tickets)
  23.             //    {
  24.             //        if (ticket.Length != 20)
  25.             //        {
  26.             //            Console.WriteLine("invalid ticket");
  27.             //            continue;
  28.             //        }
  29.             //        var left = new string(ticket.Take(10).ToArray());
  30.             //        var right = new string(ticket.Skip(10).ToArray());
  31.  
  32.             //        var winningSimbols = new string[] { "@", "#", "\\^", "\\$" };
  33.             //        var winingTicket = false;
  34.             //        foreach (var winningSimbol in winningSimbols)
  35.             //        {
  36.             //            var regex = new Regex($"{winningSimbol}{{6,}}");
  37.             //            var lefMatch = regex.Match(left);
  38.             //            if (lefMatch.Success)
  39.             //            {
  40.             //                var rightMatch = regex.Match(right);
  41.             //                if (rightMatch.Success)
  42.             //                {
  43.             //                    winingTicket = true;
  44.             //                    var leftSimbolsLenght = lefMatch.Value.Length;
  45.             //                    var rightSimbolsLenght = rightMatch.Value.Length;
  46.             //                    var jackpot = leftSimbolsLenght == 10 && rightSimbolsLenght == 10
  47.             //                        ? " Jackpot!" : String.Empty;
  48.             //                    Console.WriteLine($"ticket \"{ticket}\" - " +
  49.             //                                      $"{Math.Min(leftSimbolsLenght,rightSimbolsLenght)}" +
  50.             //                                      $"{winningSimbol.Trim('\\')}{jackpot}");
  51.             //                    break;
  52.             //                }
  53.             //            }
  54.             //        }
  55.             //        if (!winingTicket)
  56.             //        {
  57.             //            Console.WriteLine($"ticket \"{ticket}\" - no match");
  58.             //        }
  59.             //    }
  60.  
  61.             #endregion
  62.  
  63.             //Solution2 with IF
  64.             var tickets = Console.ReadLine()
  65.                 .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
  66.                 .Select(t => t.Trim())
  67.                 .ToArray();
  68.  
  69.             foreach (var ticket in tickets)
  70.             {
  71.                 if (ticket.Length != 20)
  72.                 {
  73.                     Console.WriteLine("invalid ticket");
  74.                     continue;
  75.                 }
  76.                 var left = ticket.Take(10).ToArray();
  77.                 var right = ticket.Skip(10).ToArray();
  78.  
  79.                 var winningTicket = false;
  80.  
  81.                 var leftResult = FindRepeatinSimbols(left);
  82.                 if ((leftResult.Symbol == '@'
  83.                     || leftResult.Symbol == '#'
  84.                     || leftResult.Symbol == '$'
  85.                     || leftResult.Symbol == '^')
  86.                     && leftResult.Count >= 6)
  87.                 {
  88.                     var rightResult = FindRepeatinSimbols(right);
  89.                     if (leftResult.Symbol == rightResult.Symbol && rightResult.Count >= 6)
  90.                     {
  91.                         var jackpot = leftResult.Count == 10 && rightResult.Count == 10 ? " Jackpot!" : String.Empty;
  92.                         Console.WriteLine($"ticket \"{ticket}\" - " +
  93.                                           $"{Math.Min(leftResult.Count,rightResult.Count)}{leftResult.Symbol}{jackpot}");
  94.                         winningTicket = true;
  95.                     }
  96.                 }
  97.                     if (!winningTicket)
  98.                     {
  99.                         Console.WriteLine($"ticket \"{ticket}\" - no match");
  100.                     }
  101.             }
  102.         }
  103.  
  104.         public class Result
  105.         {
  106.             public int Count { get; set; }
  107.             public char Symbol { get; set; }
  108.         }
  109.         public static Result FindRepeatinSimbols(char[] symbols)
  110.         {
  111.             var previusSymbol = symbols.First();
  112.             int count = 1;
  113.             var maxCount = 0;
  114.             var maxSymbol = default(char);
  115.             for (int i = 1; i < symbols.Length; i++)
  116.             {
  117.                 var currentSymbol = symbols[i];
  118.                 if (previusSymbol == currentSymbol)
  119.                 {
  120.                     count++;
  121.                 }
  122.                 else
  123.                 {
  124.                     if (count > maxCount)
  125.                     {
  126.                         maxCount = count;
  127.                         maxSymbol = previusSymbol;
  128.                     }
  129.                     count = 1;
  130.                 }
  131.                 if (count > maxCount)
  132.                 {
  133.                     maxCount = count;
  134.                     maxSymbol = previusSymbol;
  135.                 }
  136.                 previusSymbol = currentSymbol;
  137.             }
  138.             return new Result()
  139.             {
  140.                 Count = maxCount,
  141.                 Symbol = maxSymbol
  142.             };
  143.         }
  144.     }
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement