using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text.RegularExpressions; namespace D4._1 { class Program { static void Main(string[] args) { if (args.Length < 1) return; if (File.Exists(args[0]) == false) return; var dic = new Dictionary(); var guard = new Dictionary)>(); var file = File.OpenText(args[0]); var regex = new Regex(@"\[(.*)\]"); do { var line = file.ReadLine(); if (line == null) break; var dateStr = line.Substring(0 , 18).Trim('[', ']'); var date = DateTime.Parse(dateStr); dic.Add(date, line.Substring(19, line.Length - 19)); } while (true); var ordered = dic.OrderBy(kvp => kvp.Key); string curGuard = string.Empty; DateTime asleep = DateTime.Now; foreach (var kvp in ordered) { var date = kvp.Key; var str = kvp.Value; if (str.StartsWith("Guard")) curGuard = str.Split(' ')[1]; { if (guard.ContainsKey(curGuard) == false) { var d = new Dictionary(); for (var i = 0; i < 60; i++) d.Add(i, 0); guard.Add(curGuard, (0, d)); } } if (str == "falls asleep") { asleep = date; } if (str == "wakes up") { var c = guard[curGuard]; c.Item1 += (date - asleep).Minutes; for (int m = asleep.Minute; m < date.Minute; m++) c.Item2[m] += 1; guard[curGuard] = c; } } var sleeper = guard.OrderByDescending(g => g.Value.Item1).FirstOrDefault(); Console.WriteLine($"Guard {sleeper.Key} sleeps {sleeper.Value.Item1}min"); var minutes = sleeper.Value.Item2.OrderByDescending(m => m.Value).FirstOrDefault(); Console.WriteLine($"Guard {sleeper.Key} mostly slept on {minutes.Key}th minute"); var id = int.Parse(sleeper.Key.TrimStart('#')); Console.WriteLine($"Answer : {id * minutes.Key}"); } } }