import std/[strutils] import lib/loader type PasswordItem = object min: int max: int letter: char pwd: string var data: seq[PasswordItem] for line in loadStrings(2): let parts = line.split() let minmax = parts[0].split('-') let item = PasswordItem( min: parseInt(minmax[0]), max: parseInt(minmax[1]), letter: parts[1].strip(chars = {':'})[0], pwd: parts[2] ) data.add(item) proc partOne() = var total = 0 for item in data: let c = item.pwd.count(item.letter) if c >= item.min and c <= item.max: total += 1 echo "One: ", total proc partTwo() = var total = 0 for item in data: let first = (item.pwd[item.min - 1] == item.letter) let last = (item.pwd[item.max - 1] == item.letter) if (first and not last) or (last and not first): total += 1 echo "Two: ", total when isMainModule: partOne() partTwo()