Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Threading.Tasks;
- class RoliTheCoder
- {
- static void Main(string[] args)
- {
- List<Event> events = new List<Event>();
- while (true)
- {
- string inputLine = Console.ReadLine();
- if (inputLine.Equals("Time for Code"))
- {
- break;
- }
- string[] eventArgs = inputLine.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
- int eventID = int.Parse(eventArgs[0]);
- string eventName = eventArgs[1];
- if (!eventName.Contains("#"))
- {
- continue;
- }
- eventName = eventName.Trim('#');
- bool foundInvalidParticipant = false;
- for (int i = 2; i < eventArgs.Length; i++)
- {
- if (!eventArgs[i].Contains('@'))
- {
- foundInvalidParticipant = true;
- break;
- }
- }
- if (foundInvalidParticipant)
- {
- continue;
- }
- MatchCollection participants = Regex.Matches(inputLine, @"@[\w]+");
- ReadEvent(eventID, eventName, participants, events);
- }
- PrintEvents(events);
- }
- static void PrintEvents(List<Event> events)
- {
- foreach (var occasion in events.OrderByDescending(e => e.Participants.Count).ThenBy(e => e.Name))
- {
- Console.WriteLine($"{occasion.Name} - {occasion.Participants.Count}");
- foreach (var participant in occasion.Participants.OrderBy(p => p))
- {
- Console.WriteLine(participant);
- }
- }
- }
- private static void ReadEvent(int eventID, string eventName, MatchCollection participants, List<Event> events)
- {
- Event currentEvent = new Event();
- if (events.Any(e => e.ID == eventID && e.Name == eventName))
- {
- currentEvent = events.First(e => e.ID == eventID);
- foreach (var participant in participants)
- {
- currentEvent.Participants.Add(participant.ToString());
- }
- currentEvent.Participants = currentEvent.Participants.Distinct().ToList();
- }
- else if (!(events.Any(e => e.Name == eventName || e.ID == eventID)))
- {
- currentEvent.ID = eventID;
- currentEvent.Name = eventName;
- currentEvent.Participants = new List<string>();
- foreach (var participant in participants)
- {
- currentEvent.Participants.Add(participant.ToString());
- }
- currentEvent.Participants = currentEvent.Participants.Distinct().ToList();
- events.Add(currentEvent);
- }
- }
- }
- class Event
- {
- public int ID { get; set; }
- public string Name { get; set; }
- public List<string> Participants { get; set; }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement