Add day 4 solutions

This commit is contained in:
Danila Fedorin 2022-12-03 23:35:36 -08:00
parent e37472384b
commit 6e6d652858
2 changed files with 52 additions and 0 deletions

14
day4.chpl Normal file
View File

@ -0,0 +1,14 @@
use IO;
iter pairs() {
var low1, low2, high1, high2 : int;
while readf("%i-%i,%i-%i", low1, high1, low2, high2) do
yield (low1..high1, low2..high2);
}
proc anyContains((r1, r2): 2*range) { return r1.contains(r2) || r2.contains(r1); }
proc overlap((r1, r2): 2*range) { return !r1[r2].isEmpty(); }
var thePairs = pairs();
writeln(+ reduce anyContains(thePairs));
writeln(+ reduce overlap(thePairs));

38
day4.cr Normal file
View File

@ -0,0 +1,38 @@
require "advent"
struct Range(B, E)
def contains?(other)
other.begin >= self.begin && other.end <= self.end
end
def overlaps?(other)
these = self.to_a
others = other.to_a
these.any? { |i| others.includes? i }
end
end
INPUT = input(2022, 4).lines.map do |line|
first, second = line.split(",").map do |str|
left, right = str.split("-").map &.to_i64
left..right
end
{first, second}
end
def part1(input)
input.count do |pair|
l, r = pair
l.contains?(r) || r.contains?(l)
end
end
def part2(input)
input.count do |pair|
l, r = pair
l.overlaps?(r)
end
end
puts part1(INPUT.clone)
puts part2(INPUT.clone)