示例#1
0
        public static object FindMostFrequentlySleepyGaurd()
        {
            var        logs       = Input.Split("\r\n");
            List <Log> logsSorted = SortLogs(logs);

            Gaurd activeGaurd = null;

            foreach (var log in logsSorted)
            {
                if (log.Entry.Contains('#'))
                {
                    activeGaurd = NextGaurdRound(log.Entry);
                }
                else
                {
                    activeGaurd.MinutesOfSleep += AddMinutesOfSleep(log.Entry, activeGaurd);
                }
            }
            SleepyMinute mostSleepyMinute = null;
            Gaurd        sleepyGaurd      = null;

            foreach (var gaurd in gaurds)
            {
                if (sleepyGaurd == null)
                {
                    sleepyGaurd = gaurd.Value;
                }


                foreach (var sleepyMinute in gaurd.Value.SleepyMinutes)
                {
                    if (mostSleepyMinute == null)
                    {
                        mostSleepyMinute = sleepyMinute;
                    }

                    var test = sleepyMinute.minute;

                    if (mostSleepyMinute.Frequency < sleepyMinute.Frequency)
                    {
                        mostSleepyMinute = sleepyMinute;
                        sleepyGaurd      = gaurd.Value;
                    }
                }
            }

            //var keyValuePair = gaurds.w(x => x.Value.SleepyMinutes.Max(y => y.Frequency)).Value;

            return(sleepyGaurd.Id * mostSleepyMinute.minute);
        }
示例#2
0
        private static Gaurd NextGaurdRound(string log)
        {
            var gaurdId = int.Parse(_gaurdId.Match(log).ToString());

            if (gaurds.ContainsKey(gaurdId))
            {
                return(gaurds[gaurdId]);
            }

            var newGaurd = new Gaurd {
                Id = gaurdId, MinutesOfSleep = 0, SleepyMinutes = new SleepyMinute[60]
            };

            for (int i = 0; i < newGaurd.SleepyMinutes.Count(); i++)
            {
                newGaurd.SleepyMinutes[i] = new SleepyMinute();
            }

            gaurds.Add(newGaurd.Id, newGaurd);

            return(newGaurd);
        }
示例#3
0
        public static int FindMostSleepyGaurd()
        {
            var logs = Input.Split("\r\n");

            List <Log> logsSorted = SortLogs(logs);

            Gaurd activeGaurd = null;

            foreach (var log in logsSorted)
            {
                if (log.Entry.Contains('#'))
                {
                    activeGaurd = NextGaurdRound(log.Entry);
                }
                else
                {
                    activeGaurd.MinutesOfSleep += AddMinutesOfSleep(log.Entry, activeGaurd);
                }
            }

            Gaurd sleepyGaurd = null;

            foreach (var gaurd in gaurds)
            {
                if (sleepyGaurd == null)
                {
                    sleepyGaurd = gaurd.Value;
                }

                if (sleepyGaurd.MinutesOfSleep < gaurd.Value.MinutesOfSleep)
                {
                    sleepyGaurd = gaurd.Value;
                }
            }

            return(sleepyGaurd.Id); // * sleepyGaurd.IndexOfMax;
        }
示例#4
0
        private static int AddMinutesOfSleep(string log, Gaurd activeGaurd)
        {
            if (log.Contains("asleep"))
            {
                activeGaurd.FellAsleepAt = GetDate(log);
            }
            if (log.Contains("wakes"))
            {
                activeGaurd.WokeUpAt = GetDate(log);
                var totalMinutes = activeGaurd.WokeUpAt.Subtract(activeGaurd.FellAsleepAt).TotalMinutes;
                for (var i = activeGaurd.FellAsleepAt.Minute; i < activeGaurd.FellAsleepAt.Minute + totalMinutes; i++)
                {
                    activeGaurd.SleepyMinutes[i].Amount++;
                    if (i - 60 < activeGaurd.FellAsleepAt.Minute)
                    {
                        activeGaurd.SleepyMinutes[i].Frequency++;
                        activeGaurd.SleepyMinutes[i].minute = i;
                    }
                }
                return((int)totalMinutes);
            }

            return(0);
        }