Add day 4 solutions
This commit is contained in:
parent
e37472384b
commit
6e6d652858
14
day4.chpl
Normal file
14
day4.chpl
Normal 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
38
day4.cr
Normal 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)
|
Loading…
Reference in New Issue
Block a user