diff --git a/2022/04/both b/2022/04/both new file mode 100755 index 0000000..08a2380 Binary files /dev/null and b/2022/04/both differ diff --git a/2022/04/both.nim b/2022/04/both.nim new file mode 100644 index 0000000..11b2dee --- /dev/null +++ b/2022/04/both.nim @@ -0,0 +1,41 @@ +import + std/strformat, + std/strutils + +import + ../../adventofcode + +let input = adventofcode.getInput() + +var score = 0 + +for pair in input.splitLines: + let sepIdx = pair.find(',') + assert sepIdx != -1 + + let range1Str = pair[0 ..< sepIdx] + let range2Str = pair[sepIdx + 1 .. ^1] + var range1: set[0 .. 65535] + var range2: set[0 .. 65535] + + for i in 0 .. 1: + let rangeStr = block: + if i == 0: range1Str + else: range2Str + let rangeStrSepIdx = rangeStr.find('-') + assert rangeStrSepIdx != -1 + let rangeStart = parseInt rangeStr[0 ..< rangeStrSepIdx] + let rangeEnd = parseInt rangeStr[rangeStrSepIdx + 1 .. ^1] + if i == 0: range1 = {rangeStart .. rangeEnd} + else: range2 = {rangeStart .. rangeEnd} + + var total = range1 + range2 + when not defined(second): + if range1.len == total.len or range2.len == total.len: + score += 1 + else: + if total.len != (range1.len + range2.len): + score += 1 + +echo fmt"Answer: {score}" +