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); }
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); }
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; }
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); }