diff --git a/2025/ruby/day_05.rb b/2025/ruby/day_05.rb
new file mode 100644
index 0000000..b2636ff
--- /dev/null
+++ b/2025/ruby/day_05.rb
@@ -0,0 +1,16 @@
+fresh, available = DATA.read.split("\n\n")
+fresh = fresh.scan(/(\d+)-(\d+)/).map { Range.new(*it.map(&:to_i)) }
+available = available.lines.map(&:to_i)
+
+pp available.count {|id| fresh.any? {|range| range.cover?(id) }}
+
+ranges = fresh
+ .sort_by { [it.begin, it.end] }
+ .chunk_while { _1.end >= _2.begin }
+ .map {|ranges|
+ Range.new(ranges.map(&:begin).min, ranges.map(&:end).max)
+ }
+
+pp ranges.sum(&:size)
+
+__END__