This commit is contained in:
Danny Hpy 2023-12-31 08:18:28 +00:00
parent 52aeb4d7c7
commit 819ab0f508
1 changed files with 54 additions and 0 deletions

54
2023/04/both.nim Normal file
View File

@ -0,0 +1,54 @@
import
std/math,
std/sequtils,
std/strformat,
std/strutils
import
../../adventofcode
let input = adventofcode.getInput()
when not defined(second):
var points = 0
else:
var additionalCards: seq[Natural] = @[]
let lines = input.splitLines()
for i in 0 .. lines.high():
let line = lines[i]
when defined(second):
if additionalCards.high() < i:
additionalCards.add 0
let instances = 1 + additionalCards[i]
let winningNumsStart = line.find(':') + 1
let winningNumsEnd = line.find('|')
let winningNums = line[winningNumsStart ..< winningNumsEnd]
.split(' ')
.filterIt(it != "")
.mapIt(parseInt it)
let elfNums = line[winningNumsEnd + 1 .. ^1]
.split(' ')
.filterIt(it != "")
.mapIt(parseInt it)
var duplicata = 0
for n in elfNums:
if n in winningNums:
duplicata.inc()
when not defined(second):
if duplicata > 0:
points += 2 ^ (duplicata - 1)
else:
for j in 1 .. duplicata:
if additionalCards.high() < i + j:
additionalCards.add 0
additionalCards[i + j] += instances
when not defined(second):
echo fmt"Answer: {points}"
else:
var originalCardCount = len(lines)
var additionalCardSum = sum(additionalCards)
echo fmt"Answer: {originalCardCount + additionalCardSum}"