mirror of
https://github.com/onyx-and-iris/aoc2025.git
synced 2025-12-08 11:47:47 +00:00
48 lines
1.1 KiB
Ruby
Executable File
48 lines
1.1 KiB
Ruby
Executable File
#!/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
|