diff options
Diffstat (limited to 'day04/part1')
-rwxr-xr-x | day04/part1 | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/day04/part1 b/day04/part1 new file mode 100755 index 0000000..91d38b4 --- /dev/null +++ b/day04/part1 @@ -0,0 +1,45 @@ +#!/usr/bin/env ruby + +input = $stdin.readlines.map(&:chomp).sort + +currentguard = nil +guards = Hash.new { |h,k| h[k] = Hash.new { |h,k| h[k] = Array.new(60, false) } } + +(0...input.length).each do |i| + if input[i] =~ /\[1518-\d\d-\d\d \d\d:\d\d\] Guard #(\d+) begins shift/ + currentguard = $1.to_i + elsif input[i] =~ /\[1518-(\d\d-\d\d) \d\d:(\d\d)\] falls asleep/ + date = $1 + smin = $2.to_i + input[i+1] =~ /\[1518-\d\d-\d\d \d\d:(\d\d)\] wakes up/ + emin = $1.to_i + (smin...emin).each do |m| + guards[currentguard][date][m] = true + end + else + next + end +end + +times = [] +guards.each do |id, days| + sum = 0 + days.each do |day| + sum += day.count(true) + end + times[id] = sum +end + +sleepiestguard = times.index(times.compact.max) + +minutes = Array.new(60, 0) + +(0...60).each do |m| + guards[sleepiestguard].each_value do |mins| + minutes[m] += 1 if mins[m] + end +end + +sleepiestminute = minutes.index(minutes.max) + +puts sleepiestguard * sleepiestminute |