diff options
author | Nat Lasseter <user@4574.co.uk> | 2018-12-04 11:44:01 +0000 |
---|---|---|
committer | Nat Lasseter <user@4574.co.uk> | 2018-12-04 11:44:01 +0000 |
commit | 0c554c06e4a15a48dc53390aaaa9c46d0c293805 (patch) | |
tree | cdd048abefa44b8be7fdeaa09ea5c19ac7a07577 /day04/part1 | |
parent | 205150db764cc9d62efb0a2b6653bf984e7a9de7 (diff) |
[day04] failing
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 |