#!/usr/bin/env julia using DelimitedFiles infile = size(ARGS, 1) > 0 ? ARGS[1] : "day5input.txt" println("infile = ", infile) # 0,9 -> 5,9 line_re = r"(\d+),(\d+) -> (\d+),(\d+)" open(infile, "r") do io horiz = Vector[] vert = Vector[] diag = Vector[] max_x = 0 max_y = 0 for line in eachline(io) m = match(line_re, line) nums = [parse(Int, m[i])+1 for i in 1:4] max_x = max(max_x, nums[1], nums[3]) max_y = max(max_y, nums[2], nums[4]) if nums[1] == nums[3] if (nums[2] > nums[4]) nums[2], nums[4] = nums[4], nums[2] end push!(vert, nums) elseif nums[2] == nums[4] if (nums[1] > nums[3]) nums[1], nums[3] = nums[3], nums[1] end push!(horiz, nums) else push!(diag, nums) end end println("max ", max_x, ", ", max_y) println("horiz ", length(horiz)) println("vert ", length(vert)) M = zeros(Int64, max_y, max_x) for hl in horiz M[hl[2], hl[1]:hl[3]] .+= 1 end for vl in vert M[vl[2]:vl[4], vl[1]] .+= 1 end if (length(M) < 1000) println("M") display(M) println() end ndanger = length(findall(M .> 1)) println("dangerous coords ", ndanger) for d in diag if (d[1] > d[3]) xrange = d[1]:-1:d[3] else xrange = d[1]:d[3] end if (d[2] > d[4]) yrange = d[2]:-1:d[4] else yrange = d[2]:d[4] end idx = [CartesianIndex(c) for c in zip(yrange, xrange)] M[idx] .+= 1 end if (length(M) < 1000) println("M") display(M) println() end ndanger2 = length(findall(M .> 1)) println("dangerous coords (part 2) ", ndanger2) end