parent
							
								
									2b722205d2
								
							
						
					
					
						commit
						764c2e4942
					
				@ -0,0 +1,77 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env julia
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using Test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function parse_line_ranges(line)
 | 
				
			||||||
 | 
					  parts = split(line, ',')
 | 
				
			||||||
 | 
					  ranges = Vector{UnitRange{Int64}}()
 | 
				
			||||||
 | 
					  for p in parts
 | 
				
			||||||
 | 
					    start, stop = split(p, '-', limit=2)
 | 
				
			||||||
 | 
					    prange = UnitRange(parse(Int64, start), parse(Int64, stop))
 | 
				
			||||||
 | 
					    push!(ranges, prange)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  return ranges
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function line_range_contained(line)
 | 
				
			||||||
 | 
					  ranges = parse_line_ranges(line)
 | 
				
			||||||
 | 
					  inter = intersect(ranges[1], ranges[2])
 | 
				
			||||||
 | 
					  return (inter == ranges[1] || inter == ranges[2])
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function line_range_overlap(line)
 | 
				
			||||||
 | 
					  ranges = parse_line_ranges(line)
 | 
				
			||||||
 | 
					  inter = intersect(ranges[1], ranges[2])
 | 
				
			||||||
 | 
					  return length(inter) > 0
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function count_range_contained(infile)
 | 
				
			||||||
 | 
					  rsum = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  open(infile, "r") do io
 | 
				
			||||||
 | 
					    for line in eachline(io)
 | 
				
			||||||
 | 
					      if line_range_contained(line)
 | 
				
			||||||
 | 
					        rsum += 1
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return rsum
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function count_range_overlap(infile)
 | 
				
			||||||
 | 
					  osum = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  open(infile, "r") do io
 | 
				
			||||||
 | 
					    for line in eachline(io)
 | 
				
			||||||
 | 
					      if line_range_overlap(line)
 | 
				
			||||||
 | 
					        osum += 1
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return osum
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function test()
 | 
				
			||||||
 | 
					  @testset "elf cleaning contained" verbose=true begin
 | 
				
			||||||
 | 
					    @test count_range_contained("example.txt") == 2
 | 
				
			||||||
 | 
					    @test count_range_contained("input.txt") == 500
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  @testset "elf cleaning overlap" verbose=true begin
 | 
				
			||||||
 | 
					    @test count_range_overlap("example.txt") == 4
 | 
				
			||||||
 | 
					    @test count_range_overlap("input.txt") == 815
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function main()
 | 
				
			||||||
 | 
					  if size(ARGS, 1) == 0
 | 
				
			||||||
 | 
					    test()
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    infile = ARGS[1]
 | 
				
			||||||
 | 
					    println("infile = ", infile)
 | 
				
			||||||
 | 
					    println("bad assignments: ", count_range_contained(infile))
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					main()
 | 
				
			||||||
@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					2-4,6-8
 | 
				
			||||||
 | 
					2-3,4-5
 | 
				
			||||||
 | 
					5-7,7-9
 | 
				
			||||||
 | 
					2-8,3-7
 | 
				
			||||||
 | 
					6-6,4-6
 | 
				
			||||||
 | 
					2-6,4-8
 | 
				
			||||||
											
												
													File diff suppressed because it is too large
													Load Diff
												
											
										
									
								
					Loading…
					
					
				
		Reference in new issue