From 0c554c06e4a15a48dc53390aaaa9c46d0c293805 Mon Sep 17 00:00:00 2001 From: Nat Lasseter Date: Tue, 4 Dec 2018 11:44:01 +0000 Subject: [day04] failing --- day04/part1 | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100755 day04/part1 (limited to 'day04/part1') 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 -- cgit v1.2.3