示例#1
0
        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);
        }
示例#2
0
        public ClientResult Post([FromBody] GuardEvent signal)
        {
            return(new ClientResult
            {
                State = true,

                Message = $"Signal GuardEvent"
            });
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
文件: D04P1.cs 项目: JustJace/aoc
        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());
        }
示例#7
0
        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);
        }
示例#8
0
 public static int CompareByTimeStamps(GuardEvent e1, GuardEvent e2)
 {
     return(e1.Time.ToMinutes().CompareTo(e2.Time.ToMinutes()));
 }
示例#9
0
 public Guard(GuardEvent evnt)
 {
     GuardId = evnt.GuardId;
 }
示例#10
0
        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);
        }