Add day 4 solution.
This commit is contained in:
parent
735170ea73
commit
e6a76e428f
52
day4.cr
Normal file
52
day4.cr
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
require "./common.cr"
|
||||||
|
|
||||||
|
lines = File.read("day4_input").split("\n")
|
||||||
|
lines.pop
|
||||||
|
lines.sort!
|
||||||
|
|
||||||
|
REGEX = /\[(\d+)-(\d+)-(\d+) (\d+):(\d+)\].+/
|
||||||
|
GUARD_REGEX = /.+#(\d+).+/
|
||||||
|
|
||||||
|
active = 0
|
||||||
|
last_time = {0, 1, 0, 0, 0}
|
||||||
|
minutes = {} of Int32 => Array(Int32)
|
||||||
|
|
||||||
|
lines.each do |line|
|
||||||
|
match = line.match(REGEX).not_nil!
|
||||||
|
year = match[1].to_i32
|
||||||
|
month = match[2].to_i32
|
||||||
|
day = match[3].to_i32
|
||||||
|
hour = match[4].to_i32
|
||||||
|
minute = match[5].to_i32
|
||||||
|
new_time = {year, month, day, hour, minute}
|
||||||
|
|
||||||
|
if line.includes? "Guard"
|
||||||
|
active = line.match(GUARD_REGEX).not_nil![1].to_i32
|
||||||
|
elsif line.includes? "wakes"
|
||||||
|
old_year, old_month, old_day, old_hour, old_minute = last_time
|
||||||
|
difference = (day - old_day) * 24 * 60 +
|
||||||
|
(hour - old_hour) * 60 +
|
||||||
|
(minute - old_minute)
|
||||||
|
|
||||||
|
array = minutes[active]? || Array.new(60, 0)
|
||||||
|
60.times do |m|
|
||||||
|
array[m] += difference / 60
|
||||||
|
end
|
||||||
|
(difference % 60).times do |m|
|
||||||
|
actual_minute = (old_minute + m) % 60
|
||||||
|
array[actual_minute] += 1
|
||||||
|
end
|
||||||
|
minutes[active] = array
|
||||||
|
end
|
||||||
|
last_time = new_time
|
||||||
|
end
|
||||||
|
|
||||||
|
guard_num, guard_minutes = minutes.max_by &.[1].sum
|
||||||
|
puts "Guard num: #{guard_num}"
|
||||||
|
puts "Guard minute: #{(guard_minutes.index guard_minutes.max).not_nil!}"
|
||||||
|
puts "Answer num: #{guard_num * (guard_minutes.index guard_minutes.max).not_nil!}"
|
||||||
|
|
||||||
|
guard_num, guard_minutes = minutes.max_by &.[1].max
|
||||||
|
puts "Guard num: #{guard_num}"
|
||||||
|
puts "Guard minute: #{(guard_minutes.index guard_minutes.max).not_nil!}"
|
||||||
|
puts "Answer num: #{guard_num * (guard_minutes.index guard_minutes.max).not_nil!}"
|
Loading…
Reference in New Issue
Block a user