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