Advertisement
Guest User

Untitled

a guest
Oct 25th, 2016
330
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.05 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Text.RegularExpressions;
  6. using System.Threading.Tasks;
  7.  
  8. class RoliTheCoder
  9. {
  10.     static void Main(string[] args)
  11.     {
  12.         List<Event> events = new List<Event>();
  13.         while (true)
  14.         {
  15.             string inputLine = Console.ReadLine();
  16.             if (inputLine.Equals("Time for Code"))
  17.             {
  18.                 break;
  19.             }
  20.  
  21.             string[] eventArgs = inputLine.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
  22.             int eventID = int.Parse(eventArgs[0]);
  23.             string eventName = eventArgs[1];
  24.  
  25.             if (!eventName.Contains("#"))
  26.             {
  27.                 continue;
  28.             }
  29.             eventName = eventName.Trim('#');
  30.             bool foundInvalidParticipant = false;
  31.             for (int i = 2; i < eventArgs.Length; i++)
  32.             {
  33.                 if (!eventArgs[i].Contains('@'))
  34.                 {
  35.                     foundInvalidParticipant = true;
  36.                     break;
  37.                 }
  38.             }
  39.             if (foundInvalidParticipant)
  40.             {
  41.                 continue;
  42.             }
  43.             MatchCollection participants = Regex.Matches(inputLine, @"@[\w]+");
  44.  
  45.             ReadEvent(eventID, eventName, participants, events);
  46.         }
  47.  
  48.         PrintEvents(events);
  49.     }
  50.  
  51.     static void PrintEvents(List<Event> events)
  52.     {
  53.         foreach (var occasion in events.OrderByDescending(e => e.Participants.Count).ThenBy(e => e.Name))
  54.         {
  55.             Console.WriteLine($"{occasion.Name} - {occasion.Participants.Count}");
  56.             foreach (var participant in occasion.Participants.OrderBy(p => p))
  57.             {
  58.                 Console.WriteLine(participant);
  59.             }
  60.         }
  61.     }
  62.  
  63.     private static void ReadEvent(int eventID, string eventName, MatchCollection participants, List<Event> events)
  64.     {
  65.         Event currentEvent = new Event();
  66.  
  67.         if (events.Any(e => e.ID == eventID && e.Name == eventName))
  68.         {
  69.             currentEvent = events.First(e => e.ID == eventID);
  70.             foreach (var participant in participants)
  71.             {
  72.                 currentEvent.Participants.Add(participant.ToString());
  73.             }
  74.             currentEvent.Participants = currentEvent.Participants.Distinct().ToList();
  75.         }
  76.         else if (!(events.Any(e => e.Name == eventName || e.ID == eventID)))
  77.         {
  78.             currentEvent.ID = eventID;
  79.             currentEvent.Name = eventName;
  80.             currentEvent.Participants = new List<string>();
  81.  
  82.             foreach (var participant in participants)
  83.             {
  84.                 currentEvent.Participants.Add(participant.ToString());
  85.             }
  86.             currentEvent.Participants = currentEvent.Participants.Distinct().ToList();
  87.             events.Add(currentEvent);
  88.         }
  89.     }
  90. }
  91.  
  92. class Event
  93. {
  94.     public int ID { get; set; }
  95.     public string Name { get; set; }
  96.     public List<string> Participants { get; set; }
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement