add day_05

This commit is contained in:
onyx-and-iris 2025-12-05 06:40:39 +00:00
parent 432d14e248
commit 0a3b029aba
2 changed files with 75 additions and 0 deletions

28
day_05/1.rb Executable file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
# frozen_string_literal: true
class Main
def run
ranges = []
ingredient_ids = Hash.new(0)
$stdin.each_line do |line|
arr = line.chomp.split("-").map(&:to_i)
if arr.size == 2
ranges << (arr[0]..arr[1])
elsif arr.size == 1
ingredient_ids[arr[0]] += 1
end
end
@sum = 0
ingredient_ids.each do |id, count|
if ranges.any? { |r| r.include?(id) }
@sum += count
end
end
puts @sum
end
end
Main.new.run

47
day_05/2.rb Executable file
View File

@ -0,0 +1,47 @@
#!/usr/bin/env ruby
# frozen_string_literal: true
class Main
def run
ranges = []
$stdin.each_line do |line|
arr = line.chomp.split("-").map(&:to_i)
if arr.size == 2
ranges << (arr[0]..arr[1])
end
end
# Sort ranges by starting point
# This prevents having to check all previous ranges for every new range
ranges.sort_by!(&:begin)
valid_id_ranges = []
ranges.each do |r|
valid_id_ranges.each do |vr|
if (
# r starts inside vr
r.begin >= vr.begin && r.begin <= vr.end) ||
# r ends inside vr
(r.end >= vr.begin && r.end <= vr.end) ||
# vr starts inside r
(vr.begin >= r.begin && vr.begin <= r.end) ||
# vr ends inside r
(vr.end >= r.begin && vr.end <= r.end)
# Merge ranges
r = ([r.begin, vr.begin].min..[r.end, vr.end].max)
valid_id_ranges.delete(vr)
end
end
valid_id_ranges << r
end
@total = 0
valid_id_ranges.each do |r|
@total += (r.end - r.begin + 1)
end
puts @total
end
end
Main.new.run