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