From f011067e6c3c89948f83b223039a2d44dc349686 Mon Sep 17 00:00:00 2001 From: Daniel Flanagan Date: Sun, 5 Dec 2021 14:22:46 -0600 Subject: [PATCH] Day 5 prt 2 --- 2021/five.nim | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/2021/five.nim b/2021/five.nim index 4f2028c..3be06e2 100644 --- a/2021/five.nim +++ b/2021/five.nim @@ -22,22 +22,26 @@ proc part2(inputLines: seq[string]): int = for l in inputLines: let (x1, y1, x2, y2) = l.toPointPair() let ang = arctan2(float(y2 - y1), float(x2 - x1)) * 180 / PI - echo ang - if x1 == x2 or y1 == y2 or (ang.abs() mod 90) == 45.0: + if (ang.abs() mod 90) == 45.0: + var x = x1 + var y = y1 + let xd = if x1 > x2: -1 else: 1 + let yd = if y1 > y2: -1 else: 1 + while x >= min(x1, x2) and x <= max(x1, x2) and y >= min(y1, y2) and y <= max(y1, y2): + points.inc((x, y)) + x += xd + y += yd + elif x1 == x2 or y1 == y2: for x in min(x1, x2)..max(x1, x2): for y in min(y1, y2)..max(y1, y2): - echo &"{x} {y}" points.inc((x, y)) for p in points.values(): - echo p if p >= 2: inc result - echo result - echo points, points.len() let input = 5.loadInput() -# time("day 5 part 1"): echo input.part1() -# time("day 5 part 2"): echo input.part2() +time("day 5 part 1"): echo input.part1() +time("day 5 part 2"): echo input.part2() when not defined(release): let testInput = """0,9 -> 5,9 @@ -50,5 +54,5 @@ when not defined(release): 3,4 -> 1,4 0,0 -> 8,8 5,5 -> 8,2""".split('\n') - # doAssert testInput.part1() == 5 + doAssert testInput.part1() == 5 doAssert testInput.part2() == 12