| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- 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<DateTime, string>();
- var guard = new Dictionary<string, (int, Dictionary<int, int>)>();
- 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<int, int>();
- 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}");
- }
- }
- }
|