import os import common iterator point_range(s: Point, e: Point): Point = var x1 = s[0] var y1 = s[1] var x2 = e[0] var y2 = e[1] for i in 0..abs(x2 - x1): yield (x1, y1) if x1 > x2: x1 -= 1 elif x1 < x2: x1 += 1 if y1 > y2: y1 -= 1 elif y1 < y2: y1 += 1 proc main() = let path = commandLineParams()[0] let (lines, width, height) = common.readFile(path) var lines_map = newLinesMap(width, height) for (s, e) in lines: if s[0] == e[0]: for y in min(s[1], e[1])..max(s[1], e[1]): lines_map.incMapPos(s[0], y) elif s[1] == e[1]: for x in min(s[0], e[0])..max(s[0], e[0]): lines_map.incMapPos(x, s[1]) else: for x, y in point_range(s, e): lines_map.incMapPos(x, y) echo lines_map.countOverlaps() main()