Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace Events
- {
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Globalization;
- using System.Security.Cryptography.X509Certificates;
- using Wintellect.PowerCollections;
- public class Program
- {
- //static SortedDictionary<string, List<Event>> byDate = new SortedDictionary<string, List<Event>>();
- static Dictionary<string, List<Event>> byTitle = new Dictionary<string, List<Event>>();
- static OrderedMultiDictionary<DateTime, Event> byDate = new OrderedMultiDictionary<DateTime, Event>(true);
- //static SortedSet<string> dates = new SortedSet<string>();
- static StringBuilder sb = new StringBuilder();
- public static void Main()
- {
- while (true)
- {
- var line = Console.ReadLine();
- if (line == "End")
- {
- break;
- }
- var commandEndIndex = line.IndexOf(" ");
- var commandName = line.Substring(0, commandEndIndex);
- var command = line.Substring(commandEndIndex + 1).Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim()).ToArray();
- if (commandName == "AddEvent")
- {
- //var date = command[0];
- DateTime date = DateTime.ParseExact(command[0], "yyyy-MM-ddTHH:mm:ss", CultureInfo.InvariantCulture);
- var ev = new Event(date, command[1]);
- if (command.Length > 2)
- {
- ev.Location = command[2];
- }
- if (!byDate.ContainsKey(date))
- {
- byDate[date] = new List<Event>();
- }
- if (!byTitle.ContainsKey(command[1].ToLower()))
- {
- byTitle[command[1].ToLower()] = new List<Event>();
- }
- byDate[date].Add(ev);
- byTitle[command[1].ToLower()].Add(ev);
- //dates.Add(ev.Date);
- sb.AppendLine("Event added");
- }
- else if (commandName == "DeleteEvents")
- {
- if (!byTitle.ContainsKey(command[0].ToLower()))
- {
- sb.AppendLine("No events found");
- continue;
- }
- var toDelete = byTitle[command[0].ToLower()];
- int count = toDelete.Count;
- if (toDelete.Count == 0)
- {
- sb.AppendLine("No events found");
- continue;
- }
- foreach (var ev in toDelete)
- {
- byDate[ev.Date].Remove(ev);
- }
- byTitle.Remove(command[0].ToLower());
- sb.AppendLine(string.Format("{0} events deleted", count));
- }
- else
- {
- //var date = command[0];
- DateTime date = DateTime.ParseExact(command[0], "yyyy-MM-ddTHH:mm:ss", CultureInfo.InvariantCulture);
- //var datesList = command[0].CompareTo(dates.Last()) < 0 ? dates.GetViewBetween(command[0], dates.Last()) : new SortedSet<string>();
- //var toList = new List<Event>();
- //foreach (var date in datesList)
- //{
- // toList.AddRange(byDate[date]);
- //}
- //toList.OrderBy(x => x.Date)
- // .ThenBy(x => x.Name)
- // .ThenBy(x => x.Location)
- // .Take(int.Parse(command[1]))
- // .ToList();
- var toList = byDate.RangeFrom(date, true)
- .Values
- .Take(int.Parse(command[1]))
- .ToList();
- //.SelectMany(e => e.Value)
- //.OrderBy(x => x.Date)
- //.ThenBy(x => x.Name)
- //.ThenBy(x => x.Location)
- //.Take(int.Parse(command[1]))
- //.ToList();
- //var toList = byDate
- // .Where(x => x.Key.CompareTo(command[0]) >= 0)
- // .SelectMany(e => e.Value)
- // .OrderBy(x => x.Date)
- // .ThenBy(x => x.Name)
- // .ThenBy(x => x.Location)
- // .Take(int.Parse(command[1]))
- // .ToList();
- if (toList.Count == 0)
- {
- sb.AppendLine("No events found");
- continue;
- }
- foreach (var ev in toList)
- {
- sb.AppendLine(ev.ToString());
- }
- }
- }
- Console.WriteLine(sb.ToString().Trim());
- }
- }
- public class Event : IComparable
- {
- public Event(DateTime date, string name)
- {
- this.Date = date;
- this.Name = name;
- this.Location = string.Empty;
- }
- public Event(DateTime date, string name, string location)
- : this(date, name)
- {
- this.Location = location;
- }
- //2012-01-21T20:00:00
- // public string Date { get; set; }
- public DateTime Date { get; set; }
- public string Name { get; set; }
- public string Location { get; set; }
- public override string ToString()
- {
- if (string.IsNullOrEmpty(this.Location))
- {
- return string.Format("{0:yyyy-MM-ddTHH:mm:ss} | {1}", this.Date, this.Name);
- }
- return string.Format("{0:yyyy-MM-ddTHH:mm:ss} | {1} | {2}", this.Date, this.Name, this.Location);
- }
- public int CompareTo(object obj)
- {
- var other = obj as Event;
- var comparer = this.Date.CompareTo(other.Date);
- if (comparer == 0)
- {
- comparer = this.Name.CompareTo(other.Name);
- if (comparer == 0)
- {
- comparer = this.Location.CompareTo(other.Location);
- }
- }
- return comparer;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement