Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import std.stdio;
- import std.datetime;
- import std.file;
- import std.format;
- import std.algorithm;
- import std.string;
- import std.range;
- void main(string[] args)
- {
- auto logLines = readText("data.txt").splitLines().sort();
- int year, month, day, hour, min, g, startMinute;
- int[][int] guards;
- string log;
- foreach(line; logLines) {
- line.formattedRead!"[%d-%d-%d %d:%d] %s"(year, month, day, hour, min, log);
- auto date = DateTime(year, month, day, hour, min);
- final switch(log[0]) {
- case 'G':
- log.formattedRead!"Guard #%d begins shift"(g);
- break;
- case 'f':
- startMinute = date.minute;
- break;
- case 'w':
- guards[g] ~= iota(startMinute, date.minute, 1).array;
- break;
- }
- }
- auto minuteSum = guards.values.map!(a => a.length);
- auto id = assocArray(zip(minuteSum, guards.keys))[minuteSum.maxElement];
- auto minutesCount = guards[id].sort.group.assocArray;
- auto maxCount = minutesCount.values.reduce!max;
- auto minute = assocArray(zip(minutesCount.values, minutesCount.keys))[maxCount];
- writeln(id * minute);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement