adventofcode/2022/03/both.nim

51 lines
1.1 KiB
Nim

import
std/sequtils,
std/strformat,
std/strutils
import
../../adventofcode
let input = adventofcode.getInput()
var answer = 0
let itemTypePriorities = block:
toSeq "-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
when not defined(second):
for rucksack in input.splitLines:
let items = toSeq rucksack
let cmp1 = items[0 ..< items.len() div 2]
let cmp2 = items[items.len() div 2 .. ^1]
for item in cmp1:
if item in cmp2:
answer += itemTypePriorities.find item
break
else:
let inputLines = input.splitLines()
iterator groups*(): tuple[
itemList1: seq[char],
itemList2: seq[char],
itemList3: seq[char]
] =
var i = 0
while i < inputLines.len():
yield (
toSeq inputLines[i],
toSeq inputLines[i+1],
toSeq inputLines[i+2]
)
i += 3
for rucksack1, rucksack2, rucksack3 in groups():
for item in rucksack1:
if item notin rucksack2: continue
if item notin rucksack3: continue
answer += itemTypePriorities.find item
break
echo fmt"Answer: {answer}"