public void Test_EventParsing(string details, GuardEventType expectedType, string expectedTime, int expectedId) { var time = DateTime.Parse(expectedTime); var ev = new GuardEvent(details); ev.Type.Should().Be(expectedType); ev.Time.Should().Be(time); ev.Id.Should().Be(expectedId); }
public ClientResult Post([FromBody] GuardEvent signal) { return(new ClientResult { State = true, Message = $"Signal GuardEvent" }); }
public void FromString__WakeUp() { GuardEvent guardEvent = GuardEvent.FromString("[1518-11-03 00:29] wakes up"); Assert.AreEqual(null, guardEvent.ID); Assert.AreEqual(11, guardEvent.Date.Month); Assert.AreEqual(3, guardEvent.Date.Day); Assert.AreEqual(0, guardEvent.Date.Hour); Assert.AreEqual(29, guardEvent.Date.Minute); Assert.AreEqual(GuardEventType.WakeUp, guardEvent.Type); }
public void FromString__FallSleep() { GuardEvent guardEvent = GuardEvent.FromString("[1518-11-02 00:40] falls asleep"); Assert.AreEqual(null, guardEvent.ID); Assert.AreEqual(11, guardEvent.Date.Month); Assert.AreEqual(2, guardEvent.Date.Day); Assert.AreEqual(0, guardEvent.Date.Hour); Assert.AreEqual(40, guardEvent.Date.Minute); Assert.AreEqual(GuardEventType.FallSleep, guardEvent.Type); }
public void FromString__ShiftBegin() { GuardEvent guardEvent = GuardEvent.FromString("[1518-11-01 00:00] Guard #10 begins shift"); Assert.AreEqual(10, guardEvent.ID); Assert.AreEqual(11, guardEvent.Date.Month); Assert.AreEqual(1, guardEvent.Date.Day); Assert.AreEqual(0, guardEvent.Date.Hour); Assert.AreEqual(0, guardEvent.Date.Minute); Assert.AreEqual(GuardEventType.ShiftBegin, guardEvent.Type); }
private GuardEvent[] ParseInput(string input) { var events = new List <GuardEvent>(); var inputRegex = new Regex(@"\[1518-(\d+)-(\d+) (\d+):(\d+)\] (.+)"); var guardRegex = new Regex(@"Guard #(\d+) begins shift"); var matches = input.Split(Environment.NewLine).Select(i => inputRegex.Match(i)); foreach (var match in matches) { var ge = new GuardEvent { Month = int.Parse(match.Groups[1].ToString()), Day = int.Parse(match.Groups[2].ToString()), Hour = int.Parse(match.Groups[3].ToString()), Minute = int.Parse(match.Groups[4].ToString()) }; var eventText = match.Groups[5].ToString(); if (guardRegex.IsMatch(eventText)) { var guardMatch = guardRegex.Match(eventText); ge.GuardId = int.Parse(guardMatch.Groups[1].ToString()); ge.EventType = EventType.BeginShift; } else if (eventText == "wakes up") { ge.EventType = EventType.WakeUp; } else if (eventText == "falls asleep") { ge.EventType = EventType.FallAsleep; } else { throw new Exception("You didn't parse event input correctly."); } events.Add(ge); } return(events.ToArray()); }
public void FromStringArray__TestBaseUnsorted() { List <GuardEvent> guardEvents = GuardEvent.FromStringArray(new string[] { "[1518-11-01 00:00] Guard #10 begins shift", "[1518-11-01 23:58] Guard #99 begins shift", "[1518-11-01 00:30] falls asleep", "[1518-11-02 00:40] falls asleep", "[1518-11-01 00:05] falls asleep", "[1518-11-02 00:50] wakes up", "[1518-11-01 00:55] wakes up", "[1518-11-01 00:25] wakes up", }); Assert.AreEqual(10, guardEvents[0].ID); Assert.AreEqual(GuardEventType.ShiftBegin, guardEvents[0].Type); Assert.AreEqual(10, guardEvents[1].ID); Assert.AreEqual(GuardEventType.FallSleep, guardEvents[1].Type); Assert.AreEqual(10, guardEvents[2].ID); Assert.AreEqual(GuardEventType.WakeUp, guardEvents[2].Type); Assert.AreEqual(10, guardEvents[3].ID); Assert.AreEqual(GuardEventType.FallSleep, guardEvents[3].Type); Assert.AreEqual(10, guardEvents[4].ID); Assert.AreEqual(GuardEventType.WakeUp, guardEvents[4].Type); Assert.AreEqual(99, guardEvents[5].ID); Assert.AreEqual(GuardEventType.ShiftBegin, guardEvents[5].Type); Assert.AreEqual(99, guardEvents[6].ID); Assert.AreEqual(GuardEventType.FallSleep, guardEvents[6].Type); Assert.AreEqual(99, guardEvents[7].ID); Assert.AreEqual(GuardEventType.WakeUp, guardEvents[7].Type); }
public static int CompareByTimeStamps(GuardEvent e1, GuardEvent e2) { return(e1.Time.ToMinutes().CompareTo(e2.Time.ToMinutes())); }
public Guard(GuardEvent evnt) { GuardId = evnt.GuardId; }
private IEnumerable <Guard> ParseData(string data) { var guards = new Dictionary <int, Guard>(); var events = data.Split("\n") .Select(v => { var match = _eventRegex.Match(v); var @event = match.Groups["event"].ToString(); return(new { Timestamp = DateTime.ParseExact(match.Groups["time"].ToString(), "yyyy-MM-dd HH:mm", null), Type = @event.StartsWith("Guard") ? Day4.EventType.StartsShift : @event.StartsWith("falls") ? Day4.EventType.FallsAsleep : Day4.EventType.WakesUp, Guard = @event.StartsWith("Guard") ? Int32.Parse(_guardIdRegex.Match(@event).Value) : (int?)null }); }) .OrderBy(e => e.Timestamp); Guard currentGuard = null; GuardEvent currentEvent = null; foreach (var @event in events) { if (@event.Guard.HasValue) { var guardId = @event.Guard.Value; if (guards.ContainsKey(guardId)) { currentGuard = guards[guardId]; } else { currentGuard = new Guard(@event.Guard.Value); guards.Add(guardId, currentGuard); } } if (@event.Type != Day4.EventType.WakesUp) { currentEvent = new GuardEvent { StartTime = @event.Timestamp, Type = @event.Type == EventType.StartsShift ? GuardEvent.TypeEnum.StartsShift : GuardEvent.TypeEnum.Sleeps }; currentGuard?.Events.Add(currentEvent); } else { currentEvent.EndTime = @event.Timestamp.AddMinutes(-1); } } return(guards.Values); }